SOLID는 객체 지향 설계의 5가지 원칙을 말한다.
SRP( Single Responsibility Principle, 단일책임원칙)
한 클래스에는 하나의 책임만 가져야 한다.
즉, 클래스를 변경하는 이유는 하나여야한다.
예를 들어 한 클래스 내에 A메소드가 있고 ,이 A메소드의 결과로 호출하는 B메소드 , 그리고 B메소드로 호출하는 C메소드가 존재할때, A메소드를 수정한다면 B와 C 메소드를 수정해야 할 상황이 발생할 수 있다. 이는 유지보수가 매우 비효율적이므로 잘 분리해야한다.
OCP(Open - Closed Principle, 개방- 폐쇄 원칙)
확장에는 열려있느나 변경에는 닫혀있어야한다.
즉 , 코드를 수정하기 보다 반드시 새로운 코드를 추가하는 방식으로 설계해야 한다.
예를 들어 어떤 모듈의 기능을 수정해야할 때, 그 모듈을 이용한 다른 모듈 또한 수정해야한다면 유지보수가 매우 비효율적이다.
따라서 OCP의 원칙을 따라 기존 코드를 변경하지 않고 기능을 새롭게 만들거나 변경할수 있게 해야한다.
이는 자바에서 다형성의 오버라이딩이나 오버로딩을 통해 기존 코드를 수정하지 않도고 기능을 확장할 수 있다.
LSP(Liskov Substitution Principle, 리스코프 치환 원칙)
자식클래스는 언제나 부모 클래스를 대체할 수 있어야한다.
즉, 부모 클래스의 기능을 자식 클래스가 대신해도 계획대로 잘 작동해야한다. 따라서 자식 클래스는 부모 클래스의 기능을 무시하지 않고 ,기능을 바탕으로 확장을 해야한다.
예를들어 네 변이 존재하는 직사각형의 클래스와 이 클래스를 상속받는 네변의 길이가 같은 정사각형 클래스 존재할 때, 두 클래스를 치환했을 때 네변의 길이가 같다라는 정사각형 특징이 네 변이 존재한다는 특징을 만족해야한다.
ISP (Interface Segregation Principle, 인터페이스 분리 원칙)
클라이언트는 자신이 사용하는 메소드에만 의존해야한다.
즉, 클라이언트가 필요로 하는 인터페이스를 분리함으로써, 클라이언트가 사용하지 않는 인터페이스에 수정을 해야한다고해도 영향을 받지 않도록 해야한다.
따라서 클라이언트를 기준으로 잘 분리되어야 하며 하나의 큰 인터페이스 보다는 여러 개의 세부적인 인터페이스가 낫다.
DIP(Dependency Inversion Principle, 의존 역전 원칙)
의존 관계를 맺을 때 변화하기 쉬운 것 보다 변화가 없는것에 의존해야한다.
즉, 구체적인 클래스(구체화 )보다 인터페이스나 추상클래스(추상화)와 관계를 맺으라는 뜻이다.
예를 들어 연극(프로그램)에서 배역 (인터페이스) 이를 바탕으로 연기를 하는 배우(구현체)가 있을 때 , 배우가 스케줄때문에 출연을 할 수 없다면 연극에 큰 영향을 주기 때문에 이를 방지하기 위해 배역에 의존해야한다.
출처 및 참고
- https://blog.itcode.dev/posts/2021/08/15/liskov-subsitution-principle
- https://velog.io/@haero_kim/SOLID-원칙-어렵지-않다
- https://velog.io/@harinnnnn/OOP-객체지향-5대-원칙SOLID-의존성-역전-원칙-DIP
'Java' 카테고리의 다른 글
[JAVA] 다차원 배열 (0) | 2023.12.06 |
---|---|
[Java] String 배열 (0) | 2023.12.06 |
[Java] 배열(Array) (1) | 2023.12.06 |
원시타입(Primitive type) vs 참조타입(Reference type) (0) | 2023.02.17 |
JVM과 자바의 실행 과정 (0) | 2023.02.16 |