1. 보다나은 프로그래밍을 위하여, 객체지향 설계의 5대 원칙의 개요
가. 객체지향 설계의 5대 원칙의 개념
객체지향 소프트웨어 설계의 근본 원칙, 디자인 패턴의 근본 원칙
객체지향 소프트웨어 설계 도구들의 근본이자 목적이 되는 원칙
나. 객체지향 설계의 5대 원칙의 중요성
재사용성, 유지보수성의 향상을 위해(높은 응집도, 낮은 결합도)
설계 원칙을 기반으로 디자인 패턴 또는 유용한 개발론들이 등장하고 있음
2. 객체지향 설계의 5대 원칙 (SOLID)
원칙 | 설명 | 사례 |
단일 책임의 원칙 (SRP) | - 객체는 하나의 책임만을 맡아야 함 - DB 정규화와 비슷함 (성능저하라는 부작용이 없음) - 핵심: 변화 - 목적: 변화에의 유연성 확보 (낮은 결합도, 높은 응집도 추구) | - 데이터 매퍼 패턴(DAO) |
개방폐쇄 원칙 (OCP) | - 모듈은 확장에는 열려있어야 하고 변경에는 닫혀있어야 함 - 방법: 변화는(확장되는) 것과 변하지 않는 것을 엄격히 구분한 후 이 두 모듈이 만나는 지점에 인터페이스를 정의 | - 상속과 어댑터 클래스를 통한 클라이언트 클래스 접속 - 컴파일러, POSIX 표준 |
리스코프 치환원칙 (LSP) | - 기반 클래스는 파생 클래스로 대체 가능해야 함 - 즉, 인터페이스만 알면 구현체를 몰라도 사용 가능해야 함 | - |
인터페이스 분리의 법칙 (ISP) | - 하나의 일반적인 인터페이스보다는 구체적인 여러 개의 인터페이스가 나음 - 핵심: 변화 - 목적: 변화에의 유연성 확보 - 효과: 인터페이스의 통합과 분리 | - 파일입력은 InputInterface, 파일출력은 OutputInterface - 공유 리파지토리 패턴 |
의존관계 역전의 원칙 (DIP) | - 클라이언트는 구체 클래스가 아닌 인터페이스나 추상 클래스에 의존해야 함 - Bridge 패턴처럼 인터페이스/추상 클래스 간에만 서로 의존관계를 가지며 참조 - 모든 클래스에 인터페이스를 생성하면 클래스가 엄청나게 증가하고 복잡해지므로 필요한 것만 생성 | - 이벤트 드리븐, 콜백, JMS, 통신 프로그래밍 모델 |
출처: http://www.jidum.com/jidums/view.do?jidumId=311
댓글