[Java] 추상클래스

2024. 5. 10. 18:04Backend/Java

728x90

🎯 추상클래스

1.1 추상클래스(abstract class)

  • 클래스가 설계도라면 추상클래스는 미완성 설계도
  • 추상메서드를 포함하고 있는 클래스
  • 일반메서드가 추상메서드를 호출할 수 있다(호출 시 필요한 건 선언부)
  • 완성된 설계도가 아니라 인스턴스 생성 불가능
  • 다른 클래스를 작성하는 데 도움을 줄 목적으로 작성.

 

1.2 추상메서드(abstract method)

  • 선언부만 있고 구현부(몸통)가 없는 메서드
  • 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 사용
  • 추상클래스를 상속받는 자손클래스에서 추상메서드의 구현부를 완성해야 한다.

 

1.3 추상클래스 예제

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) {	// 상속받은 클래스에서 추상메서드를 완성해줘야함
        System.out.println("Marine위치: "+ x + ", " + y);
    }
}

class Tank extends Unit {
    int x, y;
    void move(int x, int y) {
        System.out.println("Tank위치: "+ x + ", " + y);
    }
}

class Dropship extends Unit{
    void move(int x, int y) {
        System.out.println("Dropship위치: "+ x + ", " + y);
    }
}

public class Test {
    public static void main(String[] args) {
        Unit[] group = new Unit[3];
        group[0] = new Marine();
        group[1] = new Tank();
        group[2] = new Dropship();

        for (int i = 0; i < group.length; i++) {
            group[i].move(100, 200);
        }
    }
}

실행결과

Marine위치: 100, 200
Tank위치: 100, 200
Dropship위치: 100, 200

 

참조변수 배열을 통해서 서로 다른 종류의 인스턴스를 하나의 묶음으로 다룰 수 있음.

stop() 메서드는 선언부와 구현부 모두 공통적이지만 공중유닛과 지상유닛으로 구분한다면 이동하는 방법이 달라

move() 메서드의 내용이 각각 달라질 수 있다.

이처럼 자기의 클래스의 알맞게 구현해야 하는 경우 추상클래스와 추상메서드를 적절히 사용하면 될 것 같다.

'Backend > Java' 카테고리의 다른 글

[Java] 내부클래스  (0) 2024.05.10
[Java] 인터페이스  (0) 2024.05.10
[Java] 다형성  (0) 2024.05.10
[Java] 오버로딩  (0) 2024.05.09
[Java] 상속  (0) 2024.05.09