2009년 11월 4일 수요일

자바 추상클래스와 인터페이스 (abstract class VS interface)

 

다중상속
클래스는 하나의 클래스만을 상속(extends)받을 수 있으므로 추상클래스를 상속받고자 하는 클래스는 한개의 추상클래스만이 상속가능하다. 이에 반해 클래스는 여러개의 인터페이스는 구현(implements)할 수 있으므로 하나의 클래스에 여러개의 인터페이스 구현이 가능하다는 뜻에서 다중상속이 가능하다. (엄격히 말한다면 인터페이는 상속이 아닌 구현이다.)

 

필드 정의
추상클래스에서는 클래스 멤버 변수의 정의가 가능하다.  하지만 인터페이스에서는 멤버변수의 정의를 할 수 없다. 인터페이스에서 멤버변수 선언이 가능하다고 생각해보자. 하나의 클래스에서는 여러 개의 인터페이스를 구현해야하는데 서로 다른 인터페이스에 같은 이름의 멤버변수가 있다면 인터페이스들을 구현한 클래스에서는 그 멤버변수가 어느곳에서 선언한 것인지 구별할 수 있겠는가?! 구별이 안된다.

 

메소드 구현
추상 클래스는 구현메소드와 추상메소드 모두 가능하지만, 인터페이스에서는 추상메소드만이 가능하다. 추상 클래스에서는 메소드에 abstract 키워드를 사용하여 추상 메소드를 표시하고, 인터페이스는 abstract 키워드가 없이 추상메소드를 만든다. 추상 메소드는 접근제한자, 리턴타입,메소드명,전달인자 리스트 로만 구성이 되며, 메소드의 몸체 즉 메소드의 내용을 정의하지 않는다. 추상 메소드를 가지고 있는 추상클래스나 인터페이스를 상속받거나 구현하는 하위 클래스는 상위에 있는 추상 메소드를 모두 구현해야만 한다.

 

상수 정의
상수란 클래스 멤버 변수에 final 키워드를 붙인 것으로 변하지 않는 값을 나타낸다. 하지만 인터페이스에서는 final 키워드를 붙이지 않아도 상수가 된다. 인터페이스에서는 클래스 멤버변수를 가질 수는 없지만 클래스 멤버 상수는 가질 수 있다.

 

 

출처 : 자바 추상클래스와 인터페이스 (abstract class VS interface)

댓글 없음:

댓글 쓰기