추상 클래스
-
추상클래스란 말 그대로 추상적으로 밖에 그려지지 않은 클래스라고 한다. 즉, 클래스가 전체적인 구성을 다 가지지 못한 채 설계만 되어있는 클래스이다. 미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스를 생성할 수는 없다.
-
추상클래스는 상속(Extends)을 통해서 자식 클래스에 의해 완성이 된다. 그래서 추상클래스 자체로는 제 기능을 다하지는 못하지만 새로운 기능을 정의하는데 있어서 바탕(틀)이 될 수 있다.
// 추상 클래스는 class 선언부 앞에 abstract를 적어준다.
abstract class 클래스명 {
...
abstract 메소드명(); // 추상 메소드
}
- 추상 메소드가 하나 이상 포함되면 반드시 추상클래스로 선언이 되어야 한다.
- 추상클래스에서 추상 메소드가 아닌 일반 메소드를 포함시킬 수 있다.
- 추상클래스를 상속하는 자식 클래스에서 부모가 가진 메소드를 모두 오버라이딩 해야 한다.
- 추상 메소드는 몸체가 없고 선언부만 존재한다.
인터페이스(interface) 클래스
- 인터페이스는 추상클래스처럼 추상 메소드를 갖지만 추상 클래스보다 추상화 정도가 높아서 추상 클래스와 달리 몸통을 갖춘 일반 메소드 또는 멤버 변수를 구성원으로 가질 수 없다. 오직 추상 메소드와 상수만을 멤버로 가질 수 있으므로 그 외의 다른 어떠한 요소도 허용하지 않는다.
interface 클래스명{
public static final 변수타입 변수명 = 값;
public abstract 메소드명(매개변수);
}
- 모든 멤버변수는 public static final 이어야하며 이를 생략할 수 있다.
- 모든 메소드는 public abstract 이어야 하며 이를 생략할 수 있다.
- 인터페이스는 인터페이스로부터만 상속(Extends)받을 수 있으며 클래스와 달리 다중 상속이 가능하다.
ex) interface Fightable extends Movable, Attackable{}
여기서 Movable과 Attackable은 모두 interface 클래스다.
인터페이스 클래스의 장점
- 개발 시간을 단축시킬 수 있다
- 메소드를 호출하는 쪽에서는 메소드의 내용에 관계없이 선언부만 알면 되기 때문이다.
- 표준화가 가능하다.
- 프로젝트에 사용되는 기본 틀을 인터페이스로 작성한 다음, 개발자들에게 인터페이스를 구현하여 프로그램을 작성하도록 함으로써 보다 일관되고 정형화된 프로그램의 개발이 가능하다.
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
- 서로 상속관계에 있지도 않고 같은 조상 클래스를 가지고 있지 않은 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
- 인터페이스를 이용하면 클래스의 선언과 구현을 분리시킬 수 있기 때문에 실제 구현에 독립적인 프로그램을 작성하는 것이 가능하다.
- 클래스와 클래스 간의 직접적인 관계를 인터페이스를 통해서 간접적인 관계로 변경하면 한 클래스의 변경이 관련된 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.