[sw 아카데미] 4. POJO와 DI (1)

suRan·2022년 8월 28일
0

객체 지향 기술의 발전

OOP -> 컴포넌트 -> 분산 컴포넌트 (스프링) ->
서비스 기반 아키텍처 -> 마이크로 서비스 아키텍처 (MSA) ->
스프링 MSA

OOP -> MVC 아키텍쳐 -> DI


객체지향

  • 전체코드 3만줄이 클래스 하나인 경우? 객체지향일까? 아닐까?
    • 캡슐화 / 재활용 조건만 충족하면 아닐 이유는 없었다. 그러나 객체지향 정의의 변화

디자인패턴 (Best Practice:최선책) -> 어떻게 쪼갤 것인가?

  1. MVC (Model-View-Contoller) 패턴
    • 모바일/PC 동시대응 가능
      ✔ 화면구성에 이점
      ✔ 내용이 같은 모바일과 pc사이트 -> MVC 패턴 사용!
      ✔ View를 하나 더 만들면 된다!
    • MVVM(Model-View-ViewModel) - 스프링은 여기에 정착
  2. DI (Dependency Injection) 패턴
    • 전략 패턴(디자인 패턴)
    • 인터페이스 기반 패턴

제어의 역전 (IoC)

  • 메인 코드를 프레임 워크의 가이드에 따라 짠다.
  • Inversion of Control
  • 프레임워크/WAS/미들웨어 등이 주로 사용
  • 제어의 권한을 넘기고 필요한 기능(메소드/함수)만 구현하는 형태
  • 프레임워크는 정해진 (콜백) 메소드를 호출하면 사용자의 코드가 호출되는 구조

UML 기본

  • 갈고리
    • 점선 : 의존성
  • 삼각형 - 상속
    • 실선 : 클래스
    • 점선 : 인터페이스

의존성 주입(DI)

  • Dependency Injection
  • 디자인 패턴의 전략패턴(Strategy Pattern)
  • 필요한 의존성 오브젝트를 정해진 시점에 공급
  • 의존성이 없는(최소화한) 프로그램을 작성하라
  • 프로그램 실행단계에서 결정
    • Ex) MySQL / Oracle 어떤 DB도 사용할 수 있도록 프로그램 작성
      프로그램 실행단계에서 MySql을 주입하면 MySql이 실행된다.

POJO (Plain Old Java Object)

회사에서 객체지향이란 무엇인가 묻는다면? -> POJO

객체지향기술의 심화(POJO)

  • 자바객체지향의 특징 및 정신을 요약
    • 클래스/인터페이스로 구현할 수 있는 방법을 모두 제공
      • 클래스 아닌 인터페이스를 사용 선호
    • 특정한 기술/규약에 의존 배격
  • POJO의 열렬한 지지자
    • Spring Framwork / My Batis

객체지향의 정의

  • 상속/캡슐화
  • POJO(궁극적인 객체지향)
    • 특정 클래스를 상속받아야 함(X)
      • 자바는 단일상속이라 제약 발생 (파이썬은 다중상속)
      • Ex) Thread 생성 -> [ Thread 클래스 상속 | Runnable 인터페이스 상속 ] 선택
    • 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 재활용될 수 있는 방식으로
  • 스프링 삼각형 = DI + AOP + PSA
    출처 : https://jinpyo900.tistory.com/55



객체지향 분석설계 (OOAD)

  • 객체지향(OO) 기술 = OOA + OOD + OOP

  • 객체지향 분석설계의 5원칙(SOLID)

    • SRP : 단일책임 원칙
    • OCP : 개방폐쇄 원칙
      • 기능 추가에는 열려있고, 수정에는 닫혀 있어야 한다.
    • LRP
      • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
    • ISP: 인터페이스 분리 원칙 (Interface segregation principle)
      • "특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다."
    • DIP : 의존관계 역전 원칙 (Dependency inversion principle)
      • 프로그래머는 추상화에 의존해야한다. 구체화에 의존하면 안된다

    출처 : https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84)

어떤 코드가 SOLID 스러운가? -> DI + AOP + PSA로 짰으면 SOLID 스러운 코드이다.

profile
개발 공부를 해라

0개의 댓글