enum, 패키지와 import, static 과 final
enum, 패키지와 import, static 과 final
앞 레슨들이 "클래스를 어떻게 만드는가" 였다면 이번 레슨은 "값과 클래스를 어떻게 정리하는가" 입니다. 주문 상태를
"PAID"같은 문자열이나2같은 숫자로 들고 다니면 오타와 범위 밖 값이 실행 중에야 드러납니다. enum 은 그것을 컴파일 단계로 끌어올립니다. 클래스가 수십 개로 늘어나면 폴더로 나누고 이름 충돌을 피해야 하는데 그것이 패키지와 import 입니다. 마지막으로 모든 클래스 코드에 등장하는static과final이 정확히 무엇을 공유하고 무엇을 막는지 실행으로 확인합니다.
1. 왜 배우는가
실무 코드에서 가장 흔한 버그 중 하나가 구분값 오타입니다. 상태를 "PAID" 로 저장했는데 어딘가에서 "Paid" 나 "PIAD" 로 비교하면 그 분기는 조용히 실행되지 않습니다. 컴파일러는 문자열 내용을 모르니 아무 말도 안 하고, 테스트에서도 그 경로를 안 타면 운영에서 발견됩니다. enum 은 "이 변수에는 이 다섯 값만 올 수 있다" 를 타입으로 선언하는 것이라, 없는 값을 쓰면 컴파일이 안 됩니다.
두 번째는 정리입니다. 미니 프로젝트 1단계만 해도 클래스가 열 개를 넘고, 실무 프로젝트는 수백 개입니다. 폴더 없이 한곳에 두면 Order 라는 이름의 클래스가 주문 도메인과 정산 도메인에 각각 필요할 때 부딪힙니다. 패키지는 폴더이자 이름 공간이고, import 는 "긴 이름을 짧게 부르겠다" 는 선언입니다.
세 번째는 static 과 final 의 정확한 뜻입니다. public static final 을 상수 선언 주문처럼 외우고 넘어가면, "static 메서드에서 왜 필드를 못 쓰지", "final 인데 왜 리스트에 add 가 되지" 에서 막힙니다. 둘은 각각 "클래스에 하나" 와 "다시 대입 금지" 라는 별개의 뜻이고, 이 레슨의 예제 3·4 가 그 차이를 그대로 보여줍니다.