안녕하세요. 201 팀의 에밀입니다. 공부 잘 해주셨네요!
Enum 같은 경우에는 말씀 주신대로 서로 연관 있는 여러 개의 상수 집합을 정의할 때 사용합니다!
예를 들어 우리가 여행 관리 애플리케이션을 만든다고 가정해볼게요!
이때 출발지가 오직 서울, 부산이라고 해볼게요!
그렇다면 해당 출발지를 Class로 정의하는 방법도 있겠지만 그렇게 되면 예상치 못한 출발지가 생성될 수도 있겠죠?
public class Departure {
private final String name;
...
}
매번 객체를 생성하면서 값에 오차가 발생할 수도 있구요!
그리고 불필요한 객체 생성과 제거로 인한 부하도 있을 수 있겠네요..
이럴 때 Enum을 사용하면 좋답니다.
일단 객체가 싱글톤이기 때문에 항상 일정한 값을 유지하는 것을 보장할 수 있죠.
그리고 객체가 프로그램 내내 제거되지 않기 때문에 불필요한 메모리 정리도 없겠네요!
public enum Departure {
SEOUL("서울", new Point(~, ~)),
BUSAN("부산", new Point(~, ~));
private final String name;
private final Point position;
public Money calculateFee(Destination destination) {
...
}
}
그리고 무엇보다 enum 객체는 ‘객체’입니다.
그래서 해당 객체의 값을 꺼내서 로직을 처리하기 보다는 해당 객체에 메서드를 정의하여 책임을 주는 것이 좋습니다! (2주차에서 나온 내용이죠)
이렇게 함으로써 단순히 값을 가지는 것이 아니라 객체로서 의미를 가지게 되죠
이런 식으로 enum을 다채롭게 사용하셔서 변하지 않는 객체를 만들어서 성능적으로도 좋고 안정성도 높은 프로그램을 짜시는 데 익숙해지시는 걸 추천 드려요!
그리고 이건 심화내용인데요. 말씀하신대로 enum 상수객체는 싱글톤 객체이기 때문에 수많은 곳에서 하나의 객체를 공유한답니다.
그렇기에 불변 객체로 만드시는 게 좋습니다.