enum 을 객체지향에서 사용하기
1. 객체지향?
조영호 님의 객체지향의 사실과 오해
그리고 오브젝트
라는 책에서 나오는 핵심 주제인
객체지향이란, 독립적인 역할
과 책임
을 가진 객체들이 메시지를 통해 협력
하며 시스템을 구성하는 패러다임이다.
2. enum 을 객체지향에서 사용하기
어떤 언어를 선택하건 enum 이 주는 강력한 핵심 기능은 타입 안전한 상수 집합을 정의하는 것이다.
따라서 고정된 타입과 종류가 있다면 웬만하면 enum 으로 선언해서 관리하는 것이 정신건강에 좋다.
단, 객체지향과 enum 을 다시 합쳐서 생각해보면 아래와 같은 논리로 정의할 수 있다.
임의의 책임을 수행하는 객체를 설계한다.
책임을 수행해야하는 역할은 고정된 종류로 정의 할 수 있다.
enum 에게 해당 책임을 부여하고, 다른 객체들과 협력하게 한다.
2-1. 사례 : 결제 수단을 enum 으로 정의하기
결제 수단이 여러개가 존재하지만, 결제
라는 동일한 책임이 존재한다고 할 때,
이 책임은 어떤 객체가 가져가는 것이 가장 좋을까?
인터페이스로 추상화하고, 이를 구현하는 구현체를 따로 가져가는 방법도 있겠지만,
이렇게 고정된 타입으로 동일한 책임을 수행해야 하는 역할은 enum 으로 정의하면
의외로 편할 때가 많다.
이렇게 각 결제 수단에 대해 결제 라는 책임은 PaymentMethod enum 객체에게 부여할 수 있다.
이제 결제수단이 늘어나거나 줄어들면 expression 을 충족하기 위해 타입을 확장하면서
강제로 구현해야 되는 제약도 생기게 된다.
느낀점
사례는 더 적절한게 생각나면 업데이트 해볼 예정이다..
역할과 책임 그리고 협력하는 시스템을 구성하기 위해서
구현할 수 있는 수단이 굉장히 많다는 걸 느꼈고, 아직도 부족하다는 것을 뼈저리게 느낀다.