ToBe끝판왕

[ 개념 ] DIP ( Dependency Inversion Principle ) 본문

■ 공부 기록/개념 정리

[ 개념 ] DIP ( Dependency Inversion Principle )

업그레이드중 2024. 10. 29. 18:28
반응형

 

 


 

 

DIP ( = Dependency inversion Principle, 의존성 역전 원칙 )

 

 

 

•  DIP 의 정의

-  상위 모듈이 하위 모듈에 의존하지 않고, 둘다 추상화 ( 인터페이스 or 추상클래스 ) 에 의존해야 한다.

 

 

•  DIP 의 목적

-  DIP를 적용하여 코드 변경의 영향 범위를 최소화하여 유연성이 향상된다.

-  새로운 기능의 추가 or 기존 기능 변경 시, 시스템의 다른 부분에 미치는 영향을 최소화 하여 확장성이 좋습니다.

-  모듈간의 의존성을 줄여 시스템의 유지보수성을 높입니다.

 

 

•  DIP를 적용한 Java 소스 예시

package hello.blog.DipEx;

public interface Device {

    void input();
}

 

package hello.blog.DipEx;

public class Computer implements Device {

    public void input() {
        System.out.println("컴퓨터입니다.");
    }
}

 

package hello.blog.DipEx;

public class DipMain {

    private Device device;

    // 생성자 의존성 주입
    public DipMain(Device device) {
        this.device = device;
    }
}

 

 

 


 

 

•  Spring Framework 를 사용한 DIP

-  Spring Framework 에서는 DIP가 자동으로 적용되도록 돕는DI ( Dependency Injection ) 기능이 제공된다.

-  스프링 컨테이너가 객체의 의존성을 주입해 주므로, 의존성을 외부에서 관리하게 된다.

 

-  소스 예시

package hello.blog.member;

public interface MemberService {

	public List<BbsDto> selectBoardList() throws Exception;
}

 

package hello.blog.member;

import com.spring.crud.api.dto.BbsDto;
import com.spring.crud.api.model.BbsDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public interface MemberServiceImpl implements MemberService {

	@Autowired
    private BbsDao bbsDao;

	@Override
    public List<BbsDto> selectBoardList() throws Exception {

        return bbsDao.selectBoardList();
    }

}

 

 

※  위 소스에서 어노테이션

-  @Service  :  해당 클래스를 서비스 계층의 빈으로 스프링 컨테이너에 등록

-  @Autowired  :  스프링이 자동으로 의존성 주입하도록 도와주는 어노테이션

( 클래스가 특정 인터페이스에 의존하게 할때, 해당 인터페이스의 구현체를 생성자가 아닌 외부에서 주입 )

 

 

 

▶  DIP는 변경에 유연하고 결합도가 낮은 구조를 만들기 위한 원칙이며, 스프링 프레임워크의 DI는 DIP를 쉽게 적용할 수 있게 도와줍니다

반응형
Comments