7-33~34 추상클래스의 작성

oyeon·2020년 12월 31일
0

(완)객체지향 개념

목록 보기
32/37
  • 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아서 추상 클래스를 만든다.

구현

// abstract이기 때문에 각 Unit에 move 메서드를 구현하도록 하는 강제 효과를 준다.
// 공통 부분 추출
abstract class Unit {
    int x, y;
    abstract void move(int x, int y);
    void stop() { /* 현재 위치에 정지 */ }
}
// 코드의 중복이 제거되어 간결해짐
class Marine extends Unit {
    void move(int x, int y) { /* 지정된 위치로 이동 */ }
    void stimPack() { /* 생략 */ }
}
class Tank extends Unit {
    void move(int x, int y) { /* 지정된 위치로 이동 */ }
    void changeMode() { /* 생략 */ }
}
class Dropship extends Unit {
    void move(int x, int y) { /* 지정된 위치로 이동 */ }
    void load() { /* 생략 */ }
    void unload() { /* 생략 */ }
}

사용

// 다형성 장점2(여러 종류의 객체를 배열로 다루기)
Unit[] group = new Unit[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();
// 아래와 같이 한 번에 선언 가능
// Unit[] group = { new Marine(), new Tank(), new Dropship() };

// 이동하는 방식이 다른 Marine, Tank, Dropship을 한 번에 이동시킴
for(int i = 0; i < group.length; i++)
    group[i].move(100, 200);	// 실제 구현된 메서드 호출!
  • 추상화된 코드는 구체화된 코드보다 유연하다. 변경에 유리.
  • 아래 예제에서 추상적으로 작성한 경우 OS의 설정을 보고 Calendar를 결정해서 값을 준다. 변경이 필요한 경우 getInstance 메서드의 한 부분만 수정하면 된다. 반면 구체적인 코드는 메서드 호출한 부분까지 직접 변경해야 한다.
GregorianCalendar cal = new GregorianCalendar();	// 구체적
Calendar cal = Calendar.getInstance();			// 추상적
profile
Enjoy to study

0개의 댓글