디자인 패턴 - SOLID 원칙

JAVA 객체 지향 디자인 패턴 책을 정리.

소프트웨어 설계 원칙으로 SOLID가 있다. SRP, OCP, LSP, DIP, ISP 로 각각을 알아보자. 이 원칙들은 객체지향 소프트웨어 설계뿐만 아니라 C같은 절차적 프로그래밍 기법에도 적용할 수 있다.

단일 책임 원칙 (SRP)

SRP(Single Responsibility Principle)

  • 단 하나의 책임을 가져야 한다.

SRP에서 말하는 책임의 기본 단위는 객체를 지칭한다.

즉, 객체는 하나의 책임만 가져야 한다는 의미이다.

책임의 의미

  • 해야 하는 것
  • 할 수 있는 것
  • 해야 하는 것을 잘 할 수 있는 것

책임 분리

시스템에 변경이 발생할 때 기존의 기능에 영향을 주는지를 평가하는 테스트를 회귀 테스트라 한다. 회귀 테스트 비용을 줄이는 방법은 시스템에 변경 사항이 발생했을 때 영향을 받는 부분을 적게 하는 것이다.

그러려면 책임 분리를 해야한다.

  • 책임 분리 : 한 클래스에 너무 많은 책임을 부여하지 말고 단 하나의 책임만 수행하도록 해 변경 사유가 될 수 있는 것을 하나로 만들어 주는 것.

산탄총 수술

하나의 책임이 여러 개의 클래스들로 분산되어 있는 경우에 단일 책임 원칙(SRP)에 입각해 설계를 변경해야 하는 경우를 산탄총 수술이라 한다.

하나의 총알에 여러 개의 산탄이 들어 있어 총을 쏘면 산탄이 사방으로 퍼지면서 날아가 맞은 동물을 치료할 때 여러 군데를 치료해야 한다는 점에 착안해 만들어졌다.

횡단 관심 문제

산탄총 수술을 해야하는 문제 중 횡단 관심 문제(cross-cutting concern)가 있다. 로깅, 보안, 트랜잭션 같은 핵심 기능 안에 포함되는 부가 기능이 횡단적으로 분포되어 있어 변경 사항이 생기면 산탄총 수술 같이 변경될 곳을 모두 찾아 수정해주어야 한다.

AOP

횡단 관심 문제를 해결하기 위한 방법으로 관심지향 프로그래밍(AOP: Aspect-Oriented Programming) 기법이 있다.

이 기법은 횡단 관심을 수행하는 코드를 애스펙트(aspect)라는 특별한 객체로 모듈화하고 위빙(weaving)이라는 작업을 통해 코드를 핵심 기능에 끼워 넣을 수 있다. 이를 통해 기존의 코드를 전혀 변경하지 않고도 시스템 핵심 기능에서 필요한 부가 기능을 효과적으로 이용할 수 있다.

개방-폐쇄 원칙

// todo

김땡땡's blog

김땡땡's blog

김땡땡