객체지향 설계 5대 원칙 SOLID에 대해 알아봅니다.
객체지향 설계 5대 원칙 SOLID
좋은 코드를 설계하려면 이러한 원칙들이 지켜지는 것이 좋다.
단일 책임 원칙 SRP : Single Responsibility Principle
클래스나 함수는 단 하나의 책임(기능)만을 가져야 합니다.
클래스나 함수가 거대해지면 분리시킬 필요가 있습니다.
책임 영역이 확실해지면 연쇄작용에서 자유롭습니다.
적용방식
▶ 리팩토링 Refactoring
프로그램의 기능이나 동작(method) 변경 없이 내부 구조를 개선하는 방법
▶ 여러 원인에 의한 변경 Divergent Change
extra class를 통해 혼재된 각 책임을 개별 클래스로 분리하여 클래스 간의 복잡도를 줄이는 방법
▶ 산탄총 수술 Shotgun Surgery
여러 곳에 분포된 책임들을 한 곳으로 모아 응집도를 높이는 방법
Example
개방-폐쇄 원칙 OCP : Open-Closed Principle
소프트웨어의 구성요소 컴포넌트 Component, 클래스 Class, 모듈 Module, 함수 Function는
- 확장에 열려있고
- 변경에 닫혀있어야
한다는 원칙입니다.
변경을 위한 비용은 최소화하고, 확장을 위한 비용을 최대화합니다.
요구사항이 변경되어도 기존의 구성요소는 변경되지 않아야 하고, 확장은 쉽게 하여 재사용이 가능해야 합니다.
적용방식
▶ 변경(확장)될 것 vs. 변하지 않을 것을 엄격히 구분
▶ 두 모듈이 만나는 지점에 인터페이스 정의
▶ 구현에 의존하기 보다 정의한 인터페이스에 의존하도록 작성
리스코프 치환 원칙 LSP : Liskov Substitution Principle
서브 타입은 기반 타입으로 교체할 수 있어야 합니다.
서브 타입은 기반 타입의 규약을 지켜야 합니다.
구현 상속 관계(extends), 인터페이스 상속 관계(implements) 모두 해당됩니다.
OCP(개방-폐쇄 원칙)를 구성하는 구조가 됩니다.
적용방식
▶ 두 개체가 같은 job을 한다면, 하나의 클래스로 표현하고 구분할 필드 flag 두기
▶ 같은 연산 다른 동작이면 인터페이스 상속으로 구현
▶ 공통된 연산이 없다면 별개의 클래스로 구현
▶ 두 개체가 하는 일에 추가적인 동작이 있다면 구현 상속(extends) 사용
인터페이스 분리 원칙 ISP : Interface Segregation Principle
클래스는 자신이 사용하지 않는 인터페이스는 구현하지 않아야 합니다.
한 클래스가 다른 클래스에 종속될 경우, 최소한의 인터페이스를 사용합니다.
인터페이스 단일 책임
적용방식
▶ 클래스 인터페이스를 통한 분리 - 클래스 상속 extends
▶ 객체 인터페이스를 통한 분리 - 위임 Delegation
의존 역전 원칙 DIP : Dependency Inversion Principle
하위 모듈의 변경이 상위 모듈의 변경을 요구합니다.
의존 관계시 변하지 않는 것에 의존해야 합니다.
- 변하기 쉬운 것 : 구체적인 것(클래스, 서브 클래스 인스턴스)
- 변하기 어려운 것 : 추상적인 것(추상클래스, 인터페이스)
IOC, 훅 메소드, 확장성
적용방식
▶ 레이어링 Layering
'Language > JAVA' 카테고리의 다른 글
[JAVA] 변수 유효 범위, this와 접근 제어자(public, protected, private) (12) | 2024.03.31 |
---|---|
[JAVA] 클래스 Class와 생성자 Constructor (1) | 2024.03.30 |
[JAVA] 객체지향프로그래밍 OOP (0) | 2024.03.28 |
[JAVA] 메소드(method) 정의 및 사용하기 (21) | 2024.03.27 |
[JAVA] 배열(array), 다차원배열(nested array)과 특징 (1) | 2024.03.26 |