홈 › 초급 › 07 / 8

enum, 패키지와 import, static 과 final

섹션 7진행 0 / 8

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 가 그 차이를 그대로 보여줍니다.