자바

자바 8 vs 자바 11

Hyun-danpung2 2022. 2. 25. 11:11
728x90
반응형

 

결론: 자바 11에서 몇 가지 기능이 추가되었지만 프로젝트 등에서는 안정성을 위해 자바 8을 사용하는 것이 좋다


자바 8 (출처: 스프링 입문을 위한 자바 객체 지향의 원리와 이해)

  • Interface Default and Static Methods
  • Lambda expressions
    // 람다식 미적용 코드
    public class NoLambda{
        public static void main(String[] args){
            Runnable r = new Runnable(){
                public void run(){
                    System.out.println("Run!!");
                }
            }
        }
    }
    // 람다식 적용 코드
    public class UseLambda{
        public static void main(String[] args){
            Runnable r = () -> {
                System.out.println("Run!!");
            }
        }
    }
  • Functional interfaces
    public class ExMyFunctionalInterface{
        public static void main(String[] args){
            MyFunctionalInterface mfi = a -> a * a;
            int b = mfi.runSomething(5);
            System.out.println(b);
        }
    }
    @FunctionalInterface
    interface MyFunctionalInterface{
        public abstract int runSomething(int count);
    }
    // 메서드 인자로 람다식 사용
    public class ExMethodReference{
        public static void main(String[] args){
            doIt(a -> a * a);
        }
        public static void doIt(MyFunctionalInterface mfi){
            int b = mfi.runSomething(5);
            System.out.println(b);
        }
    }
    // 메서드 반환값으로 람다식 사용
    public class ExReturnLambda{
        public static void main(String[] args){
            MyFunctionalInterface mfi = todo();
            int result = mfi.runSomething(3);
            System.out.println(result);
        }
        public static MyFunctionalInterface todo(){
            return num -> num * num;
        }
    }
  • Method References
메서드 레퍼런스 유형 람다식의 인자 예제
클래스::정적메서드 정적 메서드의 인자가 된다 Math::sqrt
num->Math.sqrt(num)
인스턴스::인스턴스메서드 인스턴즈 메서드의 인자가 된다 System.out::println
sqrtNum->System.out::println(sqrtNum)
클래스::인스턴스메서드 첫 번째 인자는 인스턴스가 되고 그다음 인자들은 인스턴스 메서드의 인자들이 된다 Integer::compareTo
(a, b) -> a.compareTo(b)
    // 생성자 레퍼런스 예시
    import java.util.function.Supplier;
    public class Ex{
        public static void main(String[] args){
            Supplier<Ex> factory = Ex::new;
            Ex Ex_1 = factory.get();
            Ex Ex_2 = factory.get();
        }
    }
  • Lambda Expression in Collection Stream
    // 컬렉션 스트림 미적용 코드
    public class NoStream{
        public static void main(String[] args){
            Integer[] ages = { 20, 25, 18, 27, 30, 21, 17, 19, 34, 28 };
            for(int age : ages){
                if(age < 20){
                    System.out.format("Age %d can't enter\n", age);
                }
            }
        }
    }
    // 컬렉션 스트림 적용 코드
    import java.util.Arrays;
    public class UserStream{
        public static void main(String[] args){
            Integer[] ages = { 20, 25, 18, 27, 30, 21, 17, 19, 34, 28 };

            Arrays.stream(ages)
                .filter(age -> age < 20)
                .forEach(age -> System.out.format("Age %d can't enter\n", age));
        }
    }

자바 11 (출처: https://livenow14.tistory.com/81)

  • String 클래스, 메서드 추가: isBlank, lines, strip, stripLeading, stripTrailing, repeat
  • File 클래스, 메서드 추가: readString, writeString
  • 컬렉션 인터페이스, 메서드 추가: 컬렉션의 toArray() 메서드를 오버로딩하는 메서드 추가, 원하는 타입의 배열 선택 가능
  • Predicate 인터페이스에 static not 메서드(부정을 나타냄) 추가
  • 람다에서 로컬 변수 var 사용
  • HTTP Client가 표준 기능이 됨(HTTP/1.1, HTTP/2 지원)
728x90
반응형