티스토리 뷰
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)의 한 종류라고 볼 수 있다.
▪️ 특징
- 람다식 내에서 사용되는 지역변수는 final이 붙지 않아도 상수로 간주된다.
- 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없다.
▪️ 장점
- 코드를 간결하게 만들 수 있다.
- 식에 개발자의 의도가 명확히 드러나 가독성이 높아진다.
- 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다.
▪️ 단점
- 람다를 사용하면서 만든 무명함수는 재사용이 불가능하다.
- 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있다.
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
데이터의 흐름으로 람다를 사용할 수 있도록 제공합니다.
▪️ 장점
- 간단하게 병렬처리(multi-threading)가 가능
- 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다
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
'Tech Interview > 기술 면접 준비' 카테고리의 다른 글
[Backend 개발자 면접 준비] OSI 7 계층이란? (0) | 2023.07.31 |
---|---|
[Backend 개발자 면접 준비] 오버로딩 vs 오버라이딩 (Overloading vs Overriding) (0) | 2023.07.29 |
[Backend 개발자 면접 준비] JWT(JSON Web Token)란? (0) | 2023.07.27 |
[Backend 개발자 면접 준비] TCP 연결 / 해제 과정 (3 / 4 way HandShake) (0) | 2023.07.26 |
[Backend 개발자 면접 준비] 데이터베이스 - 트랜잭션(Transaction) (0) | 2023.07.24 |
- Total
- Today
- Yesterday
- 프로그래머스 자바
- 제로베이스 백엔드 스쿨
- 취업준비
- 알고리즘 공부
- 기술 면접 준비
- 백준
- 백엔드 개발자 취업 준비
- 백엔드 개발자 기술 면접 준비
- 주니어 개발자 취업 준비
- 알고리즘공부
- 코테공부
- java
- 취업 준비
- 프로그래머스 카카오
- 개발자 취업 준비
- 코딩테스트 준비
- 자바공부
- 자바
- 백엔드 개발자
- 제로베이스 백준 장학금
- 프로그래머스
- 코테 준비
- 알고리즘
- 코딩테스트 공부
- 코테준비
- 코딩테스트
- 개발자 취준
- 취준
- 개발자 면접 준비
- 코딩테스트공부
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |