한동안 JPA와 개인프로젝트 병행으로 오브젝트 책을 보지 못했습니다.
책은 읽을때 한번에 완독을 해야 기억에도 오래남고, 찾아 볼때도 어떤 부분을 봐야하는지 알 수 있는데 꽤나 오랫동안 오브젝트를 놓고 보지 않았더니 많은 부분들이 기억속에서 삭제 되었습니다.
그래서 다시 오브젝트를 읽으면서 어떤 것들을 공부 했었는지, 또 어떤 것들에 중점을 두고 저자가 객체지향 설계에 대해 설명하는지를 다시한번 되새기는 시간을 가지기로 했습니다.
모든 프로그램은 요구사항으로부터 출발합니다.
위의 이미지처럼 어떤 기능을 구현해야 하는지, 또 우선순위는 몇번째인지와 같이 처리해야 될 순번도 명시할 수 있습니다. 양식은 정하기 나름이지만 어느 정도의 대중적인 약속은 정해진 편입니다.
요구사항을 정리하기전에 영화예매 시스템의 핵심이 되는 두가지 단어를 정리하고 갈 필요가 있어 '영화'와 '상영'의 의미에 대해서 살펴 보고 가겠습니다.
보통 우리는 영화를 보러가기위해 예매를 할때 '영화를 예매했다라고 표현을 합니다.'
사용자가 실제로 예매하는 대상은 영화가 아니라 상영입니다.
약간 의아하실수 있지만, 지금부터 왜 예매하는 대상이 영화가 아니라 상영인지 말씀드리겠습니다.
위에서 정리한대로, 사람들은 영화를 예매한다고 표현하지만 실제로는 특정 시간에 상영되는 영화를 관람할 수 있는 권리를 구매하기 위해 돈을 지불합니다.
지금부터 설계할 영화 예매 프로그램은 영화를 예매할때 특정 조건을 만족하는 예매자는 요금을 할인받을 수 있습니다.
할인액을 결정하는 두가지 규칙이 존재하는데, 하나는 할인 조건이라고 부르고 하나는 할인 정책이라고 부르겠습니다.
할인조건은 가격의 할인 여부를 결정하며, '순서 조건'과 '기간 조건'의 두 종류로 나눌 수 있습니다.
할인 정책은 할인 요금을 결정하는 역할을 합니다. 할인 정책에는 '금액 할인 정책'과 '비율 할인 정책'이 있습니다.
영화 예매 시스템은 사용자로부터 영화 예매라는 작업을 받아, 할인 조건과 정책을 조합해서 할인을 한 금액을 결제할지 판단하고, 사용자에게 결제금액을 알리고, 사용자가 결제를 하여 예매를 완료하면 제목, 상영벙보, 인원, 정가, 결제금액등의 정보가 포함된 예매 정보를 생성하는 일을 합니다.
객체지향 프로그래밍하면 가장 먼저 어떤것이 떠오르시나요?
객체지향은 말그대로 객체를 지향하는 것이라고 합니다. 객체지향 프로그램을 작성할 때 가장 먼저 고려할 것이 있다면 무엇이라고 생각하시나요?
클래스가 필요한지 고민하고, 클래스를 결정한 후에 클래스에 어떤 속성과 메서드가 필요한지 고민한다면 이 책을 저와 함께 완주하셔야 할 것 같습니다.
왜냐하면 저자는 이것을 객체지향의 본질과는 거리가 멀다고 하고 있기 때문입니다.
객체지향은 말 그랟로 객체를 지향하는 것이기 때문입니다. 진정한 객체지향 패러다임으로서의 전환은 클래스가 아닌 객체에 초점을 맞출 때에만 얻을 수 있습니다.
그렇다면 어떤 것들에 집중해서 객체지향적으로 나아갈 수 있을까요?
객체를 설계할때 항상 클래스를 기준으로, 클래스가 어떤 역할을 하고 어떤 메서드들이 필요한지 클래스 정의가 끝난 후에 필요한 속성(필드)과 메서드들을 정의하곤 했습니다.
클래스를 바라보는 것이 아니라 객체지향은 말 그대로 객체를 지향하는 것!
객체에서 시작해 객체로 끝나는 객체만 생각하는 그런 설계자가 되기 위해서 많은 공부가 필요할 거 같습니다.