static void attackCount(StarUnit starUnit, int cnt) { for (int i = 0; i < cnt; i++) { starUnit.attack(); } }
static void Main(string[] args) { // 부모 클래스 변수 = 자식 객체 // 1) 묶어서 관리하기가 용이하니까 // 2) 매개변수로 넘길 때 부모 클래스 변수로 사용가능 StarUnit[] starArr = new StarUnit[3]; starArr[0] = new StarUnit(); starArr[1] = new Marine(); starArr[2] = new Hydra(); attackCount(starArr[0], 3); attackCount(starArr[1], 5); attackCount(starArr[2], 7); }
static void attackCount(StarUnit starUnit, int cnt) { //attack() 메서드를 호출할 때 //virtual 키워드가 없으면 //컴파일러는 클래스 타입으로 //attack() 메서드 호출을 결정한다. //(virtual이 없으면 객체와 무관하게 //클래스 타입에 의해 attack메서드가 결정된다.) //컴파일 시 결정 되므로 이것을 // '정적 바인딩'이라 부른다. for (int i = 0; i < cnt; i++) { starUnit.attack(); } }
static void Main(string[] args) { // 부모 클래스 변수 = 자식 객체 // 1) 묶어서 관리하기가 용이하니까 // 2) 매개변수로 넘길 때 부모 클래스 변수로 사용가능 //유닛들이 계속 증가할 때마다 // 해당 attackCount메서드도 추가해야 한다 // => 코드를 손댈 것이 많다 // => 100개 유닛 증가 => 100개 메서드도 증가 StarUnit starUnit = new StarUnit(); Marine marine = new Marine(); Hydra hydra = new Hydra(); attackCount(starUnit, 3); attackCount(marine, 5); attackCount(hydra, 7); }
static void Main(string[] args) { //[다향성] // 부모 클래스 변수 = 자식 객체 // 1) 묶어서 관리하기가 용이하니까 // 2) 매개변수로 넘길 때 부모 클래스 변수로 사용가능 // 3) virtual, override를 해주면 // 클래스 변수에 따른 동작이 아니라 // 객체에 따른 동작이 진행된다. //유닛들이 계속 증가할 때마다 // 해당 attackCount메서드도 추가해야 한다 // => 코드를 손댈 것이 많다 // => 100개 유닛 증가 => 100개 메서드도 증가 // => 기존 메서드마다 모두 계속 만들어야 한다 StarUnit[] starArr = new StarUnit[3]; starArr[0] = new StarUnit(); starArr[1] = new Marine(); starArr[2] = new Hydra(); attackCount(starArr[0], 3); attackCount(starArr[1], 5); attackCount(starArr[2], 7); }