반응형
객체지향 설계에서 지켜야 할 SOLID 5원칙에 대해 알아보겠다.
SRP(Single Responsibility Principle, 단일 책임 원칙)
어떤 클래스를 변경해야 하는 이유는 오직 하나뿐
- 작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 서비스는 하나에만 집중이 되어있어야 한다.
- 이렇게 작성 시 책임 영역이 확실해지며 책임의 연쇄반응으로부터 자유로워 질 수 있다.
OCP(Open-Closed Principle, 개방-폐쇄 원칙)
소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀있어야 함
- 캡슐화를 통해 여러 객체에서 사용하는 같은 기능들을 하나의 인터페이스로 정의
- OCP를 가능하게 하는 중요한 메커니즘은 추상화와 다형성
LSP(The Liskov Substitution Principle, 리스코브 치환의 원칙)
서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 함
- 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않는 범위 내에서 확장만 수행
ISP(Interface Segregation Principle, 인터페이스 분리의 원칙)
클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안됨
- 여러 인터페이스로 여러 책임을 가진 클래스를 단일 책임을 가진 클래스로 만듦
- ISP를 적용할 때 상위 클래스는 풍성할 수록 좋고, 인터페이스는 작을수록 좋음
DIP(Dependency Inversion Principle, 의존 역전 원칙)
고차원 모듈은 저차원 모듈에 의존하면 안되며 이 두 모듈 모두 다른 추상화된 것에 의존해야 함
- 상위 클래스일수록, 인터페이스일수록, 추상 클래스일수록 변하지 않을 가능성이 높기때문에 의존
- 의존의 방향이 역전됨
반응형
'개인 공부 > JAVA' 카테고리의 다른 글
[Java/Spring] FrameWork vs Library (0) | 2021.07.15 |
---|---|
[Java/Spring] Eclipse vs IntelliJ (0) | 2021.07.08 |
[Java/Spring] 객체 지향의 4대 특성 (0) | 2021.07.07 |
[Java/Spring] Overloading과 Overriding의 차이 (0) | 2021.07.06 |
[Java/Spring] public vs protected vs private (0) | 2021.07.05 |