디자인 패턴에 대해서도 복습 해보자.


우선 소프트웨어 개발에 있어서 변하지 않는 것은 무엇인가?


어떤 언어를 쓰던지 어떤 툴로 개발하던지 절대로 바뀌지 않는 것이 있다.


바로 변화!!! 소프트웨어는 항상 요구사항에 따라 변화된다는 것이다!!


이러한 변화에 따른 코딩의 수정의 토나옴을 줄이고 구성이 되어있는 코딩을 하기위해서는


디자인을 해야한다. 디자인이란 옷 같은 것의 디자인만 있는 것이 아니라


클래스와 인터페이스의 구조에 따른 디자인을 해야한다는 것이다.!


우선은 디자인 원칙을 모두 외워야한다!


여기서는 두가지의 디자인 원칙과 전략패턴에 대해 복습할 것이다ㅋ



우선 문제를 명확하게 파악해야만 한다.


디자인 원칙 1. 응용프로그램의 달라지는 부분을 찾아내고 달라지지 않는 부분으로 부터 분리해라!


즉, 바뀌는 부분을 찾아서 따로 캡슐화하라는 말이다.


디자인 원칙 2. 구현이 아닌 인터페이스에 맞춰서 프로그래밍해라!


구현으로 하면 나중에 유지 보수가 정말 골치가 아파진다.


그러니 하나의 인터페이스를 구성하여 프로그래밍하는 것이다.


여기서 인터페이스라고 했지만 꼭 인터페이스만 말하는 그것이 아니라


추상클래스라던지 인터페이스라던지 하나의 캡슐화를 하라는 말이다.




여기서 한가지 예를 들어서 말해보자.


Duck이라는 클래스에  quack()메소드라던지 display()메소드 등이 정의 되어 있고


상속되어 어려 오리들 클래스가 있다고 하자.


이것은 여러 오리들을 그려주는 프로그램을 만들 때 구성한 클래스라고 하자


근데 여기서 다른 요구 사항이 들어왔다.


바로 오리들이 fly()메소드처럼 나는 것과 울수있는 것과 그렇지 못한것 quackble()메소드


를 구현하라는 것이다.


이때 어찌 할 것인가? 우선 Duck이라는 슈퍼클래스에 fly()메소드와 quackble()메소드를 넣고


하위 클래스에 그것을 다시 오버라이드해서 구현 할것인가?


이렇게되면 하위 클래스의 메소드를 다 다시 작성해야 하며


엄청 번거롭게 된다, ㅠ


이때 디자인 원칙 1를 생각해보자!! "그래 분리해보자!" 라고 한다음에


각각 클래스를 따로 만들어서 fly, quackble을 만들어서 아까 하위 오리들에게


알아서 날수있으면 fly클래스에 상속받고 울수있으면 quackble클래스에 상속을 받자.


헐. 이러면 계속 계속 행동이 늘어나면 어찌 할것인가?


예를 들어 나는 방법에도 막 여러가지가 있고 우는 방법에도 막 여러가지가 있으면?


완전 클래스의 난무이다. 복잡 복잡 -_-;


그러면 이때 디자인 원리 2를 생각해 보자


그래 구현이 아닌 인터페이스!!


인터페이스로 fly나 quakble을 구현하자


그다음에 그 밑으로 다양한 행동의 클래스를 상속하여 구현하자


이러면 좀더 깔끔하게 구성되어 지며 행동이 추가되어도 인터페이스 밑에


추가해주면 된다,


물론 Duck클래스에서 인터페이스의 메소드를 선언해주면


그 밑의 오리들의 클래스에서는 인터페이스의 클래스들의 메소드를


실행하니까 수정이 필요없이 한결 편해 질것이다.


이것이 바로 전략 패턴.!!! 이미 전략 패턴을 배운것이다.!!


내 포스팅이 이해가 안간다면


헤더 퍼스트 자바을 보길 바란다.

'★Programming★ > Design Patterns' 카테고리의 다른 글

디자인 패턴 복습 - ①  (0) 2010.04.28

+ Recent posts