[스프링 핵심 원리] 객체 지향 설계와 스프링

JUJU·2024년 2월 11일
1

Spring

목록 보기
2/21
본 포스트는 김영한 개발자님의 스프링 핵심 원리 강의를 듣고 정리한 것입니다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만든다.

✏️ SOLID

SOLID란 로버트 마틴이 정의한, 좋은 객체 지향 설계의 5가지 원칙이다.

SRP(Single Responsibility Principle): 단일 책임 원칙
OCP(Open/Closed Principle): 개방-폐쇄 원칙
LSP(Liskov substitution Principle): 리스코프 치환 원칙
ISP(Interface segregation Principle): 인터페이스 분리 원칙
DIP(Dependency Inversion Principle): 의존관계 역전 원칙

■ SRP(Single Responsibility Principle)

  • 단일 책임 원칙
  • 한 클래스는 하나의 책임만 가져야 한다.

OCP(Open/Closed Principle)

  • 개방-폐쇄 원칙
  • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • 클라이언트의 코드를 변경하지 않고, 서버의 코드를 확장하여 문제를 해결

■ LSP(Liskov substitution Principle)

  • 리스코프 치환 원칙
  • 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • ex) 액셀 인터페이스의 기능은 "앞으로 전진"이다. 후진하면 프로그램의 정확성을 깨뜨리므로 LSP 위반이다.

■ ISP(Interface segregation Principle)

  • 인터페이스 분리 원칙
  • 하나의 범용 인터페이스를 설계하기 보다는, 특정 클라이언트를 위한 인터페이스 여러개를 설계해야 한다.

DIP(Dependency Inversion Principle)

  • 의존관계 역전 원칙
  • 구체화에 의존하지 말고, 추상화에 의존하라
  • 의존한다 == 코드에서 사용된다



✏️ 다형성의 한계

다형성만으로는 OCP, DIP를 지킬 수 없다.
다음의 예시를 보자.

public class Service{
	private Repository repository = new MemoryRepository();
}

Service 클래스는 Repository 인터페이스와 MemoryRepository 구현객체에 의존하고 있다. ➜ DIP 위반


현재는 MemoryRepository를 저장공간으로 사용하고 있다. DataBaseRepository로 바꾸려면 다음의 과정을 거쳐야 한다.

public class Service{
	private Repository repository = new DataBaseRepository();
}

클라이언트인 Service 클래스의 코드를 변경했다. ➜ OCP 위반

그럼 OCP, DIP를 지키려면 어떻게 해야하는가?

🌱 SPRING 🌱


✏️ Spring과 객체 지향

Spring은 다음 기술로 위의 문제를 해결한다.

  • DI(Dependency Injection): 의존관계, 의존성 주입
  • DI 컨테이너 제공

다음 포스트에서는 실제 자바 코드를 통해 왜 Spring이 필요한지 알아보겠다.




REFERENCE

스프링 핵심 원리 - 김영한 개발자님

profile
개발자 지망생

0개의 댓글

관련 채용 정보