Contents

객체지향 설계 5원칙 SOLID

객체지향 설계는 긴 세월과 수많은 시행착오를 거치며 5가지 원칙이 정리되었다. 이것은 객체지향 설계의 5원칙이라고 하며, 앞글자를 따서 SOLID라고 한다.

SRP (Single Responsibility Principle) - 단일 책임 원칙

SRP 원칙은 클래스가 하나의 기능만을 가지며, 어떤 변화에 의해 클래스를 변경해야하는 이유는 오직 하나 뿐이어야 한다는 원칙이다.

SRP에서는 책임자체가 분명해지기 때문에, 변경에 의한 연쇄 작용에서 자유로워 질 수가 있다.

OCP (Open-Closed Principle) - 개방-폐쇄 원칙

OCP 원칙은 요구사항의 변경이나 추가사항이 발생해도, 기존 구성요소에는 수정이 일어나지 않고, 기존 구성요소를 쉽게 확장하여 재사용가능하도록 만들어야 한다는 원칙이다.

이 원칙을 지키기 위해서는 객체지향의 추상화와 다형성을 활용해야한다.

LSP(Liskov Substitution Principle) - 리스코프 치환 원칙

리스코프 치환 원칙은 서브타입은 기반 타입이 약속한 규약(접근제한자나 예외를 포함) 을 지켜야 한다는 원칙이다.

클래스 상속, 인터페이스 상속을 이용해 확장성을 획득한다.

다형성과 확장성을 극대화 하기위해 인터페이스를 사용하는 방법도 있고, Composition을 이용할 수도 있다.

ISP(Interface Sergregation Principle) - 인터페이스 분리 원칙

인터페이스 분리 원칙을 적용하기 위해서는 가능한 최소한의 인터페이스만을 구현해야한다.

만약에 어떤 클래스를 이용하는 클라이언트가 여러 개고, 이들이 클래스의 특정 부분만 이용하면, 여러 인터페이스로 분리해주고 클라이언트가 필요한 기능만 전달하게 코드를 짜야한다.

SRP 가 클래스의 단일 책임 원칙이라면, ISP는 인터페이스의 단일 책임 원칙이다.

DIP(Dependency Inversion Principle) - 의존성 역전 원칙

DIP는 의존을 할 때 구체 클래스에 의존하지 않고 인터페이스를 의존하여 영향을 받지 않게 하는 원칙이다.

의존성 역전 원칙은 하위 모델의 변경이 상위 모델의 변경을 요구하는 위계관계를 끊으면서 적용된다. 실제 사용관계는 그대로 이지만 추상화를 매개로 하여 메시지를 주고 받으면서 관계를 느슨하게 해준다.

스프링에서는 DI를 이용하여 클라이언트 코드 변경 없이 기능을 확장할 수 있다.

참고

https://sjh836.tistory.com/159