객체지향 개발 5대 원칙 (SOLID)
SRP(Single Responsibility Principle) : 단일 책임의 원칙
작성된 클래스는 하나의 기능만 갖는다.
적용방법 :
여러 원인에 의한 변경 (Divergent change):
Extract Class를 통해 혼재된 각 책임을 각각의 개별 클래스로 분할하여 클래스 당 하나의 책임만을 맡도록 하는 것. 비슷한 책임을 중복해서 갖고 있다면 Extract Superclass를 사용하여 부모 클래스에 위임, 남은 책임들은 각자에게 정의 한다.
산탄총 수술(Shotgun surgery):
Move Field와 Move Method를 통해 책임을 기존의 어떤 클래스로 모으거나, 그럴만한 클래스가 없다면 새로운 클래스를 만들어 해결한다. 즉 산발적으로 여러 곳에 분포된 책임들을 한 곳에 모으면서 설계를 깨끗하게 정리하여 응집도를 높인다.
OCP(Open Close Principle) : 개방 폐쇠의 원칙
확장에는 열려있고, 변경 비용은 줄인다
적용방법 :
변경될 것과 변경되지 않을 것을 엄격하게 구분
이 두 모듈이 만나는 지점에 인터페이스를 정의
구현에 의존하기 보다, 정의한 인터페이스에 의존하도록 코드 작성
LSP(Liscov Substitution Principle) : 리스코브 치환 원칙
완벽한 상속
서브 타입(자식)은 언제나 기반타입(부모)으로 교체할 수 있어야 한다.
적용방법
두개의 개체가 같은 일을 한다면 하나의 클래스로 합치고, 둘을 구분할 수 있게 만든다.
똑같은 연산을 제공하지만 조금씩 다르게 처리한다면 공통의 인터페이스를 만들고 각각 구현한다(인터페이스 상속)
공통된 연산이 없다면 2개의 클래스로 만든다.
두 개체에 무언가를 추가해야한다면 구현 상속을 사용한다.
ISP(Interface Segregation Principle) : 인터페이스 분리의 원칙
클래스에서 사용하지 않는 인터페이스는 구현하지 않아야 한다.
적용방법
클래스 인터페이스를 통한 분리
클래스의 상속을 이용하여 인터페이스를 나눈다.
객체 인터페이스를 통한 분리
위임(Delegation)을 이용하여 인터페이스를 나눈다.
DIP(Dependecy Inversion Principle) : 의존성 역전의 원칙
하위 모듈의 변경이 상위 모듈의 변경을 발생시키지 않도록 한다.
적용방법
Layering
'감리사 > 소프트웨어공학' 카테고리의 다른 글
[SE] Java - J2ME (0) | 2018.07.11 |
---|---|
[SE] XML - 작성 규칙 (0) | 2018.07.11 |
[SE] 컴포넌트와 모듈 비교 (0) | 2018.07.10 |
[SE] 컴포넌트 분류 (0) | 2018.07.10 |
[SE] MDD (Model Driven Development) (0) | 2018.07.10 |