ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring[1] spring과 객체지향
    개인 공부/spring 2021. 5. 9. 10:34
    728x90
    반응형

    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

    728x90
    반응형

    '개인 공부 > spring' 카테고리의 다른 글

    Spring[3] Spring Container와 Spring bean  (0) 2021.05.15
    spring[2] Spring을 사용하지 않은 Java Web Project  (0) 2021.05.14
    MVC 패턴  (0) 2021.05.10
    Web 이란  (0) 2021.05.06
    HTTP  (0) 2021.04.28
Designed by Juno.