본문 바로가기
JAVA

추상클래스와 인터페이스

qbang 2018. 5. 15.

01 추상클래스

1-1 추상클래스의 개념

일반 클래스는 new 연산자를 사용해 인스턴스를 생성할 수 있지만, 추상클래스는 인스턴스를 생성할 수 없고 오직 상속을 통하여 완성된 자식 클래스로 구현해서 인스턴스를 생성할 수 있음.

메서드 본체를 완성하지 못한 메서드를 추상메서드라고 한다. 추상메서드는 무엇을 할지는 선언하지만, 어떻게 할지는 정의하지 않는다.


1-2 추상클래스의 선언

추상클래스도 필드와 메서드, 생성자를 포함할 수 있음, 추상클래스는 다음과 같이 abstract 키워드로 선언하고 구현 클래스처럼 public으로 지정할 수 있다.

  abstract class 클래스이름{

 // 필드

 // 생성자

 // 메서드

 }

추상메서드도 abstract 키워드를 붙여 선언하는데, 실체가 없기 때문에 본체 없이 세미콜론으로 끝나고 public이나 protected로 지정할 수 있다.

 abstract 반환타입 메서드이름(); 



02 인터페이스 기본

2-1 개요

일부메서드를 추상화한 추상 클래스와 달리 인터페이스는 모든 멤버를 추상화하므로 추상클래스의 극단적인 예라고 할 수 있다.


2-2 디폴트 메서드와 정적 메서드

디폴트 메서드를 이용하면 기존에 사용하던 인터페이스의 구현 클래스에 영향을 주지 않고도 인터페이스를 변경할 수 있다.

 default 반환타입 디폴트메서드이름(){

 // 본체를 구성하는 코드

 } 

디폴트 메서드는 오버라이딩될 수 있지만, 정적 메서드는 오버라이딩될 수 없음



2-3 인터페이스의 구조

인터페이스는 무엇을 할지 명시하지만, 어떻게 구현할지는 명시하지않는다. 인스턴스 변수를 선언할 수 없고, 객체도 생성할 수 없기 때문에 생성자가 없다.

 interface 인터페이스이름 {

 // 상수 필드

 // 추상 메서드

 // 디폴트 메서드 

 // 정적 메서드

인터페이스 멤버에 명시된 public, static, final, abstract 키워드는 생략할 수 있음


2-4 인터페이스의 상속

인터페이스도 extends 키워드를 사용해 자식 인터페이스를 정의할 수 있다.

 // 인터페이스를 상속하려면 extends 키워드를 사용한다

 interface 자식인터페이스 extends 부모인터페이스 {

 }

 // 인터페이스를 구현하려면 implements 키워드를 사용한다.

 class 자식클래스 implements 부모인터페이스 {

 }

다수의 인터페이스를 상속해 새로운 자식 인터페이스나 구현클래스를 작성할 수 있으나, 여러 개의 클래스를 상속할 순 없다.



03 인터페이스 응용

3-1 인터페이스와 상수

상수를 인터페이스에 정의하면 여려종류의 클래스에서 사용할 수 있어 편리하다.

 

3-2 Comparable 인터페이스

Comparable 인터페이스는 객체를 비교하기 위한 용도로 사용된다.

  public interface Comparable {

      int compareTo(Object other);

 }



댓글