[sw 아카데미] 5. POJO와 DI (2)

suRan·2022년 9월 12일
0

의존성 주입(Ioc/DI)

  • 의존성 주입(DI)을 지향하는 코드란?
    • 어떤 의존성이 붙더라도 돌아가는 코드를 작성하자는 것.
    • 쉽게 확장이 가능한 구조 필요

  • 의존성이란?
    • 어떤 프로그램이나 서비스가 수행되기 위해 필요한 것
      • 보통 리소스(자원)에 의존
    • 의존성의 종류
      • 대부분 "사용(use)"
      • Ex) 사람은 돈에 의존한다.
    • 의존성에는 방향이 있다.
      • DI에서 ⭐전체는 부분에게 의존한다⭐
      • 회사 -> 직원 : 회사는 직원에게 의존한다.
      • 프로그램 -> 오라클 : 프로그램은 오라클에 의존한다.

      • UML에서의 표현 - 갈고리에 점선 (의존관계)



DI 실습

  • DI (Dependency Injection)
    • DI는 어떤 인터페이스를 하나 정의 -> 인터페이스를 상속 받아 구현클래스를 만들고 인터페이스에 의존하도록 만드는 것이다. 즉, DI는 인터페이스 기반 패턴이다.

  • 실습 코드 예제
    • 결합도를 낮춘다: order를 거쳐서 sell 호출
    • 생성자를 통한 주입: new로 인터페이스의 구현체 클래스 주입
    • 왜 이 코드는 OCP를 만족하는가?
      • 기능추가에 열림, 수정에 닫힘
      • 뭐든지 판매하는 기능이라면 seller를 추가하면 된다.
      • new로 어떤 기능(구현체)이든 Main클래스에 추가할 수 있다.
      • Order와 Sell을 분리 -> 인터페이스의 구현체인 클래스에서 구현된 메소드 호출 가능

상속의 문제점

  • 자바 자체가 단일 상속이기 때문에 부모를 상속받는 구조를 선호하지 않는다.
    • 상속의 장점: 코드 재사용
    • 상속의 문제점:
      • 클래스를 상속받았을 때 재활용이 안되는 코드가 존재
        • 전체를 다 상속받았지만 사용되지 않는 코드 존재 -> 메모리를 차지
        • 객체지향은 부분 상속이 불가능하다.
        • 다중 상속은 활용되지 않는 코드가 늘어날 가능성 높음
      • 따라서 단일 상속만 허용
  • 인터페이스는 오버헤드 없는 상속 가능
    • 코드가 없는데 무슨 상속이야? 재활용이 아닌데? -> DI 패턴 등장
    • 기능 추가에 유연한 구조가 된다. 특히 OCP를 잘지키는 코드가 된다.
    • 코드 통일성 유지
    • 코드 재사용 < 기능추가 에 방점을 두는 것으로 변화

스프링 PSA

  • DI 적용되지 않은 코드도 DI스럽게 포장
  • POJO스럽지 않은 코드도 POJO스럽게 포장

정리

  • 스프링이 지향하는 바는 모든 코드를 POJO스럽게 만드는 것이다.
  • DI가 중심 역할
  • DI가 적용되지 않는 부분은 PSA를 통해 포장
profile
개발 공부를 해라

0개의 댓글