보관물

Posts Tagged ‘Design원칙’

[정리중] Software Design 원칙

2월 19, 2011 댓글 남기기

Application에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.

달라지는 부분을 찾아서 나머지 코드에 영향을 주지 않도록 “캡슐화”합니다.
그러면 코드를 변경하는 과정에서 의도하지 않은 일이 일어나는 것을 줄이면서 시스템의 유연성은 향상시킬 수 있습니다.

구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.
(상위형식에 맞춰서 프로그래밍한다.)

실제 실행시에 쓰이는 객체가 코드에 의해서 고정되지 않도록, 어떤 상위형식(supertype)에 맞춰서 프로그래밍함으로써 다형성을 활용해야 한다.
변수를 선언할 때는 보통 추상 클래스나 인터페이스 같은 상위 형식으로 선언해야 한다.
객체를 변수에 대입할 때 상위 형식을 구체적으로 구현한 형식이라면 어떤 객체든 집어넣을 수 있기 때문이다. 그렇게 하면 변수를 선언하는 클래스에서 실제 객체의 형식을 몰라도 된다.

상속보다는 구성(composition)을 활용한다.

A class에서 B class를 상속하여 사용하는 방식이 아닌 A class에 B class를 참조하는 레퍼런스 변수를 두어 has a 관계를 가지는 방식으로 구현한다.
구성을 이용하면 유연성이 크게 향상되며 단순히 알고리즘군을 별도의 클래스의 집합으로 캡슐화할 수 있도록 만들어주는 것 뿐 아니라, 구성요소로 사용하는 객체에서 올바른 행동 인터페이스를 구현하기만 하면 실행시에 행동을 바꿀 수도 있게 해 줍니다.

서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.

느슨하게 결합하는 디자인을 사용하면 변경 사항이 생겨도 객체 사이의 상호의존성이 최소화되므로 유연한 객체지향 시스템을 구축할수 있다.

OCP(Open-Closed Principle) ; 클래스는 확장에 대해서는 열려 있어야 하지만 코드 변경에 대해서는 닫혀 있어야 한다.

추가,변경된 요구사항을 적용하기 위해 기존 코드의 수정으로 인해 발생될 오류 등을 방지하고 클래스 확장으로 원하는 행동을 자유롭게 추가하는 것으로 유연한 환경을 제공한다.

참고자료

Head First : Design Patterns 스토리가 있는 패턴 학습법

<<To be continued>>