읽은 책 정리/스프링 입문을 위한 자바 객체지향 원리와 이해

객체 지향 설계 5원칙 - SOLID

포포015 2021. 7. 16. 13:40

SOLID ( oop 객체 지향도구를 올바르게 사용하는 방법)

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

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

 - LSP ( Liskov Substitutability ) : 리스코프 치환원칙

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

 - DIP ( Dependency Inuersion) : 의존 역전 원칙

 

좋은 소프트웨어 설계는 결합도는 낮추고, 응집도는 높인다.결합도가 낮으면 모듈간 상호의존성이 줄어 객체의 재사용이나, 수정, 유지보수 용이응집도가 높으면 하나의책임에 집중하고 독립성이 높아져, 재사용이나, 수정, 유지보수 용이

 


* SRP (어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이여야한다.)

- 클래스를 역할과 책임에 따라 분리해서 각각 하나의 역할과 책임만 갖게한다.

 (하나의 클래스에 역할과 책임이 많으면 SRP위반)

 ( 공통점이 많다면, 사람클래스를 상위클래스에 두고, 공통점을 사람클래스에두고 남자,여자클래스로

  사람클래스를 상속받고 차이점만 각자 구현)

(하나의 속성이 여러의미를 갖는 경우도 단일책임 원칙을 지키지 못하는경우이다)

(메서드가 단일책임원칙을 지키지 않을경우 나타나는 대표적인 안좋은 코드가 분기처리를 위한 IF문이다)

(애플리케이션 경계를 정하고 추상화를 통해 클래스를 선별하고 속성과 메서드를 설계할때 

 반드기 단일책임원칙을 고려하는 습관을 들이자)

 

* OCP (소프트웨어 엔티티 클래스,모듈,함수 등 확장에 대해서는 열려있어야하지만 변경에는 닫혀있어야한다.)

- 자신의 확장에는 열려있고, 주변의 변화에는 닫혀있어야한다.

 ( 상위 클래스 또는 인터페이스를 중간에 둠으로써, 그밑에 변화가 있어도 인터페이스를 참조하고 있는 객체는 영향 X)

 ( 대표적인 예가 JDBC임. JDBC 인터페이스(확장이 열려있고)를 자바와 DB사이에 두고, 각각 DB를 갈아끼우고 

   자바는 영향을 받지않는다 ( 주변의 변화에 닫혀있다) )

- 개방폐쇄원칙을 무시하고 프로그래밍을하면 객체지향의 가장큰 장점인, 유연성,재사용성, 유지보수성을 얻을수없다)

 

* LSP ( 서브타입은 언제나 자신의 기반 타입으로 교체할수 있어야한다)

 - is a kind of (상속)을 잘지키고 있으면 리스코프 치환원칙을 잘지키고 있는것이다.

 (객체지향의 상속특성을 올바르게 사용하면 자연스럽게 얻게되는것.)

 - 하위에 존재하는것들은 상위에 있는것들의 역할을 하는데 문제가없어야한다.

 

* ISP ( 클라이언트 자신이 사용하지 않는 메서드에 의존관계를 맺으면안됨.)

- SRP( 단일책임원칙에서 제시한 해결책은 하나의 역할만 하는 다수의 클래스로 분할하는 해결방법이였으나,

  또 다른 방법은 ISP가 있다. SRP처럼 다수의 클래스로 분할하는것이 아닌, 각각의 역할에 그역할만 사용할수 있게

  인터페이스를 제한하는것. // SRP와 비슷한 성질이나 다른해결책이 될수있다.

  *특별한경우가 아니면 SRP로 하는게좋음)

  

 

* DIP (추상화된것은 구체적인것에 의존 X, 구체적인것이 추상화된것에 의존 O , 자주변경되는 구체클래스에 의존 X)

 - 자신보다 변하기 쉬운것에 의존하던것을 추상회된 인터페이스나 상위클래스를 두어 변하기 쉬운것의 변화에 영향을 

   받지않게하는것 (OCP랑 성질이 비슷함)

- 상위 클래스일수록, 인터페이스일수록, 추상클래스일수록 변하지 않을 가능성이 높기에 하위클래스나 구체 클래스가 아닌 상위클래스, 인터페이스,추상클래스를 통해 의존하는것이 의존역전원칙

 

 

 

정리 *

 - SOLID는 갑자기 하늘에서 떨어진게 아니라,

 객체지향 4대 특성을 제대로 활용한결과 관심이 같은것끼리는

 하나의 객체로 또는 친한객체로 모으고, 관심이 다른것은 가능한 따로 떨어져

 서로 영향을 주지않도록 분리하는것

 SOC 를 잘적용하면 자연스레 SOLID가 적용된다.

 

* SOLID 원칙을 적용하면 소스 파일의 개수는 더많아지는 경향이 있다.

 하지만 많아진 파일이 논리를 더욱 잘분할하고, 이해하기 쉽고, 개발하기 쉽고,

 유지와 관리 보수가 더욱 쉬워진다.