반응형

오리 시뮬레이션 프로그램이 있습니다. 오리 시뮬레이션 안에는 여러 종류의 오리들이 있습니다. 시뮬레이션 안에 오리를 생성하기 위해서 처음 Duck라는 클래스를 만들어 봅니다.

 

1. Duck클래스를 상속받아서 흰 오리, 청둥오리, 장난감 오리를 생성합니다.

Duck 클래스에는 Fly행동, Quack행동 메서드가 존재하는데 이걸 그대로 상속받는 클래스들은 필요에 따라서 오버라이딩을 해야 됩니다. 장난감 오리는 날 수도 없고 말하지도 못하기 때문에 오버라이딩이 필요합니다. 또 말 못 하는 나무 오리가 추가가 된다면 상속 후 오버라이딩으로 코드를 작성해줘야 됩니다.(이때 작성하는 코드는 말 못 하는 장난감 오리와 동일) 현재는 3개의 오리만 있어서 영향범위가 작아 보이나 수백 마리의 오리를 필요에 따라 오버라이딩을 한다는 것은 쉬운 일이 아닙니다.

 

2. 상속 대신 인터페이스만을 사용합니다ㅐ인터페이스를 사용 하게 되면 각각 코드를 구현 해야됩니다. 인터페이스만을 사용한다면 엄청난 코드 중복이 됩니다. 위에서 나온 말 못하는 장난감 오리와 나무 오리만 봐도 코드 중복이 되고 있습니다. 

 

바뀌는 부분과 그렇지 않은 부분을 분리 합니다.

3. 변경사항 없는 부분은 Duck클래스에 두고 바뀌는 부분은 묶어서 인터페이스를 구현합니다.

행동들을 묶어서 각각 인터페이스를 구현합니다. 그리고 구현된 인터페이스는, 인터페이스 변수를 Duck 클래스에서 선언하여 사용합니다.

장난감 오리와 나무 오리는 구현된 Mute행동을 사용하면 재사용도 가능하고 영향범위를 줄일 수 있겠습니다.

 

 

디자인 원칙

  • 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.
  • 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.
  • 상속보다는 구성(composition)을 활용한다. (A에는 B가 있다. -> 행동을 상속받기보다는 행동 객체로 구성하여 행동을 부여)

반응형

+ Recent posts