지직전기

의존성 주입(DI)과 결합도 본문

STUDY/Spring

의존성 주입(DI)과 결합도

MSH103 2024. 3. 12. 10:39

스프링이란?
스프링 모듈이란 해당 모듈에 필요한 코드를 모아놓은 JAR 파일
각 모듈의 기능을 이해하고 프로젝트에 필요한 모듈을 적절히 선택해 적용한다.
 
경량화를 지원하기 위한 기능
의존성주입(DI)
사용할 도구를 외부에서 지정해주는 것
단위테스트 간소화의 이점은 생산성 향상, 빠른 결함 발견, 지속적인 통합 시 자동화된 단위 테스트로 향후 결함 예방이 가능함

 

의존성 주입 4가지 방법

생성자 주입 : 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 변하지 않으며 반드시 필요한 의존관계에 사용(final)

setter 주입 : 필드의 값을 변경하는 수정자 메소드에 의존 관계를 주입

필드 주입 : 필드에 바로 주입하는 방법(코드가 간결) / 그러나 DI프레임워크가 없으면 아무것도 할 수 없음(왠만하면 사용 X)

일반 메소드 주입 : 일반 메소드를 통해 주입하는 방법. 한번에 여러 필드를 주입 받을 수 있다(일반적으로 사용하지 않음)

 

강한결합과 약한결합

각 설명

예시코드

    public static void memberUser1() {
        //강한 결합 : 직접 생성
        Member m1 = new Member();
    }
    public static void memberUser2(Member m){
        Member m2 = m;
    }
}

//memberUser1 : 생성자를 직접 호출해서 객체를 만들게 되면 강한 결합
//memberUser2 : 의존할 객체를 주입받아야 하니까, 메서드의 파라미터로 받아들여 객체에 할당

의존주입을 통한 약한 결합을 사용하는 이유
다른 클래스의 변화에 더욱 안전하고 유연하게 대처할 수 있도록 프로그래밍 하기 위해서이다.
스프링 컨테이너가 웹에서 사용할 수 있는 공통기능에 대한 클래스들을 미리 만들어주고, 
우리가 필요한 곳에 의존 주입을 해주는 역할을 한다.
스프링프레임웤은 모듈 방식임
코어모듈 위에 독립적인 모듈을 올려 완성한다.


그러나, 시간이 지날수록 스프링 관련 프레임워크가 많아지면서 셋업이 어려워짐
그래서 등장한게 스프링부트(스타터팩, 셋업 쉬움 등등 특징이있음)

 

스프링프레임워크가 하는일

자체적으로 객체를 생성

생성된 객체를 관리

필요한 곳으로 객체를 주입

 

스프링이 관리하는 객체들을 빈(Bean)이라고 부름

스프링의 빈 설정은 XML을 이용하거나, 별도의 클래스를 작성해서 설정

-----------------------------

Application Context와 Bean

• 스프링이빈들을관리하는공간–ApplicationContext

• root-context.xml을 읽어서 해당클래스들을인스턴스화하여ApplicationContext 내부에서관리

 

xml파일에

<context:component-scan base-package="com.ssh"/>

추가하면 자동으로 바인딩

DAO에 @Repository / Service에 @Service / 나머지에 @Component 넣어야함

 

스프링은 필요한 객체를 스프링에서 주입해주기 때문에

개별적으로 클래스를 작성할 때, 직접 <bean> 태그를 이용하여 등록하면 원하는 곳에서

쉽게 객체를 사용할 수 있다.

 

스프링 프레임워크는 웹이나 데이터베이스와 같이 특정한 영역이 아닌 전체 어플리케이션의 구조를 설계할 때 사용된다.

 

JDBC, JPA/Hibernate, Mybatis 차이 이해

- 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성

- 영속성을 가지지 않는 데이터는 단지 메모리에만 존재하기 때문에 프로그램이 종료가 되면 모두 사라진다

파일 시스템, RDB, ORDB 활용하여 데이터를 영구적으로 저장하여 영속성을 부여한다.

 

프로그램의 아키텍처에서 데이터의 영속성을 부여해주는 계층

 

presistence Layer

프로그램의 아키텍처에서 데이터의 영속성을 부여해주는 계층

 

프레젠테이션 계층 : UI

애플리케이션 계층 : Service

비지니스 논리 계층 : Domain

데이터 접근 계층 : Persistence Layer

 

Persistence Framework

1) SQL Mapper : SQL <-매핑-> Object 필드, SQL 문장으로 직접 데이터베이스 데이터를 다룬다.

                            Mybatis, JdbcTempletes

2) ORM(Object-Realational Mapping) 객체 관계 매핑

데이터베이스 데이터 <-매핑-> Object 필드

객체를 통해 간접적으로 데이터 베이스 데이터를 다룬다.

=========================================

스프링 WEB-MVC 차이점

- Front-Controller 패턴을 이용해서 모든 흐름의 사전 / 사후 처리를 가능하도록 설계

- 어노테이션의 적극적인 활용

- HttpServletResponce