Record

목차

개념

-

두문자 약어 개념
S SRP 단일 책임 원칙 (Single responsibility principle)
한 클래스는 하나의 책임만 가져야 한다.
O OCP 개방-폐쇄 원칙 (Open/closed principle)
“소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.”
L LSP 리스코프 치환 원칙 (Liskov substitution principle)
“프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.” 계약에 의한 설계를 참고하라.
I ISP 인터페이스 분리 원칙 (Interface segregation principle)
“특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.”
D DIP 의존관계 역전 원칙 (Dependency inversion principle)
프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

** 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다

단일 책임 원칙 (Single responsibility principle)

객체 지향 프로그래밍에서 단일 책임 원칙(single responsibility principle)이란 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다.

개방-폐쇄 원칙 (Open/closed principle)

개방-폐쇄 원칙(OCP, Open-Closed Principle)은 ‘소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다’는 프로그래밍 원칙이다.

추상클래스 레벨에서 접근하여 구현하여 수정하는 것을 말한다.
소프트웨어 개체는 확장에 대해 열려 있어야하고, 수정에 대해서는 닫혀있어야 한다는 원칙이다.

리스코프 치환 원칙 (Liskov substitution principle)

치환성(영어: substitutability)은 객체 지향 프로그래밍 원칙이다. 컴퓨터 프로그램에서 자료형 S가 자료형 T의 하위형이라면 필요한 프로그램의 속성(정확성, 수행하는 업무 등)의 변경 없이 자료형 T의 객체를 자료형 S의 객체로 교체(치환)할 수 있어야 한다는 원칙이다.
상위 타입의 객체를 하위타입의 객체로 치환하더라도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야한다는 원칙이다.

인터페이스 분리 원칙 (Interface segregation principle)

인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다. 이와 같은 작은 단위들을 역할 인터페이스라고도 부른다. 인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다. 인터페이스 분리 원칙은 SOLID 5원칙의 하나이며, GRASP의 밀착 원칙과 비슷하다.

제공하는 기능에 대한 인터페이스에만 종속적이어야 한다.
만약 하나의 객체가 여러 기능을 제공해야 한다면 ( 단일 책임 원칙에 위배 ),이때 클라이언트가 사용할 수 있는 여러 인터페이스로 분리하여 제공하면 클라이언트가 사용하지 않는 기능에 종속적이지 않을 수 있다.
여러 기능이 복합적으로 제공되는데 만약 분리가 할 필요가 있고 사용할때는 나눠서 사용한다고 한다면 인터페이스를 나눠서 사용하는 것이 좋다.
클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.
큰 덩어리의 인터페이스들을 구체적으로 작은 단위들로 분리시킴으로써 클라이언트가 꼭 필요한 메서드들만 이용할 수 있게 한다.

의존관계 역전 원칙 (Dependency inversion principle)

객체 지향 프로그래밍에서 의존관계 역전 원칙은 소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다. 이 원칙을 따르면, 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다. 이 원칙은 다음과 같은 내용을 담고 있다.
첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
이 원칙은 ‘상위와 하위 객체 모두가 동일한 추상화에 의존해야 한다’는 객체 지향적 설계의 대원칙을 제공한다.

소프트웨어 모듈들을 분리하는 특정 형식을 지칭하는 것을 말한다.
정책을 결정하는 상위 계층이 세부사항인 하위계층에 의존하는 전통적인 의존관계를 반대로 역전 시킴으로써 상위계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
A가 B에(a -> b) 의존한다고 하면
업캐스팅, 상위 클래스를 받도록 하면 다양한 하위 클래스를 받아올 수 있음.

참조

기본 개념과 연관 주제

  • 적응적 소프트웨어 개발
  • 애자일 소프트웨어 개발
  • 코드 재사용
  • 객체 지향 프로그래밍
    • 상속 (객체 지향 프로그래밍)
  • 오컴의 면도날

설계와 개발 원칙

  • 패키지 원칙
  • DRY
  • GRASP
  • KISS
  • YAGNI