본문 바로가기
SpringFramework

3. 좋은 객체 지향 설계의 5원칙 (SOLID)

by lchit 2021. 3. 15.

S.

SRP (Single Responsibility Principle)

 

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

  하나의 책임이란 것은 문맥과 상황에 다라 모호하지만

  중요한 기준은 변경이다.

  

  변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른것.

 

O.

OCP (Open Closed Principle)

 

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

 

 예를 들자면 공연이라는 소프트웨어에 대본(역할)이라는 인터페이스가 있다.

 그리고 그 대본을 이용하여 공연을 구현하는 배우들이 있다.

 이 배우가 누구로든 바뀔 수 있는게 확장에는 열려있는것이다.

 하지만 대본은 공연이 시작되면 바꿀수 없어야한다.

 A 가 본 공연과 B가 본 공연의 내용은 다를 수 없다.

L.

LSP (Liskov Substitution Principle)

 

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

- 다형성에서 구현 클래스는 인터페이스 규약을 다 지켜야 한다는것 인터페이스를 구현한 구현체를 믿고

  사용하려면 이원칙이 필요하다.

 

타이타닉 영화를 예로들면

대본 이라는 인터페이스로 타이타닉이라는 소프트웨어를 만듬에 있어서.

대본의 원래 역할대로 디카프리오는 남주의 역할을 잘 수행해주는 구현체였다.

하지만 다형성을 활용하여 마동석으로 대본에 주입하니 마동석은 여주에게 불친절한 표정으로 일관했다.

그 후론 타이타닉의 흥행이 망했다.

 

이처럼 구현체는 인터페이스의 의도대로 구현되어야 프로그램에서 믿고 쓸 수 있는것이다.

 

 

I.

ISP (Interface Segregation Principle)

 

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

 

큰 플로우를 실행함에 있어 덩어리의 인터페이스 보단 각 특징을 묶은 하나 이상의 인터페이스로 설계하는게 좋다.

 

D.

DIP (Dependency inversion principle)

 

- 프로그래머는 추상화에 의존하며 구체화에 의존하면 안된다.

- 구현 클래스에 의존하지 말고, 인터페이스에 의존해야한다.

- 클라이언트 코드가 인터페이스를 바라보며 그 구현체를 직접 바라보지 않게해야한다.

 

공연이라느 소프트웨어를 만드는 감독이 공연을 구현하기위한 대본에 의존을 해야지

그 대본을 연기할지도모를 장동건에 빠져서 공연을 구상하면 추후 남자주인공을 변경하기란 상당히 어려울것이다.

 

'SpringFramework' 카테고리의 다른 글

4. 객체 지향 설계와 스프링  (0) 2021.03.15
2. 스프링 좋은 객체 지향 프로그래밍  (0) 2021.03.15
1. 스프링 왜?  (0) 2021.03.15