Optional
- NPE (NullPointerException) : 개발을 할 때 가장 많이 발생하는 예외
- Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다.
- Optional.of() - 값이 Null이 아닌 경우
- Optional.ofNullbale() - 값이 Null일수도, 아닐수도 있는 경우
- Optional은 값을 Wrapping하고 다시 풀고, null 일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로
잘못 사용하면 시스템 성능이 저하된다. - 자바에서는 거의 모든것이 래퍼런스 -> 거의 모든것이 null이 될 수 있다.
- 메소드의 반환 값이 절대 null이 아니라면 Optional을 사용하지 않는 것이 좋다.
- 출처: https://mangkyu.tistory.com/70 [MangKyu's Diary:티스토리]
public class User {
public static final User EMPTY = new User(0, "");
}
(main)
User user = User.Empty;
if(user == User.Empty) {
}// Empty 객체를 사용해서 null 체크
(main)
Optional<User> optionalUser;
optionalUser = Optional.of(new User(1, "2"));
optionalUser.isEmpty(); // 값이 없으면 true
optionalUser.isPresent() // 값이 있으면 true
if (optionalUser.isPresent()) {
} else {
}
optionalUser.ifPresent(user -> {
// do 1
});
optionalUser.ifPresentOrElse(user -> {
// do 1
}, () -> {
// do 2
})
Map의 동시성 문제를 고려하여 실무에서는 ConcurrentHashMap, AtomicLong 사용
ConcurrentHashMap : https://applepick.tistory.com/124
AtomicLong : https://velog.io/@donghokim1998/Java-AtomicLong%EC%9D%B4%EB%9E%80
Assertion / assertThat
- Assertion : 버그라고도 불리는 프로그래밍 오류를 감지하는 수단으로만 사용
- 코드 내의 내부 논리 검사
- on / off 가능하다고 함
- 자신이나 개발자 팀에 피드백을 제공하기 위해 사용
- assertThat
- 자동완성
assertThat에서 반환되는 Assert 클래스를 사용하기 때문에, 메소드 자동완성이 지원되어 편리합니다. - Assertion 분류
assertThat에서 인자의 타입에 맞는 Assert 클래스를 반환하기 때문에, 필요한 메소드만 분류되어있습니다. - 확장성
체이닝 메소드 패턴으로 작성 가능하기 때문에, 조건 추가를 위해 추가 작업이 필요없어 편리하고 가독성도 좋습니다.
- 자동완성
'프로그래밍 > JAVA' 카테고리의 다른 글
[JAVA] Stream에 대한 근본적인 이해 (0) | 2024.07.25 |
---|---|
[Java] UML (0) | 2024.07.21 |
[Java] Stream (0) | 2024.03.30 |
[Java] Optional (0) | 2024.03.30 |
[Java] 메서드 참조 (0) | 2024.03.30 |