Tech Interview/기술 면접 준비

[Backend 개발자 면접 준비] Java 8 추가 된 내용

h7ung 2023. 7. 24. 15:38
728x90

Java 8 에 추가 된 내용

  • 람다식(Lambda expressions)
  • 함수형 인터페이스 (Functional Interface)
  • 디폴트 메서드 (Default Method)
  • JVM의 변화
  • 병렬 배열 정렬(Parallel Array Sorting)
  • 컬렉션을 위한 대용량 데이터 처리 ( 스트림 )
  • Optional
  • Base64 인코딩과 디코딩을 위한 표준 API
  • 새로운 날짜, 시간 API (Date & Time API)

 

이 중에서 bold 로 된 항목에 대해서 간략하게 정리하고자 한다.


1️⃣ Lambda expressions

람다는 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다.

▪️ 특징

  1. 람다식 내에서 사용되는 지역변수는 final이 붙지 않아도 상수로 간주된다.
  2. 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없다.

▪️ 장점

  1. 코드를 간결하게 만들 수 있다.
  2. 식에 개발자의 의도가 명확히 드러나 가독성이 높아진다.
  3. 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다.

▪️ 단점

  1. 람다를 사용하면서 만든 무명함수는 재사용이 불가능하다.
  2. 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있다.
List<Integer> numList = Arrays.asList(0, 1, 2, 3);

// 1. 반복문
for(Integer num: numList) {
    System.out.println(num);
}

// 2. 람다 표현식
numList.forEach(x -> System.out.println(x));

2️⃣ Optional

Optional은 null 또는 값을 감싸서 NPE(NullPointerException)로부터 부담을 줄이기 위해 등장한 Wrapper 클래스이다. Optional은 값을 Wrapping하고 다시 풀고, null 일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로 잘못 사용하면 시스템 성능이 저하된다. 그렇기 때문에 메소드의 반환 값이 절대 null이 아니라면 Optional을 사용하지 않는 것이 좋다. 즉, Optional은 메소드의 결과가 null이 될 수 있으며, null에 의해 오류가 발생할 가능성이 매우 높을 때 반환값으로만 사용되어야 한다.

▪️ 장점

명시적으로 반환값이 Null일 수 있음을 알려주며, 직접 null을 다루지 않아도 된다.

Optional<UserVO> userVO = Optional.ofNullable(Object.getUser());
Optional<Master> master = userVO.map(UserVO::getMaster);
Optional<String> subName = master.map(Master::getSubName);
String result = subName.ofElse("none sub");

// 위의 코드를 아래와 같이 축약
String result = Object.map(UserVO::getMaster)
                        .map(Master::getSubName)
                        .orElse("noneSub");

3️⃣ Stream

데이터의 흐름으로 람다를 사용할 수 있도록 제공합니다.

▪️ 장점

  1. 간단하게 병렬처리(multi-threading)가 가능
  2. 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다
int[] numArr = { 0, 1, 2};

Arrays.stream(numArr).forEach(System.out::println);

IntStream.range(0, 3).boxed().forEach(System.out::println);

4️⃣ Java8 Date / Time API

LocalDate LocalTime 그리고 LocalDateTime 이 있다. 이 3개의 클래스는 모두 타임존 개념을 가지고 있지 않기 때문에 타임존에 따른 시간 변환이 불가능하다는 공통점을 가지고 있습니다.

 

▪️ LocalDate (년 / 월 / 일)

▪️ LocalTime (시 / 분 / 초)

▪️ LocalDateTime (년 / 월 / 일 / 시 / 분 / 초)

 

System.out.println(LocalDate.now()); //2023-07-24
System.out.println(LocalTime.now()); //15:17:51.369
System.out.println(LocalDateTime.now()); //2023-07-24T15:17:51.369

5️⃣ Base64 인코딩과 디코딩을 위한 표준 API

8비트의 이진 데이터를 문자코드에 영향을 받지 않는 공통 ASCII 문자 들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식

데이터를 base64로 변환하는 것을 인코딩한다, 그 반대를 디코딩 한다고 표현한다. 그리고 6bit씩 잘라서 표현한다.

 

String sampleText = "sample text";
System.out.println("인코딩할 문자열 : " + sampleText);
//encoding
String encodingText = Base64.getEncoder().encodeToString(sampleText.getBytes());
System.out.println("base64로 인코딩된 문자열: " + encodingText);// c2FtcGxlIHRleHQ=

//decoding
//String new 할때, 바이트 배열이 문자열로 변환됨
String decodingText = new String(Base64.getDecoder().decode(encodingText));
System.out.println("base64로 디코딩된 문자열: " + decodingText);

 

 

Reference link

 

728x90