What we have to do is to be forever curiously
testing new opinions and courting new impressions

우리가 해야 할 일은 끊임없이 호기심을 갖고
새로운 생각을 시험해보고 새로운 인상을 받는 것

OOP의 원칙

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


solid

객체 지향 프로그래밍 및 설계의 5가지 원칙

각 두문자를 따서 기억하기 쉽게 SOLID 원칙

아래 다섯가지 원칙들은 시간이 지나거나 변경 사항이 생겼을 때,

유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 적용


SRP(Single Responsibility Principle, 단일 책임 원칙)

한 클래스는 하나의 책임만 가져야 한다.

책임은 변경하려는 이유를 뜻한다.

한 클래스가 하나의 책임만 가지게 되면, 독립적이고 단단하다.

횡단 관심 문제(Cross Cutting Concern)

하나의 책임이 여러 클래스에 분산되어 있는 로깅, 보안, 트랜잭션 같은 기능

관심지향 프로그래밍(Aspect Oriented Programming)

횡단 관심 문제(Cross Cutting Concern)를 해결하기 위한 방법

  • 횡단 관심을 수행하는 코드는 aspect라는 특별한 객체로 모듈화
  • weaving이라는 작업을 통해 모듈화한 코드를 결합
  • 기존의 코드를 전혀 변경하지 않고도 모듈화된 기능들 구현 가능
  • 횡단 관심에 변경 소요 발생 시, 해당 aspect 모듈만 수정하면 된다.


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

확장에 대해서 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.

하나의 모듈에 수정을 가할 때,

그와 연결된 다른 모듈들을 줄줄이 고쳐야 한다면,

이와 같은 프로그램은 수정하기 어렵다.

변해야 하는 것은 쉽게 변할 수 있게 하고,

변하지 않아야 할 것은 변하는 것에 영향을 받지 않게 해야 한다.


LSP(Liskov Substitution Principle, 리스코프 치환 원칙)

자식 클래스는 최소한 자신의 부모 클래스가 가지는 특질을 가진다.

상위 타입의 객체를 하위 타입의 객체로 치환해도

상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

  • 일반화 관계
    • “is a kind of” 의 관계
    • 예를 들어, 원숭이 is a kind of 포유류
    • 포유류(부모 클래스), 원숭이(자식 클래스)

ISP(Interface Segregation Principle, 인터페이스 분리 원칙)

클라이언트는 자신이 이용하지 않는 메서드에 의존하지 않도록 해야 한다.

인터페이스를 역할 단위로 분리하여,

클라이언트들이 꼭 필요한 메서드들만 이용할 수 있도록 한다.


DIP(Dependency Inversion Principle, 의존 역전 원칙)

  1. 상위 모듈은 하위 모듈에 의존하지 않는다. 상위 모듈과 하위 모듈 모두 추상화에 의존한다.
  2. 추상화는 세부 사항에 의존하지 않는다. 세부사항이 추상화에 의존해야 한다.

언제든 의존관계를 반전시켜 독립할 수 있게끔 모듈 간에는 서로 의존성이 없게 설계하라.

대신 각 모듈은 변할 여지가 없는 추상적인 것에 의존하도록 설계하라.

  • 변할 여지가 없는 추상적인 것
    • 추상 클래스(Abstract class)
    • 인터페이스(Interface)
  • DIP를 만족하는 설계는 DI방식으로 추상적인 것에 의해 변화를 쉽게 수용할 수 있다.
    • DI(Dependency Injection, 의존성 주입)은 클래스 외부에서 의존관계가 주입되는 방식을 의미한다.


댓글남기기