enum, 패키지와 import, static 과 final
5. 자주 하는 실수 (Tip)
❌ 실수 1: ordinal() 을 DB 에 저장한다
stmt.setInt(1, status.ordinal()); // CREATED=0, PAID=1 ... 로 저장나중에 PAID 앞에 PENDING 을 추가하면 기존 데이터의 1 이 전부 PENDING 이 됩니다. 바뀌지 않는 code 필드를 따로 두거나 name() 을 저장하세요.
❌ 실수 2: enum 을 문자열로 비교한다
if (status.toString().equals("PAID")) // ❌ 다시 문자열의 세계로
if (status == OrderStatus.PAID) // ✅❌ 실수 3: switch 에서 enum 상수를 OrderStatus.PAID 로 쓴다
switch (s) { case OrderStatus.PAID -> ... } // 컴파일 오류 (Java 21 이전). case 에는 PAID 만 쓴다❌ 실수 4: static 메서드에서 인스턴스 필드를 쓴다
public static int id() { return id; } // non-static variable id cannot be referenced from a static contextstatic 메서드는 객체 없이 불리므로 "어느 객체의 id" 인지 없습니다. 객체 상태가 필요하면 static 을 떼세요.
❌ 실수 5: 상태를 static 필드에 둔다
public class OrderService { private static Order current; } // 모든 요청이 하나의 current 를 공유웹 서버는 여러 요청을 동시에 처리하므로 static 에 둔 "현재 주문" 은 다른 사용자의 것으로 덮입니다. static 은 진짜 공유해도 되는 값(상수, 불변 설정, 캐시)에만 씁니다.
❌ 실수 6: final 을 붙였으니 안전하다고 믿는다
public static final List<String> CODES = new ArrayList<>(); // 누구나 CODES.add(...) 로 바꿀 수 있다
public static final List<String> CODES = List.of("A", "B"); // ✅ 불변 컬렉션❌ 실수 7: import java.util.* 에 기대다 충돌을 만난다
java.util.* 와 java.sql.* 를 함께 쓰면 Date 가 어느 것인지 모호해 컴파일 오류가 납니다. 클래스 단위 import 를 쓰고 IDE 자동 정리에 맡기세요.