공부/spring

SOLID: 객체지향 설계의 5가지 원칙

리져니 2021. 9. 27. 20:49

프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다.

SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다

( 위키백과  참조 )

 

 

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

한 클래스는 하나의 책임만 가져야 한다.

여기서 책임이라는 것은 모호하다 (클수도 있고 작을수도 있으며, 문맥과 상황에 따라 다르기 때문)

그래서 이 책임이라는 기준을 변경으로 둔다면, 변경이 있을때 파급 효과가 적다면 단일 책임 원칙을 잘 따른 것이다.

(즉, 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함을 의미)

 

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

소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다.

요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야하고, 기존 구성요소를 쉽게 확장해서 재사용할수 있어댜 한다.

JAVA에서 인터페이스를 예시로 들어보자, 인터페이스는 추상 클래스로 구현부가 완성되어 있지 않다.

이를 새로운 클래스로 구현부를 완성하면 기존 구성요소인 인터페이를 확장하여 재사용할 수 있다.

 

LSP: 리스코브 치환의 원칙(The Liskov Substitution Principle)

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀수 있어야 한다.

서브 타입은 기반 타입이 약속한 규약을 지켜야 한다는 것으로, 다형성에 하위 클래스는 인터페이스의 규약을 다 지켜야 하는 것처럼 단순히 컴파일 성공이 아닌 규약을 준수하는 상속 구조를 의미한다.

 

ISP: 인터페이스 분리 원칙(Interface Segregation Principle)

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

기능에 맞게 인터페이스를 분리하면 인터페이스가 명확해지고, 대체 가능성이 높아진다.

 

DIP: 의존관계 역전 원칙(Dependency Inversion Principle)

프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

쉽게말해, 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 것으로, 역할과 구현을 철저하게 구분하여 시스템이 언제든지 변화에 영향을 받지 않도록 해야한다.

 

 

 

++)

그러나 객체지향의 핵심인 다형성 만으로는 OCP, DIP를 지킬수 없고 스프링이 DI를 제공 함으로써 다형성과 OCP,DIP를 지원하여 클라이언트 코드의 변경없이 기능을 확장시킨다.

 

 

 

 

 Reference

https://www.nextree.co.kr/p6960/

 

 

 

 

 

 

728x90