프로그래밍

[OOP] 객체 지향 프로그래밍의 5가지 설계 원칙

aSpring 2023. 11. 29. 15:39
728x90
728x90

OOP?

- Object-Oriented Programming

- 객체 지향 프로그래밍

- 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, '객체'들의 상호작용(메시지 주고받기, 데이터 처리 등)으로 프로그램 로직을 구성하는 프로그래밍 패러다임

 

SOLID 원칙

- 객체지향 설계에서 지켜줘야 할 5개의 소프트웨어 개발 원칙

- SRP / OCP / LSP / ISP / DIP

=> 코드를 확장하고 유지 보수 관리가 더 쉬워지며, 불필요한 복잡성을 제거 -> 리팩토링에 소요되는 시간을 줄임으로써 프로젝트 개발의 생산성을 높일 수 있음

=> 이걸 지키면 시간이 지나도 변경이 용이하고 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 됨

=> 표준화 작업에서부터 아키텍처 설계에 이르기까지 다양하게 적용됨

  • SRP(Single Responsibility Principle) : 단일 책임 원칙
    • 모듈이 변경되는 이유가 한가지여야 함
    → 해당 모듈이 여러 대한 또는 액터들에 대해 책임을 가져서는 안되고, 오직 하나의 액터에 대해서만 책임을 져야 한다는 것
  • OCP(Open-Closed Principle) : 개방-폐쇄 원칙
    • 확장에 대해 열려있고 수정에 대해서는 닫혀있어야 한다는 원칙
    • 확장에 대해 열려 있다 : 요구사항이 변경될 때 새로운 동작을 추가하여 애플리케이션의 기능을 확장할 수 있다
    • 수정에 대해 닫혀 있다 : 기존의 코드를 수정하지 않고 애플리케이션의 동작을 추가하거나 변경할 수 있다
    • 해당 원칙을 지키기 위해 추상화에 의존해야 함(변하는 것들은 숨기고 변하지 않는 것들에 의존)
  • LSP(Listov Substitution Principle) : 리스코프 치환 원칙
    • 하위 타입은 상위 타입을 대체할 수 있어야 한다
    • 해당 객체를 사용하는 클라이언트는 상위 타입이 하위 타입으로 변경되어도, 차이점을 인식하지 못한 채 상위 타입의 퍼블릭 인터페이스를 통해 서브 클래스를 사용할 수 있어야 한다는 것
    • 자식 클래스가 부모 클래스를 대체하기 위해서는 부모 클래스에 대한 클라이언트의 가정을 준수해야 한다는 것을 강조
    • 대체 가능성을 결정해야 하는 것은 객체를 이용하는 클라이언트!
  • ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
    • 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공 -> 목적과 관심이 각기 다른 클라이언트가 있다면 인터페이스를 통해 적절하게 분리
    • 모든 클라이언트가 자신의 관심에 맞는 퍼블릭 인터페이스(외부에서 접근 가능한 메세지)만을 접근하여 불필요한 간섭을 최소화할 수 있음
  • DIP(Dependency Inversion Principle) : 의존 역전 원칙
    • 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안 되며, 저수준 모듈이 고수준 모듈에 의존해야 한다
    • 비즈니스와 관련된 부분이 세부 사항에는 의존하지 않는 설계 원칙

 

참고

728x90
728x90

'프로그래밍' 카테고리의 다른 글

HTTP, Web Server, WAS  (0) 2023.12.11
컴파일(Compile)과 런타임(Runtime)  (3) 2023.12.06
[HTTPS] HTTP와 HTTPS  (0) 2023.11.29
[REST API] REST API란?  (1) 2023.11.28
[HTTP] HTTP 응답 상태 코드  (0) 2023.11.25