JAVA

[JAVA] 자바 버전과 특징 8 ,11

경딩 2024. 10. 10. 14:49

자바 8과 같은 일부 버전을 왜  1.8 이라고 할까?

 

9 이전의 JAVA 버전은 단순히 다른 명명 체계를 사용했습니다.

따라서 Java 8 은 1.8, Java 5 는 1.5  등으로 불릴 수 있습니다.

'java -version' 명령을 실행하면 아래와 같이 출력됩니다.

c:\Program Files\Java\jdk1.8.0_191\bin>java -version
java version "1.8.0_191" (1)
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

 

이는 단순히 Java 8 을 의미합니다. Java 9 이후부터는 Java version 에는 더이상 접두사 1.x 가 붙지 않습니다.

c:\Program Files\Java\jdk11\bin>java -version
openjdk version "11" 2018-09-25 (1)
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

 


자바 버전별 특징

- Java 8 -

- Java 11 -

  • 람다(Lammbda Expressions)
  • Stream
  • Optional 클래스
  • 기본 인터페이스 메서드(Default Methos)
  • 새로운 String 메서드
  • 람다에서 로컬변수 Var 사용
  • 자바소스파일 컴파일없이 실행

 


- Java 8 -

  • 람다
  • Stream
  • Optional 클래스
  • 기본 인터페이스 메서드(Default Methos)

람다(Lambda Expressions) 

함수를 간단한 식으로 표현하는 방법,  메서드의 이름과 반환값(return) 이 생략된다는 점에서 '익명 함수(anonymous function)' 라고도 불립니다.

int max(int a, int b) {
    return a > b ? a : b;
}

//람다식으로 변환
(a, b) -> a > b ? a : b;

 

Stream API 

스트림은 컬렉션의 저장 요소를 하나씩 순회하면서 처리할 수 있는 코드 패턴입니다.

람다식을 지원한다는 점과 내부 반복자를 사용하기 때문에 병렬 처리가 쉽다는 특징이 있습니다.

List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");
list.stream()
    .filter(name -> name.startsWith("f"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

 

Optional Class 

Optional<T> 는 null 이 올 수 있는 값을 감싸서 Wrapper 클래스로 참조하더라도NPE(Null Pointer Exception) 가 발생하지 않도록 도와주는 역할 입니다.

java 8 이후 부터는 Optional 클래스의 메소드를 통해 null 을 컨트롤 할 수 있습니다.

// Java 8 이전
public String logic() {
    User user = getUser();
    if (user != null) {
        Address address = user.getAddress();
        if (address != null) {
            String street = address.getStreet();
            if (street != null) {
                return street;
            }
        }
    }
    return "not specified";
}

// Java 8 이후
public String logic() {
    Optional<User> user = Optional.ofNullable(getUser());
    String result = user
      .map(User::getAddress)
      .map(Address::getStreet)
      .orElse("not specified");
    return result;
}

 

 

Interface default method

Java8 이전의 인터페이스는 메서드를 정의만 할 수 있었고 구현은 할 수 없었는데요.

8버전부터는 default method 라는 개념이 생기면서 구현 내용도 인터페이스에 포함시킬 수 있게 되었습니다.

String> lispublic interface TestInterface {
    void doSomething();
    default void doSomethingDefault() {
        System.out.println("doing something default");
    }
}

//implements the interface
public class TestClass implements TestInterface {
    @Override
    public void doSomething() {
        System.out.println("doing something");
    }
}

TestClass testClass = new TestClass();
testClass.doSomething();          // Output: "doing something"
testClass.doSomethingDefault();   // Output: "doing something default"

 


- Java 11 -

  • 새로운 String 메서드
  • 람다에서 로컬변수 Var 사용
  • 자바파일 실행

 

새로운 String 메서드

isBlank, repeat 와 같은 유용한 메서드들이 추가되었습니다.

  • strip(): 문자열 앞, 뒤의 공백 제거.
  • stripLeading(): 문자열 앞의 공백 제거.
  • stripTrailing(): 문자열 뒤의 공백 제거.
  • isBlank(): 문자열이 비어있거나, 공백만 포함되어 있을 경우 true를 반환한다.
    • String.trim().isEmpty() 와 결과가 동일함.
  • repeat(n): n개만큼 문자열을 반복하여 붙여서 반환함.

 

람다에서 로컬변수 Var 사용

람다식에서 Var 을 사용할 수 있게 되었다.

(var firstName, var lastName) -> firstName + lastName

 

자바 파일 실행

javac 를 통해 컴파일하지 않고도, 바로 java 파일을 실행할 수 있게되었다.

// Java 11 이전
$ javac HelloWorld.java
$ java Helloworld
Hello Java 8!

// Java 11 이후
$ java HelloWorld.java
Hello Java 11!

 

 

 

참고자료 : https://www.marcobehler.com/guides/a-guide-to-java-versions-and-features#_why_are_companies_still_stuck_with_java_8

'JAVA' 카테고리의 다른 글

[JAVA] staic 과 final  (1) 2024.10.29
== 와 equals 차이 , hashcode  (0) 2024.10.24
[Java] Call by Value 와 Call by Reference  (6) 2024.10.21
[자바의 신] 정리해봅시다 [1장~ 10장]  (0) 2024.10.19
[JAVA] ORM 이란? MyBatis 와 JPA 차이  (4) 2024.10.11