(1) 추상 클래스(abstract class)

 - 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다. 이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의한다. 추상 클래스는 다음과 같은 형식으로 선언한다.

abstract class 클래스이름{
	...
	abstract 반환타입 메소드이름();
    ...
}

 이러한 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로, 인스턴스를 생성할 수 없다. 즉, 추 상클래스는 먼저 상속을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩하고 나서야 자식 클래스의 인스턴스를 생성할 수 있게 된다.

 

 (2) 인터페이스(interface)

 자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가지게 되지만, 다중 상속을 할 경우에 메소드 출처의 모호성 등 여러가지 문제가 발생할 수 있어서 자바에서는 클래스를 통한 다중 상속을 지원하지 않는다. 그러나, 다중 상속의 이점을 버릴 수 없기에, 자바에서는 인터페이스를 통한 다중 상속을 지원한다. 

 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개역할까지 담당하는 일종의 추상클래스를 인터페이스라고한다. 인터페이스는 다음과 같이 선언한다.

접근제어자 interface 인터페이스이름 {
	public static final 타입 상수이름 = 값;
    ...
    public abstract 메소드이름(매개변수목록);
    ...
}

 -인터페이스의 구현

  인터페이스는 추상 클래스와 마찬가지고 자신이 직접 인스턴스를 생성할 수는 없다. 즉, 인터페이스가 포함하고 있는 추상메소드를 구현해 줄 클래스를 작성해야한다. 자바에서는 implements를 통해 인터페이스를 구현한다.

class 클래스이름 implements 인터페이스이름 { ... }

 (3) 인터페이스와 추상클래스의 비교

인터페이스
 - 구현하려는 객체 동작의 명세
 - 다중 상속 가능
 - implements를 이용하여 구현
 - 메소드 시그니처(이름, 파라미터, 리턴타입)에 대한 선언만 가능
 
추상클래스
 - 클래스를 상속받아 이용 및 확장을 위함
 - 다중 상속 불가능
 - extends를 이용하여 구현
 - 추상메소드에 대한 구현 가능

+ Recent posts