추상클래스와 인터페이스에 대해서 알고 있냐고 누군가가 물어 본다면 알고 있다고 답을 합니다. 그런데 "왜 사용하죠?", "차이점이 무엇인가요?", "추상 클래스와 인터페이스를 사용할지 어떻게 정하나요?" 라고 질문을 하면 상대방이 이해하기 쉽게 풀어서 내용을 전달하는게 쉽지 않다는 것을 느꼇을 겁니다. 저 또한 이런한 문제에 해답을 찾고자 공부를 하기 위해 작성합니다.
//일반 클래스
public class GameObject{
...코드생략
}
//추상클래스
public abstract class GameObject {
...코드생략
}
위 코드와 같이 일반 클래스와 별 다를 것이 없습니다. class 앞에 "abstract" 예약어을 작성하면 추상클래스를 선언 할 수 있습니다.
추상클래스는 추상메소드를 선언해서 상속을 통해 자손 클래스(child class)에서 완성하도록 유도 하는 클래스입니다.
public abstract class GameObject {
//위치 좌표
private int x;
private int y;
public GameObject(int x, int y) {
this.x = x;
this.y = y;
}
//GETTER & SETTER 생략
...
}
public interface Moveable {
//코드 생략
...
}
인터페이스는 추상클래스 처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하고 클래스와 다르게 다중상속이 가능합니다.
//인터페이스 선언
public interface Moveable {
public void accelerate(int speed);
}
//인터페이스 다중 상속
public class SpaceShip implements Moveable, Exploadable {
//코드 생략
...
}
GameObject는 SpaceShip, EnemyUFO, Rock이 공통적으로 가지고 있는 위치를 선언한다. 그리고 클래스들이 가지는 추가적인 기능들은 인터페이스로 구현한다.
SpaceShip과 EnemyUFO는 고정된 Rock과 다르게 움직일 수 있기 때문에 moveable interface를 구현했다.
SpaceShip, EnemyUFO, Rock 클래스 모두 터질수 있기 때문에 Exploadable interface를 모두 구현해다.
공부 목적으로 작성하는 글 입니다. 수정해야 하는 부분들에 대해 알려주시면 감사하겠습니다.