홈 › 초급 › 07 / 8

enum, 패키지와 import, static 과 final

섹션 7진행 0 / 8

5. 자주 하는 실수 (Tip)

❌ 실수 1: ordinal() 을 DB 에 저장한다

java
stmt.setInt(1, status.ordinal());      // CREATED=0, PAID=1 ... 로 저장

나중에 PAID 앞에 PENDING 을 추가하면 기존 데이터의 1 이 전부 PENDING 이 됩니다. 바뀌지 않는 code 필드를 따로 두거나 name() 을 저장하세요.

❌ 실수 2: enum 을 문자열로 비교한다

java
if (status.toString().equals("PAID"))   // ❌ 다시 문자열의 세계로
if (status == OrderStatus.PAID)         // ✅

❌ 실수 3: switch 에서 enum 상수를 OrderStatus.PAID 로 쓴다

java
switch (s) { case OrderStatus.PAID -> ... }   // 컴파일 오류 (Java 21 이전). case 에는 PAID 만 쓴다

❌ 실수 4: static 메서드에서 인스턴스 필드를 쓴다

java
public static int id() { return id; }   // non-static variable id cannot be referenced from a static context

static 메서드는 객체 없이 불리므로 "어느 객체의 id" 인지 없습니다. 객체 상태가 필요하면 static 을 떼세요.

❌ 실수 5: 상태를 static 필드에 둔다

java
public class OrderService { private static Order current; }   // 모든 요청이 하나의 current 를 공유

웹 서버는 여러 요청을 동시에 처리하므로 static 에 둔 "현재 주문" 은 다른 사용자의 것으로 덮입니다. static 은 진짜 공유해도 되는 값(상수, 불변 설정, 캐시)에만 씁니다.

❌ 실수 6: final 을 붙였으니 안전하다고 믿는다

java
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 자동 정리에 맡기세요.