Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 자바스크립트
- DML
- BufferedReader
- select문
- 자바
- Linux
- where
- 예외처리
- 정보처리기사
- sql문
- 개발자
- github
- 프로그래밍
- StringBuilder
- select
- 클래스
- 스프링
- 프로그래머스 SQL
- MySQL
- 정보처리기사필기요약
- Java
- JavaScript
- 프로그래머스 sql 고득점 kit
- 알고리즘
- Git
- 형변환
- 메서드
- SQL
- scanner
- 백엔드
- 데이터 조회
- order by
- 웹개발
- html
- 리눅스
- 프론트엔드
- mybatis
- 백준
- 입출력
- String클래스
Archives
- Today
- Total
ToBe끝판왕
[ 개념 ] DIP ( Dependency Inversion Principle ) 본문
반응형
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를 쉽게 적용할 수 있게 도와줍니다
반응형
'■ 공부 기록 > 개념 정리' 카테고리의 다른 글
[ 개념 정리 ] 특정 View 반환 ( return 과 redirect ) (0) | 2024.12.11 |
---|---|
[ JPA ] ORM의 개념 / 장단점 (0) | 2022.06.03 |
[ JAVA ] 문자열클래스 / String / StringBuffer / StringBuilder (0) | 2022.05.24 |
[ JAVA ] 문자열분리 / StringTokenizer 클래스 / Split( ) 메서드 (0) | 2022.05.19 |
[ JAVA ] Exception 개념 / 예외처리( try-catch문 ) (0) | 2022.05.17 |
Comments