이 중에서 bold 로 된 항목에 대해서 간략하게 정리하고자 한다.
람다는 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다.
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));
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");
데이터의 흐름으로 람다를 사용할 수 있도록 제공합니다.
int[] numArr = { 0, 1, 2};
Arrays.stream(numArr).forEach(System.out::println);
IntStream.range(0, 3).boxed().forEach(System.out::println);
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
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
https://mangkyu.tistory.com/70
https://frtt0608.tistory.com/152
https://velog.io/@skyepodium/%EC%9E%90%EB%B0%94-Java-8-%EB%B2%84%EC%A0%84-%ED%8A%B9%EC%A7%95#3-%EB%A9%94%EC%86%8C%EB%93%9C-%EB%A0%88%ED%8D%BC%EB%9F%B0%EC%8A%A4
https://velog.io/@dohaeng0/base64-vs-base64-url-safe-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%98%88%EC%A0%9C
https://velog.io/@dohaeng0/base64-vs-base64-url-safe-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%98%88%EC%A0%9C
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.