[JAVA] 객체지향 설계의 5가지 원칙 SOLID

2021. 1. 13. 23:01
728x90

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

    :  작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을

      수행하는데 집중되어야 한다는 원칙

 

  • 책임이 확실해지기 때문에 변경하더라도 다른 책임의 변경 연쇄작용에서 자유로울 수 있다.
  • 코드의 가독성 향상, 유지보수 용이
  • 다른 원리들을 적용하는 기초

 

=> 중요한 기준은 '변경', 변경이 있을 때 파급효과가 적으면 단일책임 원칙을 잘 따른 것.

 

 

 

 

2. OCP (개방폐쇄의 원칙: Open Close Principle)

    :  소프트웨어의 구성요소는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원칙

 

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

 

적용방법

 

  1. 변경(확장)될 것과 변하지 않을 것을 엄격히 구분
  2. 이 두 모듈이 만나는 지점에 인터페이스를 정의
  3. 구현에 의존하기보다 정의한 인터페이스에 의존하도록 코드를 작성

 

 

 

 

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

    :  서브타입은 언제나 기반타입으로 교체할 수 있어야 한다.

 

  • 서브타입은 기반타입이 약속한 규약을 지켜야 한다.
  • 서브클래스가 확장에 대한 인터페이스를 준수해야함을 의미

 

ex) 자동차 인터페이스의 엑셀은 앞으로 가는 기능, 뒤로가게 구현하면 LSP 위반

 

적용방법

 

  1. 만약 두 개체가 똑 같은 일을 한다면 둘을 하나의 클래스로 표현하고 이들을 구분할 수 있는 필드를 둡니다.
  2. 똑같은 연산을 제공하지만, 이들을 약간씩 다르게 한다면 공통의 인터페이스를 만들고 둘이 이를 구현 합니다. (인터페이스 상속)
  3. 공통된 연산이 없다면 완전 별개인 2개의 클래스를 만듭니다.
  4. 만약 두 개체가 하는 일에 추가적으로 무언가를 더 한다면 구현 상속을 사용합니다.

 

 

 

 

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

    :  한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리.

=> 하나의 일반적인 인터페이스보다는 여러 개의 구체적인 인터페이스가 낫다.

 

  • 어떤 클래스를 이용하는 클라이언트가 여러개고 이들이 해당 클래스의 특정 부분집합만 이용한다면, 이들을 따로 인터페이스로 빼낸다.
  • 인터페이스의 단일 책임 강조

 

 

 

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

    :  구현클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻.

 

  • DIP의 키워드는 ‘IOC’, ‘훅 메소드*(슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브클래스에서 선택적으로 오버라이드할 수 있도록 만들어둔 메소드를 훅(hook) 메소드라고 한다. 서브클래스에서는 추상 메소드를 구현하거나, 훅 메소드를 오버라이드하는 방법을 이용해 기능의 일부를 확장한다.)*’, ‘확장성’
  • 이 세 가지 요소가 조합되어 복잡한 컴포넌트들의 관계를 단순화하고 컴포넌트 간의 커뮤니케이션을 효율적이게 합니다.
  • DIP는 복잡하고 지난한 컴포넌트간의 커뮤니케이션 관계를 단순화하기 위한 원칙입니다.
728x90

'Development > 자바' 카테고리의 다른 글

[JAVA] 객체지향의 특징  (0) 2021.01.13
[JAVA] 자바란?  (0) 2020.11.10
[JAVA] 스택과 큐  (0) 2020.11.05
[JAVA] 배열  (0) 2020.10.28
[JAVA] 람다식이란?  (0) 2020.10.22

BELATED ARTICLES

more