객체지향 5원칙/SOLID
객체지향 개발을 할 때 지켜야하는 5개의 원칙이 있습니다.
각각의 머릿글자를 따서 SOLID 라고도 부릅니다.
1. SRP(Single Responsibility Principle) : 단일 책임 원칙
객체는 오직 하나의 책임을 가져야합니다.
문자 송신 기능을 가진 클래스는 문자 송신만을 담당하며, 추후 여러 수정사항이 생기더라도
문자 송신 기능의 수정 외에는 다른 기능이나 부가 기능이 덧붙여져서는 안됩니다.
만일 문자 송신 기능에 화면 표시 기능도 추가한다면 추후 화면 표시 기능을 수정할 때
문자 송신 기능의 클래스를 고치게 됩니다. 이렇게 되면 화면 표시 기능과 문자 송신 기능
두 가지의 책임을 갖게 되어 목적이 모호해지며 수정 할 때 영향을 받는 범위가 넓어져
유지 보수 시 더 많은 노동력이 필요하며 최종적으로 스파게티 코드가 될 가능성이 존재합니다.
2. OCP(Open-Close Principle) : 개방-폐쇄 원칙
각 객체는 확장에 대해서는 열려있어야 하며 수정 및 변경에는 폐쇄적으로 대응해야 합니다.
이는 기능에 add on할 수 있는 확장성은 갖고있되,
본 기능에 대해서는 수정, 변경을 하지 않아야한다는 원칙입니다.
3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
자식 클래스는 언제나 자신의 부모 클래스를 대체 할 수 있어야합니다.
즉, 부모 클래스가 들어갈 자리를 자식 클래스로 치환해도 계획대로 작동해야한다는 것입니다.
상속, 다형성과 일맥상통하는 원칙으로 이를 지키지 않으면 일차적으로 상속이 제대로 기능하지
않고있다는 뜻입니다.
4. ISP(Interface Sergregation Principle) : 인터페이스 분리 원칙
클라이언트에서 사용하지 않는 메서드는 사용하면 안되기 때문에 인터페이스를 잘게 쪼개어 작성합니다.
OCP와도 유사하다 생각되지만, 다른 원칙입니다. 하지만 ISP를 잘 지키면 OSP도 잘 적용될 가능성이
높습니다.
1개의 인터페이스에 여러 기능을 넣어두게 되면 그 인터페이스가 사용될 때 모든 메서드를 사용하게 되어
쓸데없는 메서드까지 발동 되게 됩니다. 따라서 적절히 쪼개어 인터페이스를 분리 사용해야합니다.
5. DIP(Dependecy Inversion Principle) : 의존성 역전 원칙
추상성이 높고 안정적인 높은 수준의 클래스는 구체적이고 불안정한 저수준의 클래스에 의존하면 안됩니다.
객체지향개발에서 인터페이스를 통해 이 원칙을 준수 할 수 있습니다.
상대적으로 높은 레벨의 클라이언트는 저수준 클래스에서 추상화한 인터페이스만을 바라보기 때문에
이 인터페이스를 구현한 클래스는 클라이언트에 별다른 변경 없이도 쉽게 교체 할 수 있습니다.
공부하며 필요한 부분을 기록하는 블로그입니다.
틀린 부분, 보완이 필요한 부분이 있다면 알려주시면 감사하겠습니다!