• 접근법

1단계 : 모호성의 해소

보통 OOD 문제는 대개 고의적으로 모호성을 띄고 있다.

-> 우리 스스로 가정을 만들어내고 질문을 통해 명확히 해나가는 과정이 필요함.  

누가 그것을 사용할 것이며 어떻게 사용할 것인지에 대한 질문을 던져야 한다.

 

ex. 커피 메이커

시간당 수백 명의 고객을 상대하며 여러 가지의 제품을 만들어 내야 하는 대규모 식당에 설치되는 기계,

나이 드신 분들이 사용하는, 블랙 커피만 만드는 간단한 기계 등 여러 용도에 따라 설계 자체가 완전히 바뀜.

 

2단계 : 핵심 객체의 설계

무엇을 설계할 것인지 이해했으므로 시스템에 넣을 '핵심 객체(core object)'가 무엇인지 생각해 봐야 한다.

 

ex. 식당

핵심 객체 : Table, Guest, Order, Meal, Employee, Server 등

 

3단계 : 관계 분석

객체 사이의 관계를 분석. 한 객체가 다른 객체에 속해 있는지(member), 상속받아야 하는지(inherit), 다-대-다(many-to-many) 관계인지 혹은 일-대-다 관계인지 등.

 

ex. 식당

- Server와 Host는 Employee를 상속받는다.

- 각 Table은 Party를 하나만 가질 수 있지만, 각 Party는 Tables을 여러 개 가질 수 있다.

- Restaurant에 Host는 한 명뿐이다.

 

주의할 점 : 종종 잘못된 가정을 만들어 사용하는 경우를 피해야 함. (하나의 Table에 여러 Party가 앉는 경우도 있음.)

설계가 얼마나 일반적이어야 하는지에 관해서는 면접관과 상의한 후 결정하는 것이 좋다!

 

4단계 : 행동 분석

객체 지향 설계의 골격이 어느 정도 잡힌 상태가 된 후, 이제 객체가 수행해야 하는 핵심 행동들에 대해서 생각하고,

이들이 어떻게 상호작용해야 하는지 따져 보는 것이다. 깜박 잊은 객체가 있을 수도 있고 상황에 따라 설계를 변경해야 할 수도 있다.

 

ex. 식당 -> 한 Party가 Restaurant에 입장하고, 한 Guest가 Host에게 Table을 부탁한 경우.

Host는 Reservation을 살펴본 다음 자리가 있으면 해당 Party에게 Table을 배정할 것이다.

자리가 없다면 Party는 Reservation 리스트 맨 마지막에 추가될 것이다.

한 Party가 식사를 마치고 떠나면 한 Table이 비게 되고, 그 테이블은 리스트의 맨 위 Party에게 하당될 것이다.

 

디자인 패턴

- Singleton class

어떤 클래스가 하나의 객체만을 갖도록 하며, 프로그램 전반에 걸쳐 그 객체 하나만 사용되도록 보장해야 한다.

정확히 하나면 생성되어야 하는 전역 객체를 구현해야 하는 경우에 특히 유용하다.

ex. Restaurant 클래스는 정확히 하나의 객체만 갖도록 구현하는 것이 좋다.

- factory method

어떤 클래스의 객체를 생성하기 위한 인터페이스를 제공하되, 하위 클래스에서 어떤 클래스를 생성할지 결정할 수 있도록 도와준다. 이를 구현하는 한 가지 방법은,  메서드 자체에 대한 구현은 제공하지 않고, 객체 생성 클래스를 abstract로 선언하고 놔두는 것이다. 또 다른 방법으로는, Factory 메서드를 실제로 구현한 Creator 클래스를 만드는 것이다. 

 

반응형

+ Recent posts