TIL&WIL
23.01.26 TIL
ultramancode
2023. 1. 26. 01:27
☑️ Enum 비교는 == 가 기본
if (orderStatus == OrderStatus.CANCELLED) { // 주문 취소 로직 }
이유
| 싱글턴 | JVM 안에서 Enum 상수는 클래스당 한 인스턴스만 생성됨 |
| 성능 | == 는 단순 참조 비교이므로 equals() 보다 빠름 |
| 안전성 | status == null 이라도 NPE 발생 없음. |
null 가능성이 있는 변수라면, 안전하게 OrderStatus.CANCELLED.equals(status) 처럼 상수를 앞에 두는 패턴을 사용해도 좋음
☑️ IntelliJ에서 클래스·파일 이름을 잘못 만들었을 때
- 파일 탭에서 Shift + F6 (Refactor → Rename)
- 새 이름 입력 후 Enter
- 패키지, import, 사용처가 자동으로 모두 수정
.java 파일을 파일 탐색기에서 직접 바꾸면 컴파일 오류가 남을 수 있으니, 항상 IDE 리팩터링 기능을 사용하기!!
☑️ long(원시 타입) vs Long(래퍼 클래스)
| 항목 | long | Long |
| Nullable | 불가 (0이 기본값) | 가능 (null) |
| 박싱/언박싱 | 해당 없음 | 발생 (Auto Boxing / Unboxing) |
| 메모리·속도 | 더 가벼움 | 객체 생성 오버헤드 존재 |
☑️ 엔티티 ID에 Long을 주로 쓰는 이유
JPA 등 도메인 모델에서는 영속화 전(DB에 아직 저장되지 않은 상태)에 ID가 null일 수 있다.
이때 long은 0을 기본값으로 가지므로 “존재하지 않는 ID”와 구분이 어렵다.
따라서 nullable한 Long 을 쓰고, DB에서 NOT NULL이 완전히 보장되는 상황이라면 long 으로 교체해도 된다.
@Entity public class Post {
@Id
@GeneratedValue
private Long id; // 저장 전에는 null
}
☑️ 박싱/언박싱 주의
Long a = 10L; // Auto Boxing → 객체 생성
long b = a; // Auto Unboxing
- 반복 루프나 대량 컬렉션에서 빈번히 발생하면 불필요한 객체 할당과 성능 저하를 초래할 수 있음