본문 바로가기

JAVA

[JAVA] 5 SOLID programming principles

 

1. Single Responsibility principle (SRP) : 단일 책임 원칙

  객체는 단 한개의 책임(역할)만을 가져한다. 즉, 객체를 변경해야 하는 이유는 단 하나여야 한다는 원칙.

 

 

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

  확장(extension)에 대해서는 열려있고(Open) 수정(modification)에 대해서는 닫혀있어야(Closed) 한다는 원칙.

  - 확장에 대해 열려 있다는 것은 모듈의 동작을 확장할 수 있다는 것이다. 애플리케이션의 요구사항이 변경될 때

    이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다.

  - 수정에 대해 닫혀 있다는 것은 모듈의 소스코드나 바이너리 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경

    할 수 있다는 것이다. 그 모듈의 실행 가능한 바이너리 형태나 링크 가능한 라이브러리를 건드릴 필요가 없다는 것.

 

 

3. Liskov Substitution principle (LSP) : 리스코프 치환 원칙

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

  베이스 클래스가 서브 클래스로 치환 되어도 동일한 동작을 보장해야 한다는 원칙이다.

  (가장 많이 드는 예로, 정사각형이 직사각형을 상속 받았을 때, 논리상으로 정사각형은 직사각형이 맞지만 직사각형은

  정사각형이 아니기 때문에 둘은 상속 관계로 존재할 수 없음)

 

 

4. Interface Segregation principle (ISP) : 인터페이스 분리 원칙

  인터페이스는 자신의 쓰임새와 사용에 맞게끔 분리해야 한다는 원칙.

  (인터페이스를 상속하는 인터페이스를 통해 해결하거나 여러개의 인터페이스를 상속하여 해결 가능)

 

  만약 인터페이스가 너무 범용적으로 정의되어 있으면 그 인터페이스의 구현체에 필요없는 추상이 있더라도 전부 구현

  해야 하는 문제가 생긴다. 또한 그 인터페이스가 변경될 대마다 사용여부에 상관없이 구현체를 변경해야 하는 상황까지

  생길 수 있다. (개방-폐쇄 원칙 위반)

 

 

5. Dependency Inversion principle (DIP) : 의존 역전 원칙

  구현 클래스가 아닌 인터페이스 타입을 사용하라는 원칙.

  구현 클래스는 변경될 가능성이 높기 때문에 변화 가능성이 상대적으로 적은 추상 타입이나 메서드에 의존하면 변화에 따른

  영향을 최소화할 수 있다.