반응형
SRP 단일 책임 원칙
- 같은 이유로 변하는 애들을 모아라. 다른 이유로 변하는 애들은 분리해라. 객체 지향에 대입해보면, 클래스에는 단 한 가지의 책임을 할당해야하고, 클래스를 변경하는 이유는 단 한 개여야 한다는 말이다.
- B를 변경하는 경우 X만 변경되고, C를 변경하는 경우 Y만 변경된다면 A의 X책임과 Y책임을 분리하자!
OCP 개방 폐쇄 원칙
- 말은 제일 쉽다. 확장에는 열려있어야 하고, 변경에는 닫혀있어야 한다. 어떠한 기능을 변경하거나 확장하면서, 그 기능을 사용하는 기존 코드의 수정을 최소화한다는 것이다. 개방 폐쇄 원칙의 핵심은 변경이 예상되는 곳을 추상화하고 다형성을 이용하는 것이다
- 다운캐스팅(instance of), 비슷한 if-else 구문이 생성된다면 이 원칙이 지켜졌는지 확인해보자
LSP 리스코프 치환 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- 리스코프 치환 원칙은 기능 확장과 함수의 명세와 관련된 원칙이다. 또한 리스코프 치환 원칙을 어기면 개방 폐쇄 원칙을 위반할 가능성이 높아진다.
- 인터페이스/ 부모 객체를 통해 인자를 전달 받는 함수에서, 특정 구현체/자식이 별도로 행동하도록 만들면 안된다.
- (특히 instance of 로 분기처리)
ISP 인터페이스 분리 원칙
- 인터페이스는 인터페이스를 사용하는 클라이언트 기준으로 분리해야한다 라는 것이다. 인터페이스를 구체적으로 분리해서 자신과 관련없는 메소드는 구현하지 않아야 한다.
- 단일 책임 원칙과도 관련이 있다. 인터페이스 분리 원칙도 한 곳의 변경이 다른 곳에 미치는 영향을 최소화한다. 따라서 클래스가 가지는 책임을 최소화하고 인터페이스를 분리해서 클래스를 설계해야 한다.
DIP 의존 역전 원칙
- "고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 된다. 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다."를 의미합니다. 이것을 아주 쉽게 말하면, "자신보다 변하기 쉬운 것에 의존하지 마라"라고 이해하시면 되겠습니다.
- 소스 코드의 의존은 자동차가 '타이어'를 의존하지만, 런타임에서의 객체 의존은 타이어가 아니라 하위 타이어 중 하나를 의존합니다. 따라서, 의존 역전 원칙은 런타임에서의 의존을 역전시키는 것이 아니라 소스 코드 단계에서의 의존을 역전시킨다는 것을 유의해야 합니다.
728x90
반응형
댓글