본문 바로가기

아키텍처

[아키텍처] SOLID 원칙

728x90

 

/* SOLID 원칙 */

아키텍처를 구성하거나 코드를 짤때 생각해야 하는 5대 원칙이다.

이 5대 원칙은 사용자 관점에서의 설계를 지향한다.

 

  • SRP 단일책임원칙
  • OCP 개방-폐쇄 원칙
  • LSP 리스코프 치환 원칙
  • ISP 인터페이스 분리 원칙
  • DIP 의존 역전 원칙

/* 단일 책임 원칙 (SRP) */

클래스는 단 한개의 책임을 가져야 한다. (하나의 컴포넌트는 하나의 책임을 담당해야 한다. 컴포넌트를 변경하는 이유는 하나여야 한다.)

 

ex) 두개의 객체가 하나의 메소드를 공유해서 쓴다고 가정해보자. 수정 사유가 있어 하나의 객체에 있는 메소드를 변경해야 할때, 자연스럽게 다른 하나의 객체가 영향을 받는다.

 

/* 개방 폐쇄 원칙 (OCP) */

확장에는 열려있어야 하고, 변경에는 닫혀있어야 한다.

 

ex) 자바의 JDBC -> 데이터베이스를 MySQL에서 Oracle로 바꾸고 싶으면 코드 변경 없이 connection 객체 부분만 교체해주면 된다. 

 

/* 리스코프 치환 원칙 (LSP) */

상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 작동해야 한다.

-> 다형성을 지원하기 위한 원칙

 

상위 타입 객체의 method()를 하위 타입의 객체에 전달해도 method()가 정상적으로 동작해야 한다.

** 가정에서 벗어난 값을 리턴, 벗어난 기능을 수행하면 안된다

 

/* 인터페이스 분리 법칙 (ISP) */

각 클라이언트의 기능을 중심으로 인터페이스를 분리해야 한다. (불필요한 의존을 없앤다)

 

ex) SendMessage라는 인터페이스에 Line, Kakao 이 의존되어 있다. 두개의 기능이 존재. SendLine, SendKakao 이렇게 분리를 한다.

 

/* 의존 역전 원칙 (DIP) */

고수준 모듈이 저수준 모듈의 구현에 의존해서는 안된다.

 

저수준 모듈은 인터페이스로 추상화하여 저수준 모듈이 인터페이스에 의존하게 만든다. (방향을 바꿀 수 있다)

 

 

728x90