Spring과 객체 지향

스프링 생태계

  1. 필수: 스프링 프레임 워크 & 스프링 부트
  2. 선택: 스프링 데이터, security 등등

스프링 프레임 워크

  1. 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트 등
  2. 웹 기술: 스프링 MVC
  3. 언어: 코틀린, 그루비 등

스프링 부트: 스프링을 쉽게 사용할 수 있도록 도움

  • 장점
    1. 단독 실행 가능한 스프링 애플리케이션 생성
    2. 별도의 웹서버 필요 X
    3. 손쉬운 빌드 구성을 위해 스타터 종속성 제공

그래서 스프링이란?

: 자바 기반의 프레임워크

  • 자바 언어의 가장 특징은 객체 지향 -> 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크!
  • 객체 지향 프로그래밍: 프로그램을 유연하고 변경이 용하게 만들어 대규모 소프트웨어 개발에 많이 사용
  • 객체 지향 프로그래밍의 특징: 다형성

다형성: 역할과 구현으로 세상을 구분

  • 클라이언트에게 영향을 주지 않고 새로운 기능을 제공하는 것
  • 장점
    1. 클라이언트는 대상의 역할만 알면 된다.
    2. 클라이언트는 구현 대상의 내부 구조를 몰라도 사용할 수 있다.
    3. 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
    4. 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
    
  • 자바 언어에서의 다형성: 오버라이딩
  • 본질
    1. 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
    2. 본질 이해를 위해 협력이라는 객체 사이 관계에서 시작
    3. 클라이언트를 변경하지 않고 서버 구현 기능을 유연하게 변경할 수 있도록 함.
    

    스프링과 객체 지향

  • 다형성이 중요함
  • 다형성을 극대화해서 이용할 수 있도록 도움
  • 제어의 역전(IoC), 의존 관계 주입(DI)은 다형성을 활용해 역할과 구현을 편리하게 다룰 수 있도록 한다.

좋은 객체지향 설계의 5가지 원칙(SOLID)

  1. SRP: 단일 책임 원칙
  2. OCP: 개방-폐쇄 원칙
    • 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다.
    • 인터페이스를 구현한 새로운 클래스를 하나 만들어 새로운 기능을 구현
    • 기존 코드의 변경 없이 기능 코드를 추가할 수 있어야 함
    • 문제점: 객체를 생성하고 연관 관계를 맺어주는 별도의 설정자가 필요함 = 스프링 컨테이너의 역할
  3. LSP: 리스코프 치환 원칙
  4. ISP: 인터페이스 분리 원칙
    • 특정 클라이언트를 위한 인터페이스가 여러 개의 범용 인터페이스 하나 보다 낫다
    • 인터페이스가 명확해지고 대체 가능성이 높아진다.
  5. DIP: 의존 관계 역전 원칙
    • 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다.
    • 의존성 주입인 이 원칙을 따르는 방법 중 하나
    • 구현 클래스에 의존하지 않고 인터페이스에 의존하라는 뜻
    • 구현체에 의존하게 되면 변경이 어려워지기 때문!
하지만 다형성 만으로는 OCP, DIP 원칙을 지킬 수 없다

→ 구현 객체 변경 시 클라이언트 코드도 함께 변경되기 때문
스프링 사용

  • 스프링의 지원 기술
    1. DI: 의존 관계, 의존성 주입
    2. DI 컨테이너 제공 따라서 클라이언트 코드의 변경 없이 기능 확장을 가능하게 한다!
[출처]

homebdy
homebdy 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람. 개발에 이제 막 발 담근 사람.
comments powered by Disqus