반응형
객체지향 설계 5대 원칙이라고 불리는 SOLID에 대한 내용을 간단히 정리해본다.
1. OCP(Open-Cloased Principle)
- 확장에 대해서는 개방되어야 하지만, 변경에 대해선 닫혀 있어야 한다.
- 추상클래스, 인터페이스 활용으로 확장에는 열려있고, 수정에는 응집성이 있어야 한다.
2. SRP(Single Responsibility Principle) : 단일 책임 원칙
- 하나의 클래스는 하나의 책임만 가져야 한다.
- 변화가 다른 클래스에 영향을 미치지 않도록 한다.
- 클래스의 응집도가 높아야 함
3. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
- 클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안된다.
- 인터페이스를 통해 가능
- 하나의 일반적인 인터페이스보다는, 여러개의 구체적인 인터페이스가 낫다.
- 예>Worker 인터페이스가 work(), eat()를 가지고 있을때, Staff가 Worker를 구현하면 두개 메소드가 유효하지만 Robot클래스가 Worker를 구현한다면 eat()메소드는 사용되지 않는 메소드다. 따라서 work, eat를 각각 인터페이스로 분리하고, 클래스의 필요에 따라 구현한다.
4. DIP(Dependency Inversion Principle) : 의존관계 역전의 원칙
- 클래스간의 의존관계는 클래스가 아닌 추상클래스, 인터페이스 등 변화하기 어려운 것에 의존해야 한다.
- Java의 대표적인 Framework인 Spring의 핵심 개념 중 하나이다.
5. LSP(Liskov Substitution Principle) : 리스코프 대체 원칙
- 상위클래스(부모클래스)는 파생클래스(자식클래스,구현체) 로 대체 가능해야 한다. 즉, 부모 클래스가 들어갈 자리에 자식 클래스를 넣어도 계획대로 잘 작동해야 한다. 자식클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야 LSP를 만족한다.
- 기반클래스의 기능은 파생클래스가 포함을 해야한다.
- 예>Rectangle 클래스에 setWidth(), setHeight()메소드에 각 변수를 할당하고, 이를 상속받은 정사각형 Square클래스가 있다고 하자. 이 Square클래스에서 setWidth()에서 width=width, height=width / setHeidht()에서 width=height, height=height 로 구현이 되면 이는 LSP원칙에 어긋난다. Rectangel rec = RectFactory().setWidth(1).setHeidth(10);의 결과가 할당되는 객체에 따라 달라지게 된다.
참고: https://hckcksrl.medium.com/solid-%EC%9B%90%EC%B9%99-182f04d0d2b
반응형
댓글