1. 객체 지향 설계의 5가지 원칙 (SOLID 원칙)
SOLID 원칙을 반드시 지켜져야 하는 것은 아니지만, 잘 지켜진 코드는 유지보수 측면에서 엄청난 강점을 가진다.
- 단일 책임의 원칙 (Single Responsibility Principle, SRP)
: 하나의 클래스는 하나의 목적을 위해서 생성되며, 클래스가 제공하는 모든 서비스는 하나의 책임을 수행하는 데 집중되어 있어야 한다. 이는 어떠한 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다는 것과 상통하며, 이 원리를 적용하면 책임 영역이 확실하기 때문에, 한 책임의 변경에서 다른 책임의 변경으로의 연쇄작용으로부터 자유로울 수 있다. - 개방 폐쇄의 원칙 (Open Closed Principle, OCP)
: 객체는 확장에는 열려있고, 변경에는 닫혀있어야 한다. 이것은 변경을 위한 비용은 줄이고 확장을 위한 비용은 극대화해야 한다는 의미로, 변경이나 추가사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야 하며, 쉽게 확장해서 재사용할 수 있어야 한다는 뜻이다. - 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
: 서브타입은 언제나 기반 타입으로 교체할 수 있어야 한다. 즉, 서브 타입은 기반 타입과 호환될 수 있어야 한다. 상속은 궁극적으로 다형성을 통한 확장성 획득을 목표로 하게 되는데, LSP 원리 역시 서브 클래스가 확장에 대한 인터페이스를 준수해야 함을 의미한다. 다형성과 확장성을 극대화하려면 하위 클래스보다는 상위 클래스를 사용하는 것이 좋다. - 인터페이스 분리의 원칙 (Interface Segregation Principle, ISP)
: 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다. 즉, 한 클래스가 다른 클래스에 종속될 때에는 최소한의 인터페이스만을 사용해야 함을 의미한다. 다르게 말하면, 하나의 일반적인 인터페이스보다는, 여러 개의 구체적인 인터페이스가 낫다고 말할 수 있다. SRP가 클래스의 단일 책임을 강조한다면, ISP는 인터페이스의 단일 책임을 강조한다.
- 의존 역전의 원칙 (Dependency Inversion Principle, DIP)
: 객체 지향 프로그래밍은 구체화가 아닌 추상화에 의존해야 한다. 구조적 디자인에서 발생하는 하위 레벨 모듈의 변경이 상위 레벨 모듈의 변경을 요구하는 위계관계를 끊는다는 의미의 역전이다. 실제 위계 관계는 동일하지만, 추상을 매개로 정보를 주고 받음으로써 객체 간 독립성을 올리고자 하는 것이다.
[참조문서]
반응형
'JAVA > CONCEPT' 카테고리의 다른 글
| [JAVA] Layered Pattern (0) | 2023.02.20 |
|---|---|
| [JAVA] Proxy Pattern (0) | 2023.01.27 |
| [JAVA] Singleton Pattern (0) | 2023.01.24 |
| [JAVA] MVC Pattern (0) | 2023.01.17 |
| [JAVA] 객체 지향 프로그래밍 (OOP) - 특징 (0) | 2023.01.15 |
댓글