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에서 클래스·파일 이름을 잘못 만들었을 때

  1. 파일 탭에서 Shift + F6 (Refactor → Rename)
  2. 새 이름 입력 후 Enter
  3. 패키지, 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
  • 반복 루프나 대량 컬렉션에서 빈번히 발생하면 불필요한 객체 할당성능 저하를 초래할 수 있음