CS · SW Theory ·객체지향 설계 5원칙 SOLID2018년 3월 25일 · 2분 읽기SOLID란? #객체지향 설계는 긴 세월과 수많은 시행착오를 거치며 5가지 원칙이 정리되었다. 이것은 객체지향 설계의 5원칙이라고 하며, 앞글자를 따서 SOLID라고 한다.SPR(Single Responsibility Principle) : 단일 책임 원칙OCP(Open Closed Principle) : 개방 폐쇄 원칙LSP(Liskov Substitution Principle) : 리스코프 치환 원칙ISP(Interface Segregation Principle) : 인터페이스 분리 원칙DIP(Dependency Inversion Principle) : 의존 역전 원칙이 원칙들은 응집도는 높이고 결합도는 낮추자는 고전 원칙을 객체 지향의 관점에서 재정립한 것으로 볼 수 있다.SRP = 단일 책임 원칙 #어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이어야 한다.SRP가 안지켜진 사례 #변수레벨하나의 속성이 여러 의미를 갖는 경우어떤 곳에서는 쓰고, 어떤 곳에선 안쓰는 속성이 있는 경우메소드레벨분기처리를 위한 if문이 많을 경우OCP = 개방 폐쇄 원칙 #소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다.즉, 자신의 확장에는 열려있고, 주변의 변화에 대해서는 닫혀 있어야 한다는 것이다.이것은 interface 를 통해 구현하여 해결한다.현실의 예를들면 상점직원이 아무리 바뀐다고해서 손님이 상품을 구매하는 데는 지장이 없다.이는 직원은 판매 인터페이스를 구현해야하기 때문이다.손님은 판매인터페이스와 소통하기 때문에 직원이 누구든 지장이 없다.LSP = 리스코프 치환 원칙 #서브타입은 언제나 자신의 기반타입으로 교체할 수 있어야 한다.즉, 하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 수행하는 데 문제가 없어야 한다.이것은 OOP 4대 특성의 상속, 인터페이스 원칙이 잘 지켜진 다면 LSP는 자동으로 잘 적용된 것이다.주로 조직도, 계층도 관점에서의 상속이 LSP를 위배하는 문제가 생긴다.ISP = 인터페이스 분리 원칙 #클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안된다.ISP는 SRP와 비슷하지만 인터페이스를 통한 다른 해결책을 제안하고 있다.예를 들어 class 사람 implements 군인 이면 군인 홍길동 = new 사람() 을 통해 군인 인터페이스의 메소드만을 사용하도록 제한하는 것이다. SRP였다면 class를 나눠버렸겠지만.. 일반적으론 ISP보다 SRP 할 것이 권장된다.DIP = 의존 역전 원칙 #고차원 모듈은 저차원 모듈에 의존하면 안된다.추상화된 것은 구체적인 것에 의존하면 안된다.구체적인 것이 추상화된 것에 의존해야 한다.자주 변경되는 클래스에 의존하지 말자. 로 요약될 수 있다.즉, 자신보다 변하기 쉬운 것에 의존하지 말라는 것이다.해결방법은 OCP와 비슷한데, 구체적인 class가 아닌, 인터페이스에 의존함으로써 DIP를 해결한다.Advertisement ← Compilation Process [Clean Code] 현실적인 관점에서 바라본 클린 코드 →