Spring과 객체지향

최준호·2021년 7월 6일
0

Spring

목록 보기
1/47

Spring의 역사

  • spring은 최초 java의 web application 로직을 가지고 있는 server application인 EJB(Enterprise JavaBeans) 사용의 어려움때문에 EJB를 사용하지 않고 web project를 더 쉽게 만들 수 있도록 Rod Johnson이 3만줄 정도의 코드소스와 책으로 선보임. 그 후 Juergen Hoeller와 Yann Caroff가 Rod Johnson에게 오픈소스 프로젝트를 제안하여 지금의 Spring으로 개발을 지속해오는 중

Spring이란

  • spring은 spring의 생태계를 의미할 수 있다.
    • spring framework
    • spring framework이란 핵심 > DI, AOP, container 웹기술 > MVC, WebFlux 데이터 > transaction, jdbc, orm, xml
    • spring boot
    • spring 생태계의 project들을 편리하게 사용할 수 있도록 지원
    • spring data
    • spring security
    • spring batch
    • spring cloud ... 등

Spring의 개념, 컨셉

  • java 기반의 framework
  • 객체 지향 언어인 java가 가진 특성을 살려내는 framework
  • 좋은 객체 지향 application을 개발할 수 있게 도와주는 framework
  • 객체 지향의 특징
    1. 추상화
    2. 캡슐화
    3. 상속
    4. 다형성
  • 객체 지향의 특징 중에서도 다형성의 특징을 극대화하여 사용하는 framework
    • 다형성이란
      1. 여러가지 형태를 가질 수 있는 특징
      2. spring에서의 다형성은 client에 영향을 주지 않고 web 기능을 제공하고 server의 구현 기능을 유연하게 변경이 가능함을 의미
      3. java의 다형성을 활용하여 spring은 역할과 구현으로 분리하여 생각
        • 역할 : 인터페이스
        • 구현 : 인터페이스를 구현한 클래스, 구현 객체
      4. spring에서의 다형성은 인터페이스를 활용한것이라 생각
  • Spring에서 제공하는 IoC(역전제어), DI(의존관계 주입)은 다형성을 활용해서 역할과 구현을 편리하게 사용할 수 있도록 지원

Spring에서 지키고 싶어하는 SOLID

  • SOLID란
    • clean code 저자인 Robert Cecil Martin의 좋은 객체 지향 설계를 위한 5가지 원칙
      1. SRP(Single responsibility principle) 단일 책임 원칙
      2. OCP(open/closed principle) 개방/폐쇄 원칙
      3. LSP(Liskov substitution principle) 리스코프 치환 원칙
      4. ISP(Interface segregation principle) 인터페이스 분리 원칙
      5. DIP(Dependency inversion principle) 의존관계 역전 원칙
    • SRP (단일 책임 원칙)
      • 하나의 class는 하나의 책임(responsibility)을 가져야한다.
      • 중요 기준은 변경으로 생각할 수 있다. class에 변경이 있을 때 그 변경으로 인한 파급효과가 적다면 단일 책임 원칙을 잘 따른것
      • 자동차 project에서 engine class는 engine에 대한 책임만 가져야하지 다른 기능과 부품들에 대한 책임을 지어서는 안된다.
    • OCP (개방/폐쇄 원칙)
      • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있어야 한다.
      • spring에서 OCP와 다형성을 모두 지키기 위해 DI와 IOC를 지원
    • LSP (리스코프 치환 원칙)
      • 프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입 인스턴스로 바꿀 수 있어야한다.
      • 자동차 project에서 excel이란 기능은 무조건 앞으로만 가야함. 뒤로 간다는 것은 LSP 위반
    • ISP (인터페이스 분리 원칙)
      • 인터페이스 여러개가 범용 인터페이스 하나보다 낫기 때문에 인터페이스를 기능에 맞게 적당히 쪼개서 사용하여야한다.
      • server의 기능을 수정했을 때 client에 영향이 가지 않도록 설계
    • DIP (의존 관계 역전 원칙)
      • 프로그래머는 추상화에 의존하여야하며 구체화에 의존하면 안된다.
      • 자동차 project에서 engine class에 engine은 engine에 대한 역할에 대한 기능만 알고 있어야지 범퍼나 네이게이션의 기능들을 의존하게해서는 안된다.
        • 여기서 의존이란 class에서 해당 코드를 불러와서 사용할 수 있다면 모두 의존 관계가 된다.
  • Spring은 객체지향 원칙과 특성을 지키고 극대화를 위해 지원해주는 framework
  • 하지만 위 5가지 원칙 중 OCP와 DIP를 지키가 어렵기 때문에 spring에서 지원
    • DI
    • DI Container
    • client의 코드 변경 없이 기능을 확장 가능하게 해줌
    • 부품을 교체하듯이 개발하는 환경을 만들어줌

출처 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글