Spring

[스프링] 좋은 객체 지향 프로그래밍이란?

문승주 2023. 7. 5. 17:55
반응형

본 내용은 인프런의 김영한 님의 강의 "스프링 핵심 원리 - 기본편" 내용을 바탕으로 정리한 내용입니다.

 

객체지향의 특징

추상화, 캡슐화, 상속, 다형성

 

 

객체지향 프로그래밍이란?

객체지향 프로그래밍이란 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임이나 객체들 간의 상호작용과 데이터의 흐름에 초점을 맞추어 프로그램을 구조화하고 개발하는 방법론입니다.

 

 

객체지향 언어의 5가지 원칙(SOLID)

단일 책임 원칙 (Single Responsibility Principle, SRP)

  • 클래스나 모듈은 하나의 책임만 가져야 한다는 것을 의미한다.
  • 클래스 변경시 파급 효과가 적으면 단일 책임원칙을 잘 따른 것이다.
  • SRP는 코드의 응집성을 높이고 유지보수성을 개선하여 코드의 가독성과 재사용성을 향상시킨다.

개방-폐쇄 원칙 (Open-Closed Principle, OCP)

  • 소프트웨어 개체(클래스, 모듈 등)는 확장에는 열려 있어야 하지만 변경에는 닫혀 있어야 한다는 원칙이다.
  • 기존의 코드를 수정하지 않고도 기능을 추가하거나 변경할 수 있어야 한다는 것을 의미한다.
  •  OCP를 준수하는 코드는 추상화, 상속, 인터페이스 등 다형성을 활용하여 유연성과 확장성을 갖춘 구조를 만들 수 있다.

리스코프 치환 원칙 (Liskov Substitution Principle, LSP)

  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀수 있어야 한다.
  • 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 기능을 포함하면서도 자신의 동작을 변경하지 않아야 한다. 이를 통해 다형성과 계층 구조의 일관성을 유지할 수 있다..

인터페이스 분리 원칙 (Interface Segregation Principle, ISP)

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 잣다
  • 인터페이스는 클라이언트가 필요로 하는 기능에만 집중되어야 하며, 클라이언트가 사용하지 않는 기능을 갖지 않아야 한다.
  • ISP를 준수하는 인터페이스는 더 작고 응집력 있으며, 클래스 간 결합도를 낮추고 유지보수성을 향상시킨다.

의존 역전 원칙 (Dependency Inversion Principle, DIP)

  • 상위 수준의 모듈은 하위 수준 모듈의 구체적인 구현이 아닌 추상화된 인터페이스나 추상클래스에 의존해야 한다는 원칙이다.
  • 쉽게 말해 구현 클래스에 의존하지 말고, 인터페이스에 의존해야 한다는 뜻이다.
  • 모듈 간의 결합도를 줄이고 유연한 시스템을 구성할 수 있다.

 

※ 다형성 만으로는 OCP, DIP를 지킬 수 없다.

 

 

좋은 객체 지향 설계 방법

모든 설계에 역할과 구현을 분리해야 한다.

이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋다.

인터페이스 도입시 추상화라는 비용이 발생하기에 기능을 확장할 가능성이 없다면 인터페이스를 도입하지 말고 클래스를 직접 사용하는 것이 좋다.

반응형