본문 바로가기
Spring/개념

01 장 오브젝트와 의존관계

by clearinging 2021. 5. 5.
반응형

Spring 정의

  • Java언어 기반 Framework
  • 객체지향언어가 가진 강력한 특징을 살려내는 Framework
  • 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크
  • 순수한 객체 지향 프로그램이 가능하게 해주는 프레임 워크

관심사의 분리

  1. 정의 : 관심이 같은 것끼리는 하나의 객체 혹은 친한 객체로 모이게 하고, 관심이 다른 것끼리는 가능한 떨어뜨려 영향을 끼치지 않게 만드는 것.

중복 코드의 메소드 추출

  • 정의 : 공통의 기능을 담당하는 메소드로 뽑아 내는 것

상속을 통한 확장

  • 부모 클래스에서 공통괸 로직의 흐름 (변하지 않는 부분)을 만든다
  • 자식마다 달라지는 부분을 추가 구현

상속의 문제점

  • 다중 상속을 지원하지 않기 때문에 확장의 한계
  • 자식클래스는 부모 클래스에 강하게 종속 -> 부모 클래스가 변경 -> 자식 클래스도 모두 영향을 받는다.
  • DB connection 클래스에서는 DAO 외에 다른 클래스 적용 불가능 -> 다중 상속으로 인해서 발생

인터페이스를 통한 확장(전략 패턴)

  • 다중상속 가능
  • 구체적인 클래스의 정보를 알 필요 없음
  • 메소드 이름 변경될 걱정 하지 않아도 됨
  • 전략 패턴 : 동적으로 알고리즘을 변경할 때 사용하는 디자인 패턴

Spring IoC

  1. 용어
  • Bean: Spring이 라이플 사이클을 제어하는 객체
  • BeanFactory: Bean에 대한 제어를 담당하는 IoC 객체
  • Application Context : BeanFacotry 를 상속받은 Container로서, BeanFactory에 추가 부가 기능을 담당하고 있음
  1. IoC 정의 : Application Context가 객체의 라이플 사이클을 관리하는 기능
  2. Bean 등록 방법
// springbook/user/dao/DaoFactory
@Configuration
public class DaoFactory {
    @Bean
    public UserDao userDao() {
        return new UserDao(connectionMaker()); 
    }

    @Bean
    public ConnectionMaker connectionMaker(){
        return new NConnectionMaker();
    }
}

// main 문장...
        ApplicationContext daoContext = new AnnotationConfigApplicationContext(DaoFactory.class);
        UserDao dao = daoContext.getBean("userDao", UserDao.class); // 2nd param : for casting
// ...
  • 동작 방식: Client가 getBean()으로 요청 하면 ApplicationContext 객체 내에 빈 목록을 조회 -> 해당 이름과 동일한 bean객체를 반환
  • 장점
    • 일관서 있는 방식으로 객체를 가져올 수 있음
    • 객체를 직접 관리(생성, 삭제)를 하지 않아도 되기 때문에 유지 보수에 용의

의존관계 주입(DI)

  1. 정의 : 의존 오브젝트와 그것에 맞는 객체를 container로 부터 가져와서 넣어 주는 행위를 말한다.
  2. 구성
  • 의존 객체 : 런타임 시점에서 의존 관계를 맺는 대상
  • ex) A객체는 B객체의 Method를 사용함 -> A객체는 B객체를 의존하고 있음 -> B: 의존객체
  • DI Container: 두 객체 사이에 런타임 의존관계를 설정해주는 의존 관계주입을 주도해 주는 존재
  1. 조건
  • 런타임 시점에서 의존관계가 나타 나야한다.(interace를 통해서 의존 관계를 드러낼려고 해야함)
  • 의존 관계를 container나 factory와 같은 제 3자로 부터 알게 되어야 한다.
  • 의존 관계는 사용할 Object에 대한 참조 정보는 외부(Container)로 부터 받아와야 한다.
  1. 구현 방법
  • 생성자 사용 : 생성자 파라미터를 만들어두고 이를 통해 요구되는 Object의 reference를 내부로 넘겨줌
  • 메소드 사용
    • setter 주입
    • method 주입

DL(Depency Lookup)

  1. 정의 : 의존을 받으려는 객체가 능동적으로 의존 객체를 container로 부터 찾아서 받아 오는 것
  2. 단점 : 의존성 주입은 내가 어떤 객체를 가져오는지 신경 쓰지 않고 등록에만 신경 써주면 된다. -> 나중에 유지 보수할때 등록할 객체를 변경하면 된다. 하지만 lookup을 사용하면 가져오는 객체또한 신경 써야한다.

xml 방식과 bean등록은 여기서 다루지 않을 예정입니다.

반응형

'Spring > 개념' 카테고리의 다른 글

Spring Test Mock 사용법 및 특징  (1) 2021.10.30
Spring Boot로 MySQL replication 연동하기  (0) 2021.10.06
04 Exception  (0) 2021.05.19
03 템플릿  (0) 2021.05.08
02장 Test  (0) 2021.04.20