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
- 웹개발
- 깃허브
- restapi
- 코딩
- chart.js
- icon
- AJAX
- 오블완
- 티스토리챌린지
- 자바
- vscode
- Eclipse
- firestore
- 이클립스
- jQuery
- github
- java
- CSS
- SQL
- spring
- JavaScript
- 기업설명회
- bootstrap
- Firebase
- SQLD
- error
- 오류
- myBatis
- HTML
- 스파르타코딩클럽
Archives
- Today
- Total
푸들푸들
1106 [Spring] Decoupling 디커플링 본문
디커플링(decoupling)
1) 메서드와 다른 타입간의 커플링
-> 멤버변수로 변경
2) 멤버변수 타입과 다른 타입간의 커플링
-> 인터페이스 활용: implements (구현)
3) new 생성자 커플링
-> 컨테이너의 IoC(DI,DL)
- IoC: Inversion of Control, 제어의 역전
- DI: Dependency Injection, 의존성 주입
- DL: Dependency Lookup, 의존성 조회
- 컨테이너는 객체들 간의 의존성을 효과적으로 관리하고, 코드의 결합도를 낮추어 더욱 유연하고 확장 가능한 구조를 제공
객체 간의 다형성을 낮추기 위해 디커플링 사용
Chat GPT
디커플링(Decoupling)은 객체 간의 결합도를 낮추어 유연성을 높이고 코드의 유지보수성을 개선하는 방법으로, 특히 다형성을 낮추는 데에도 중요한 역할을 합니다. 객체 간의 결합도를 줄이면 객체들은 서로 독립적으로 변화할 수 있으며, 특정 객체가 변경될 때 다른 객체에 미치는 영향을 최소화할 수 있습니다.
1. 디커플링을 통해 다형성을 낮추는 방법
- 인터페이스나 추상 클래스 도입: 특정 기능을 수행하는 데 필요한 최소한의 공통 인터페이스를 정의하면, 각 객체는 이 인터페이스를 구현하는 데 필요한 코드만 작성하면 됩니다. 이렇게 하면 객체 간의 구체적인 구현 의존성을 줄일 수 있어 다형성을 간단히 유지할 수 있습니다.
- 의존성 주입 (Dependency Injection): 객체가 필요한 다른 객체를 직접 생성하지 않고 외부에서 주입받도록 하는 방식입니다. 이를 통해 객체 간의 직접적인 결합을 피하고, 각 객체의 독립성을 유지할 수 있습니다. - @Autowired
- 이벤트 기반 설계: 객체가 특정 작업을 수행할 때 다른 객체에 직접적으로 의존하지 않고, 이벤트를 통해 메시지를 전달하도록 하여 결합도를 줄입니다. 이를 통해 객체는 구체적인 호출 대상에 대해 알 필요 없이 작업을 수행할 수 있으며, 다형성을 제한하여 더욱 깔끔한 구조를 유지할 수 있습니다.
2. 디커플링의 주요 장점
- 유지보수성 향상: 객체 간의 관계가 느슨해져 각 객체의 변경이 다른 객체에 영향을 덜 미칩니다. 따라서 코드 수정 시 위험 부담이 줄어듭니다.
- 재사용성 증가: 디커플링된 객체는 다양한 환경에서 독립적으로 재사용될 수 있어 코드 재사용성을 높이는 데 기여합니다.
- 테스트 용이성: 서로 독립적인 객체는 모의 객체(Mock Object)를 사용하여 테스트하기 쉬워지므로, 각 객체를 개별적으로 테스트할 수 있습니다.
디커플링을 사용해 객체 간의 다형성을 낮추면 코드 구조가 더욱 단순해지며, 변경에 유연한 시스템을 설계할 수 있습니다.
CarService
public class PlaneService implements IVehicleService{
public void move() {
System.out.println("plane move");
}
}
PlaneService
public class PlaneService implements IVehicleService{
public void move() {
System.out.println("plane move");
}
}
IVehicleService
public interface IVehicleService {
void move();
}
TargetController
public class TargetController {
IVehicleService s;
public void main(String[] args) {
s.move();
}
}
'구디아카데미 > JAVA' 카테고리의 다른 글
[Spring] 어노테이션 (0) | 2024.11.06 |
---|---|
1106 [Sakila] SQL 쿼리 (3) | 2024.11.06 |
와이어프레임 - Figma (0) | 2024.11.06 |
1105 [Sakila] 파일 업로드 (1) | 2024.11.05 |
1105 [Sakila] Service 추가하기 (0) | 2024.11.05 |