반응형

스프링이란

스프링이란 자바 기반의 오픈소스 어플리케이션 프레임 워크

객체 지향 언어의 특성을 극대화하여 좋은 객체 지향 어플리케이션을 쉽고 유연하게 개발할 수 있다.

핵심 모듈

  • 스프링 프레임워크
  • 스프링 부트

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

  • 추상화: 복잡한 내부 구현을 숨기고 필요한 인터페이스만 노출시키기
  • 캡슐화: 데이터와 메소드를 하나의 단위로 묶고, 외부 접근을 통제
  • 상속: 기존 클래스를 확장하여 코드 재사용
  • 다형성: 동일한 인터페이스에 대해 다양한 구현을 실행 시점에 선택

객체 단위로 인터페이스와 구현을 분리한다.

클라이언트는 서버 객체의 인터페이스만 알고 있으면 되고, 내부 구현 변경에도 영향을 받지 않는다.

좋은 객체 지향 설계를 위한 5가지 원칙(SOLID)

약어
원칙명
요약
S
Single Responsibility Principle (SRP)
단일 책임 원칙: 한 클래스는 오직 하나의 변경 이유만 가져야 한다. 변경 시 파급 효과가 적어야 함.
O
Open-Closed Principle (OCP)
개방-폐쇄 원칙: 확장에는 열려 있고, 변경에는 닫혀 있어야 한다. (새 기능은 새 클래스를 추가)
L
Liskov Substitution Principle (LSP)
리스코프 치환 원칙: 상위 타입을 하위 타입으로 바꿔도 프로그램의 정확성이 깨지지 않아야 한다.
I
Interface Segregation Principle (ISP)
인터페이스 분리 원칙: 클라이언트별로 특화된 작은 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
D
Dependency Inversion Principle (DIP)
의존관계 역전 원칙: 고수준 모듈은 저수준 모듈에 의존하면 안 되고, 둘 다 추상화(인터페이스)에 의존해야 한다.

OCP의 문제점

단순히 다형성만으로는 클라이언트 코드를 바꿔야만 내가 원하는 방식으로 동작하기 때문에 OCP를 위반한다.

따라서 DI 컨테이너가 구현체의 결정과 주입을 담당하도록 이를 분리해야한다.

DIP 구현

DI는 인터페이스에 의존하고 구현체는 런타임에 주입함으로써 DIP를 자연스럽게 만족한다.

(여기서 구현체라 함은 어떠한 인터페이에 선언된 메소드를 실제로 구현한 클래스를 말한다.)

객체 지향 설계와 스프링

스프링은 방금 전 SOLID 원칙 중에서 OCP와 DIP를 DI 컨테이너와 IoC 매커니즘으로 실현한다.

IoC 컨테이너

어플리케이션이 의존하는 객체 간의 생성과 관계를 스프링 컨테이너가 관리

설정만으로도 새 구현체로 교체가능하다 → 클라이언트 코드를 손 볼 필요가 사라짐

DI

생성자 주입, 세터 주입, 필드 주입으로 다양한 생성 시점과 유연성을 제공한다.

구현체 선택 책임을 코드 밖으로 분리하여 SRP와 OCP를 만족시킨다.

AOP

트랜잭션과 로깅 등 공통 관심사를 분리하여 모듈로 관리한다.

단일 책임을 더 엄격하게 지키도록 해준다.

반응형

+ Recent posts