객체 지향의 5원칙(SOLID)

김예진·2022년 12월 7일
0

java

목록 보기
17/21

✨SOLID란?

-객체지향 프로그래밍을 하면서 지켜야하는 5대 원칙으로 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌음
-SOLID 원칙을 철저히 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 되는 것으로 알려져 있음

✨단일 책임의 원칙(SRP)

-하나의 모듈은 한 가지 책임을 가져야 한다는 것으로, 이것은 모듈이 변경되는 이유가 한가지여야 함을 의미함
-여기서 변경의 이유가 한가지라는 것은 해당 모듈이 여러 대상 또는 액터들에 대해 책임을 가져서는 안되고, 오직 하나의 액터에 대해서만 책임을 져야 한다는 것을 의미
-만약 어떤 모듈이 여러 액터에 대해 책임을 가지고 있다면 여러 액터들로부터 변경에 대한 요구가 올 수 있으므로, 해당 모듈을 수정해야 하는 이유 역시 여러개가 될 수 있음
-반면 어떤 클래스가 단 하나의 책임 만을 갖고 있다면, 특정 액터로부터 변경을 특정할 수 있으므로 해당 클래스를 변경해야 하는 이유와 시점이 명확해짐

✨개방 폐쇄 원칙(OCP)

-개방 폐쇄 원칙은 확장에 대해 열려있고, 수정에 대해서는 닫혀있어야 한다는 원칙임
-확장에 대해 열려 있다 : 요구사항이 변경될 때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있다
-수정에 대해 닫혀 있다 : 기존의 코드를 수정하지 않고 애플리케이션의 동작을 추가하거나 변경할 수 있다

또 개방 폐쇄의 좋은 예시로 jdbc가 있다

데이터베이스가 mysql에서 oracle로 바뀌더라도 connection을 설정하는 부분만 변경해주면 된다
즉, 자바 애플리케이션은 데이터베이스라고 하는 주변의 변화에 닫혀 있는 것이다 데이터 베이스를 교체한다는 것은 데이터베이스가 자신의 확장에는 열려 있다는 것이다

✨인터페이스 분리 원칙(ISP)

-인터페이스 분리 원칙이란 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하는 것
-인터페이스 분리 원칙을 준수함으로써 모든 클라이언트가 자신의 관심에 맞는 퍼블릭 인터페이스(외부에서 접근 가능한 메세지)만을 접근하여 불필요한 간섭을 최소화할 수 있으며, 기존 클라이언트에 영향을 주지 않은 채로 유연하게 객체의 기능을 확장하거나 수정할 수 있음
-예를 들어 파일 읽기/쓰기 기능을 갖는 구현 클래스가 있는데 어떤 클라이언트는 읽기 작업 만을 필요로 한다면 별도의 읽기 인터페이스를 만들어 제공해 주면된다

✨리스코프 치환 원칙(LSP)

-하위 타입은 상위 타입을 대체할 수 있어야 한다는 것
-즉, 해당 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도, 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야한다는 것임(자식 클래스가 부모 클래스 대신 사용될 수 있어함)

✨의존 역전 원칙(DIP)

-의존 역전 원칙이란 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다는 것
-고수준 모듈이란? : 변경이 없는 추상화된 클래스(또는 인터페이스)
-저수준 모듈이란? : 변하기 쉬운 구체 클래스
-객체 지향 프로그래밍에서는 객체들 사이에 메세지를 주고 받기 위해 의존성이 생기는데, 의존성 역전에 원칙은 올바른 의존 관계를 위한 원칙에 해당함
고수준 모듈: 변경이 없는 추상화된 클래스(또는 인터페이스)

(예시로 requestdto, entity 생각하면 될 것 같다)

참고자료
https://mangkyu.tistory.com/194
https://devlog-wjdrbs96.tistory.com/380

0개의 댓글