💡 instanceof가 뭐야?
👉 instanceof는 자바에서 객체의 타입을 판별하는 키워드!
if (object instanceof String) { ... }
이건 말 그대로:
“이 object가 String 타입인지 확인해줘” 라는 뜻.
☕️ Optional이란?
👉 “값이 있을 수도, 없을 수도 있는 경우”를 안전하게 처리하는 자바 객체
Optional<User> user = userRepository.findByEmail(email);
- 이건 null 대신 Optional로 감싼 User
- 값이 있을 수도 있고 (isPresent()), 없을 수도 있음 (isEmpty())
✅ 왜 Optional을 쓸까?
전통 방식 (NullPointerException 위험)
User user = userRepository.findByEmail(email); // null 가능
if (user.isDeleted()) { ... } // ❌ NPE 위험
Optional 방식
userRepository.findByEmail(email)
.ifPresent(user -> { // ✅ 안전
if (user.isDeleted()) { ... }
});
📌 장점
- NPE 방지
- 명시적인 값 체크 (isPresent(), orElse(), orElseThrow() 등)
- 함수형 API와 잘 어울림
🎯 Optional 자주 쓰는 메서드
메서드 | 설명 |
isPresent() | 값이 있으면 true |
isEmpty() | 값이 없으면 true |
orElse(default) | 값이 없으면 디폴트 리턴 |
orElseThrow() | 없으면 예외 던짐 |
map() | 값이 있으면 변환 |
filter(predicate) | 조건 만족할 때만 유지 |
ifPresent(consumer) | 값이 있으면 실행 |
⚡️ 람다식(Lambda)이란?
👉 자바에서 “함수를 변수처럼” 다루기 위한 문법
(매개변수) -> { 실행문 }
🎯 람다 자주 쓰는 곳
어디서? | 예시 |
forEach() | 리스트 순회 |
filter(), map() | Stream, Optional |
Comparator, 정렬 | 컬렉션 정렬 기준 |
✅ 예시
List<String> names = List.of("Eunji", "Yujin", "Minjae");
names.stream()
.filter(name -> name.startsWith("Y"))
.forEach(name -> System.out.println(name));
👉 filter(...) 안에 들어간 name -> name.startsWith("Y")가 람다식!
✨ 정리
개념 | 한 줄 요약 |
Optional | 값이 있을 수도 없을 수도 있는 객체. NPE 방지용 |
람다식 | 실행할 코드 블록을 간단히 표현한 문법 |
메서드 참조 | user -> user.isDeleted() → User::isDeleted 처럼 표현 축약 |
✅ 예시 2
userRepository.findByEmail(requestDto.getEmail())
.filter(User::isDeleted)
.ifPresent(user -> {
throw new UserException(UserErrorCode.USER_ALREADY_DELETED);
});
“이메일로 유저를 찾고, 그 유저가 삭제 상태(true)이면 USER_ALREADY_DELETED 예외를 던져라.”
.filter(User::isDeleted)
filter(...)는 Optional 안의 값이 조건을 만족할 때만 남겨두는 메서드
User::isDeleted
메서드 참조, user -> user.isDeleted() 를 짧게 쓴 문법
해당 유저가 삭제된 경우(true)만 통과시킴
.ifPresent(user -> { ... })
필터 통과 후, Optional 안에 유저가 존재한다면 실행
여기서 user는 filter를 통과한 유저 객체, 이 블록 안에서 예외를 던짐
User -> 어디에 선언된 변수인가
이 user는 람다 함수의 매개변수 Optional<User> 안에 값이 있을 때, 그 값을 꺼내서 user라는 이름으로 쓰는 것.
마치 이런 느낌
Optional<User> opt = ...;
if (opt.isPresent()) {
User user = opt.get();
...
}
'코딩 > sparta TIL' 카테고리의 다른 글
TIL 38 : AOP (0) | 2025.04.24 |
---|---|
TIL 36 : EntityManagerFactory, EntityManager, EntityTransaction (1) | 2025.04.16 |
TIL 35 : 예외처리 복습 (1) | 2025.04.15 |
TIL 34 : HttpMessageConverter (0) | 2025.04.15 |
Paging 공부중 (0) | 2025.04.09 |