■ Programming Skills/개념 정리
[ 개념 ] 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를 쉽게 적용할 수 있게 도와줍니다
반응형