최대 1 분 소요

로봇 로봇 몸, 다리, 발 각각 부위들이 객체 팔이라는 객체를 주입 “공격하라” 라는 명령을 함 총을 가진 팔, 칼을 가진 팔 공격하라는 메소드 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;
    }
}

댓글남기기