SOLID 원칙에 대한 설명
SRP: 단일 책임 원칙(Single Responsibility Principle)
→ 책임이 변경의 축. 책임이 너무 많이 가지고 있으면 결합도가 높아져 다른 책임도 변하는 연쇄적인 변화 발생
클래스가 오직 하나의 목적이나 이유로만 변경되어야 한다는 것
특정 사용자나 기능 요구사항에 따라 소프트웨어의 변경 요청을 처리하는 역할
클래스는 한가지 변화의 이유만 가져야 하며, 이를 통해 변경이 발생했을 때 다른 기능에 영향이 덜 미치도록 설계. → 유지보수 및 이해가 쉬운 코드 작성
OCP: 개방 폐쇄 원칙(Open-Closed Principle)
확장에는 열려잇고 변경에는 닫혀있음을 강조
확장: 새로운 타입추가 및 기능 추가
폐쇄 : 확장이 일어날 때 상위 레벨의 모듈이 영향을 받지 않아야함 → 모듈의 행동을 쉽게 변경 가능
모듈 : 클래스, 패키지, 라이브러리 등 프로그램을 구성하는 임의의 요소들
LSP: 리스코브 치환 원칙(Liskov Substitution Principle)
is-a
로 치환해서 생각해보기서브타입은 어제나 상위 타입으로 교체할 수 있어야함.
부모쪽으로 업캐스팅하는 것이 안전함을 보장하기 위해 존재
상위 타입의 역할과 행동 규약에서 벗어나면 안됨.
만약 하위 타입이 상위 타입에 기대되는 역할을 만족하지 않는다면, 상위 타입을 사용하는 클라이언트 코드에서는 하위 타입이 누구니지 물어봐야하는데 이는 OCP를 어렵게하미 LSP를 위반하는 대표적 사례는 Rectangle 예제.
ISP: 인터페이스 분리 원칙(Interface Segregation Principle)
클라이언트 입장에서 인터페이스 분리의 필요성을 강조함
인터페이스가 비대해지면
→ 같은 인터페이스를 구현하는 클라이언트간의 결합도가 높아짐
→ 특정 클라이언트를 위한 메서드 추가 시, 다른 클라이언트는 구현이 강제되고 변경에 영향
사용하지 않지만 의존성을 가지고 있다면 해당 인터페이스가 변경되는 경우에 영향을 받음. → 독립적인 개발과 배포가 불가능
사용하는 기능만 제공하도록 인터페이스를 분리해 변경 여파를 최소화 할 수 있음
DIP: 의존성 역전 원칙(Dependency Inversion Principle)
상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안됨
→ 추상화에 의존해야함
추상화가 구체적인것에 의존하게되면 추상화를 자유롭게 재사용할 수 없게 되기 때문에
의존성 역전 원칙을 통해서 하위 레벨의 모듈은 개발폐쇄원칙을 준수하면서 새로운 타입 추가 가능
[참고]
Last updated