새소식

300x250
2. 웹개발/스프링

DAO 분리와 확장(4/4) - 네번째, 원칙과 패턴

  • -
728x90

초난감 DAO 코드를 개선해온 결과를 객체지향 기술의 여러 가지 이론을 통해 설명한다.

개방 폐쇄 원칙 (OCP. Open-Closed Principle)
 - 깔끔한 설계를 위해 적용 가능한 객체지향 설계 원칙 중의 하나다. ‘클래스나 모률은 확장에는 열려 있어야 하고 변경에는 닫혀있어야 한다’라고 할 수 있다.


객체지향 설계 원칙(SOLID)
 객체지향 기술은 어느 날 한 번에 만들어진 것이라기보다는 오랜 시간에 걸쳐 점진적으로 발전해온 기술이라고 볼 수 있다. 그렇기 때문에 객체지향 프로그래밍 언어의  종류도 다양하고 객체지향 기술을 받아들이고 적용하는 관점과 기법도 조금씩 차이가 있다. 그럼에도 객체지향이라는 이름으로 묶을 수 있는 분명한 특징이 있다. 객체지향 설계 원칙은 객체지향의 특징을 잘 살릴 수 있는 설계의 특징을 말한다. 원칙이라는 건 어떤 상황에서든 100% 지켜져야 하는 절대적인 기준이라기보다는, 예외는 있겠지만 대부분의 상황에 잘 들어맞는 가이드라인과 같은 것이다. 디자인 패턴은 특별한 상웰11서 발생하는 문제에 대한 좀 더 구체적인 솔루션이라고 힌다면,객체지항 설계 원칙은 줌 더 일반적인 상황에서 적용 가능한 설계 기준이라고 불 수 있다. 당연한 일이지만 객체지향 디자인 패턴은 대부분 객체지향 설계 원칙을 잘 지켜서 만들어져 있다.

 오랜 시간 동안 많은 학자와 개발자 사이에서 공감대가 형성된 객체지향 설계에 관한 여러가지 원리와 원칙을 체계적으로 잘 정리하고, 멋진 이름과 약자도 만들어서 공개된 것이 바로 SOLID 라고도 불리는 5가지 객체지향 설계의 원칙이다. 객체지향 설계와 테스트 등을 전문적으로 가르치고 건설팅하는, 로버트 마틴이 정리한 이 5가지 객체지향 설계 원칙은 한 번쯤 공부해 두는 편이 좋다.

 로버트 마틴이 정리한 객체지향 설계 원칙인 SOLID에 대한 소개는 관련 웹사이트(http://butunclebob.com/ArticleS.UncleBob.PrincjplesOfOod)에서 찾아볼 수 있다. SOLID 원칙을 잘 설명하는 도서로는 밥 마틴이 쓴 [Java 프로그래머훌 위한 UML 실전에서는 이것만 쓴다 (UML for Java Programmer)]라는 책을 추천한다. UML 책인 것 같지만 객체지향 설계 원칙에 대한 자세한 설명과 함께,실용적인 조언과 사례를 잘 제공해주고 있는 책이다. 역시 밥 마틴이 쓴 [소프트웨어 개발의 지혜: 원칙. 디자인 패턴,실천 방법(Agile Software Development,Principles. Patterns, and Practices)도 SOLID 원칙을 실용적인 예제와 함께 깊이 있게 다루고 있다.

SOLID는 아래 5가지 원칙의 첫 글자를 따서 만든 단어다 .
ㆍSRP(The Single Responsibility Principle): 단일 책임 원칙
ㆍOCP(The Open CIosed Principle): 개방 폐쇄 원칙
ㆍLSP(The Liskov Substitution Principle): 리스코프 치환 원칙
ㆍISP(The Interface Segregation Principle): 인터페이스 분리 원칙 ·
ㆍDIP(The Dependency Inversion Principle): 의존관계 역전 원칙

 

개방 폐쇄 원칙은 높은 응집도와 낮은 결합도 (high coherence and low coupling)라는 소프트웨어 개발의 고전적인 원리로도 설명이 가능하다.

높은 응집도
 -  응집도가 높다는 것은 변화가 일어날 때 해당 모듈에서 변하는 부분이 크다는 것으로 설명할 수도 있다. 즉 변경이 일어날 때 모듈의 많은 부분이 함께 바뀐다면 응집도가 높다고 말할 수 있다.만약 모듈의 일부분에만 변경이 일어나도 된다면, 모듈전체에서 어떤 부분이 바뀌어야 하는지 파악해야 하고 또 그 변경으로 인해 바뀌지
않는 부분에는 다른 영향을 미치지는 않는지 확인해야 하는 이중의 부담이 생긴다.

낮은 결합도
 - 하나의 변경이 발생할 때 마치 파문이 이는 것처럼 여타 모률과 객체로 변경에 대한 요구가 전파되지 않는 상태를 말한다.책임과 관심사가 다른 오브젝트 또는 모듈과는 낮은 결합도, 즉 느슨하게 연결된 형태를 유지하는 것이 바람직하다. 느슨한 연결은 관계를 유지히는 데 쪽 필요한 최소한의 방법만 간접적인 형태로 제공하고,나머지는 서로 독립적이고 알 필요도 없게 만들어주는 것이다. 결합도가 낮아지면 변화에 대응하는 속도가 높아지고 구성이 깔끔해진다. 또한확장하기에도 매우 편리하다.

300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.