본문 바로가기
  • soobinhand의 기술 블로그
Computer Science/JAVA

[JAVA] 추상 클래스

by soobinhand 2022. 2. 21.
728x90

클래스 : 완성된 설계도

추상 클래스 : 미완성 설계도 (미완성 메소드를 포함하고 있다는 뜻)

 

추상 클래스로는 인스턴스 생성이 불가능하다. 상속을 통해서 자손 클래스에 의해서만 완성될 수 있다.

추상 클래스 자체로는 클래스의 역할을 못한다. 하지만 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상 클래스로서 중요한 의미를 갖는다. 어느 정도 틀을 갖추게 해주기 때문이다.

 

키워드 abstract만 붙이면 된다. 추상 클래스는 추상 메소드를 포함하고 있다는 것 말고는 클래스와 다른게 없다.

 

추상 메소드는 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이다.

메서드를 미완성 상태로 남겨 놓는 이유는 메소드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만 작성하고, 주석을 붙여 어떤 기능을 할 것인지 알려주고, 실제 내용은 상속받는 클래스에서 구현하도록 비워 두는 것이다. 

추상 메소드 역시 메소드 앞에 abstract를 붙여준다. 

abstract int add(); 이런식인 것이다.

 

추상 클래스로부터 상속받는 클래스는 오버라이딩을 통해 추상 클래스의 추상 메소드를 모두 구현해줘야 한다. 

abstract을 굳이 붙이는 이유는 자손 클래스에서 추상 메소드를 반드시 구현하도록 강제하기 위해서이다. 

 

class Marine{
	int x, y;
    void move(int x, int y)
    void stop()
    void stimpack()
}

class Tank{
	int x, y;
    void move(int x, int y)
    void stop();
    void changeMode()
}

class Dropship{
	int x, y;
    void move(int x, int y)
    void stop()
    void load()
    void unload()
}

이런식으로 설계 된다면 공통적인 부분이 많다. 이런 것들을 추상 클래스로 구현해보자.

 

abstract class Unit{
	int x, y;
    void move(int x, int y)
    void stop()
}

class Marine extends Unit{
	void stimpack()
}

class Tank extends Unit{
	void changeMode()
}

class Dropship{
	void load()
    void unload()
}

훨씬 보기 좋아졌다. 

 

Unit[] group = new Unit[4];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();
group[3] = new Marine();

다형성...까지.

728x90

댓글