[자바] 자바 버전 별 정리

박지운·2023년 8월 6일
0

자바 꽉 자바

목록 보기
5/12

자바8 과 자바17에는 큰 차이가 있다고 얼핏 들어왔다. 이번에는 확실히 정리해 차이를 알고자 한다.

SE? EE? FX???

먼저 Java 뒤에 붙는 영어부터 알아보자.

  • SE : Standard Edition의 약어이다. 자바 표준 에디션은 가장 기본이 되는 에디션이다. 흔히 자바 언어라고 하는 대부분의 패키지가 포함된 에디션이다.
  • EE : Enterprise Edition은 Enterprise Edition으로 SE기반 위에 탑재된다. JSP, Servlet, JDBC를 포함한다.
  • FX : 인터넷 어플리케이션을 만들 때 사용된다고 한다.
  • ME : 작은 장치에서 동작하는 모바일용이다.

일반적인 개발에서는 SE만 신경쓰면 될 것 같다!


LTS

Long Term Support는 출시 후 8년이라는 긴 기간을 보안 업데이트와 버그 수정을 지원하는 버전이다.

 Oracle 인수 후 java8에서 등장한 lambda와 Stream등 편리한 기능으로 
 java 8에 대한 지원을 2030년 까지로 확장하기로 했다. 

❗ 따라서 왜 해당 버전을 사용하는 지 알기 위해서는 LTS인 8, 11, 17의 차이를 알면 될 것 같다.


버전 별 차이

자바 8

  1. Lambda
  2. Stream
  3. Interface default Method
  4. Optional
  5. LocalDateTime
  • Lambda
    함수를 하나의 식으로 표현한 것이다. Java 8 이전 익명 클래스의 사용을 더욱 간결하게 바꾼 것이다.

    List<Integer> intList = new ArrayList<Integer>();
    intList.add(0);
    intList.add(1);
    intList.add(2);
    /// 인스턴스의 메소드
    List<Integer> resultList = intList.stream().map(intList::get).collect(Collectors.toList());
    /// 클래스의 생성자
    List<Double> resultList = intList.stream().map(Double::new).collect(Collectors.toList());
    System.out.println(intList);
    System.out.println(resultList);
    	--------------------------------------------------------------------------------------
    	람다와 메소드 레퍼런스로 단축 표현
    	(String s) -> System.out.println(s)  :       System.out::println
    	(str, i) -> str.substring(i)         :       String::substring
  • Stream

    순차/병렬 작업을 지원한다. 하나의 문장으로 다양한 처리 기능을 구현이 가능하다.

  • Interface의 Default Methods
    인터페이스는 메소드 정의만 할 수 있고 구현은 할 수 없었지만, 디폴트 메소드라는 개념이 생겨 구현 내용도 인터페이스에 포함시킬 수 있다. 호환성 때문에 사용한다고 하는데 더 알아봐야 할 것 같다.

    public interface Calculator {
    		public int plus(int i, int j);
    		public int multiple(int i, int j);
    		default int exec(int i, int j){      //default로 선언함으로 메소드를 구현할 수 있다.
    			return i + j;
    			}
    		}
    
    //상속받은 클래스에서 구현
    public class MyCalculator implements Calculator {
    	
        @Override
        public int plus(int i, int j) {
        	return i + j;
        }
    }
    	//상속받은 클래스에서 따로 구현 X
    public class MyCalculatorExam {
    	public static void main(String[] args) {
        	Calculator cal = new MyCalculator();
            int value = cal.exec(5,10);
            System.out.println(value);
       	}
    }
  • Optional

    Optional 구조체로 인해 간편하게 NPE(Null Pointer Exception) 이슈에 대응할 수 있다.
    try catch문을 줄일 수 있다. Optional도 사용법을 정리할 예정이다.

  • LocalDateTime
    기존 Date와 Calendar 클래스의 기능 부족과 비 표준 명명 규칙을 해결하기 위해 나온 API이다.


자바 11

자바 11의 경우 개발자의 관점에서는 큰 차이는 없다.

  1. Lambda 매개변수에 대한 지역 변수 유형 추론
  2. String 메소드 추가

string의 공백 관련 메소드가 추가된 것과 람다 표현식에 var사용 가능한 것을 제외하고는 8과 큰 차이가 없는 것처럼 느껴졌다.


자바 17

  1. Pattern Matching fot switch
  2. Sealed Classes
  • Pattern Matching fot switch
    코드 가독성 향상과 불필요한 캐스팅, 조건문을 줄일 수 있게 되었다.

       static void typeTester(Object o) {
       	switch(o) {
           	case null -> System.out.println("null");
               case String s -> System.out.println("String");
           }
       }
       

    이외에도 enum형이나 다른 자료형도 받을 수 있다.

  • Sealed Classes
    상속하거나 구현할 클래스를 지정해두고, 해당 클래스들만 상속/구현이 가능하도록 제한하는 기능이다. 이를 통해 어떤 클래스가 해당 클래스를 상속받는지를 쉽게 알 수 있고 제한할 수 있다.

    게임 예시를 들면 Character라는 class에서 주인공과 몬스터를 두고
    주인공인 Hero클래스에서 permit을 젤다 클래스에만 주는 것이다. 그러면 Monster클래스는 절대 상속을 할 수 없다.


참고
https://velog.io/@ililil9482/Java17%EC%9D%84-%EA%B3%A0%EB%A0%A4%ED%95%B4%EC%95%BC%ED%95%A0%EA%B9%8C

https://projooni.tistory.com/entry/Java-%EB%B2%84%EC%A0%84%EB%B3%84-%EC%B0%A8%EC%9D%B4%EC%99%80-%ED%8A%B9%EC%A7%95

https://hajoung56.tistory.com/35

profile
앞길막막 전과생

1개의 댓글

comment-user-thumbnail
2023년 8월 6일

공감하며 읽었습니다. 좋은 글 감사드립니다.

답글 달기