Di와 IoC 개념과 차이
로봇 로봇 몸, 다리, 발 각각 부위들이 객체 팔이라는 객체를 주입 “공격하라” 라는 명령을 함 총을 가진 팔, 칼을 가진 팔 공격하라는 메소드 but 다른 결과(총쏘기, 칼로베기)
IoC 컨테이너에 @Componant가 되어있어야함(결합대상과 결합 요소 전부) 꺼내쓰기 위해서는 @autowrier을 써야함 생성 순서는 의존도가 없는것 부터
피자집 - 피자집 요리사가 여러명 / 화덕은 하나 요리사마다 레시피가 여러개 요리사 하나하나가 객체 화덕 = 요리한다 라는 동작
관련 데이터를 묶는거 = 응집도를 높힌다. 관련없는것들끼리 있는거 = 응집도가 낮음
객체지향프로그램 = 응집도를 높히고 결합도를 낮춘다.
public interface 무기 {
void 공격();
}
public interface 방패 {
void 방어();
}
@Component
public class 총 implements 무기{
@Override // ctrl + i
public void 공격() {
System.out.println("총을 발사합니다.");
}
}
@Component
public class 칼 implements 무기{
@Override
public void 공격() {
System.out.println("칼을 휘두릅니다.");
}
}
@Component
public class 물리공격방패 implements 방패{
@Override
public void 방어() {
System.out.println("물리공격을 막습니다.");
}
}
@Component
public class 마법공격방패 implements 방패{
@Override
public void 방어() {
System.out.println("마법공격을 막습니다.");
}
}
@Controller
public class 캐릭터 {
@Autowired
@Qualifier("총")
private 무기 weapon;
@Autowired
@Qualifier("물리공격방패")
private 방패 shield;
@ResponseBody
@GetMapping("/maple/attack")
public Object mapleAttack() {
weapon.공격();
return null;
}
@ResponseBody
@GetMapping("/maple/defence")
public Object mapleDefence() {
shield.방어();
return null;
}
}
댓글남기기