Java 문법 7. 추상클래스(abstract class) 와 인터페이스(interface)

작성일     업데이트:

카테고리:

태그:

추상클래스(Abstract class)

1. 추상 클래스 특징

public abstract class 클래스이름 {
// 필드, 생성자, 메소드 작성
// 미완성된 추상 메소드 선언
}
  • 미완성된 클래스로 반드시 abstract 키워드를 붙여준다
  • 선언되어있지만 구현되지 않은, 미완성의 메소드(추상 메소드)를 포함하고 있는 클래스이다
    => 추상 메소드를 포함하고 있다면 반드시 추상 클래스가 된다
    => 하지만 추상 메소드가 없어도 abstract 클래스로 선언은 가능하다
  • 클래스 내에 일반 변수, 메소드를 포함 할 수 있다
  • 부모 클래스로 이용 가능하다(상속)
  • 클래스로서의 자체적인 객체 생성이 불가하다
    => 반드시 상속하여 객체를 생성해야 한다
  • 객체생성은 안되지만 참조형 변수 타입으로는 사용 가능하다

  • 사용 이유

    • 일관된 인터페이스 제공
    • 꼭 필요한 기능 강제화(공통적이나 자식클래스에서 특수화 되는 기능)
    • 새 클래스 작성을 위한 템플릿으로 사용되며 상속받은 클래스들의 규칙을 정의할 수 있다


2. 추상 (abstract) 메소드

// 접근제한자 abstract 리턴타입 함수이름 ( );
    public abstract void method();
  • 추상 메소드는 추상 클래스와 같이 abstract 키워드를 붙여준다
  • 메소드의 몸체(구현부) { } 를 가지지 않는다
  • 상속 시 반드시 구현해야하는, 오버라이딩이 강제화 되는 메소드이다
  • 추상 메소드를 제공하는 이유는 추상 클래스를 상속받아 만들어지는 후손 클래스들이 메소드를 처음 선언과 동일하게 재정의해서 사용하라는 의미이다


3. 추상 클래스 상속

public class 클래스명 extends 추상클래스명 { }
  • 일반 클래스의 상속과 같이 추상클래스도 extends를 사용하여 상속받는다
  • 자식은 여러명일 수 있으나 부모는 단 하나만 가능하므로 extends로 여러개의 추상클래스를 상속받을 수는 없다


인터페이스 (interface)

1. 인터페이스란

  • 추상 메소드로만 구성된 추상 클래스를 인터페이스라고 한다
  • 추상 클래스보다 추상화 정도를 높여 일반 메소드, 멤버 변수를 가질 수 없다
    => 상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체이다
  • 추가로 상수(public static final 필드)만 멤버로 가진다
    => 여러 클래스에서 사용되는 동일한 상수일 경우 인터페이스에 정의 한 후 해당 상수를 공유하게 할 수 있다
  • 다중 상속에 제한이 없다
    => 여러 인터페이스들을 다중으로 상속받을 수 있다
  • 추상 클래스이기때문에 자체적으로 객체생성은 안되지만 참조형 변수로 사용은 가능하다
  • 공통 기능상의 일관성을 제공하고 공동 작업을 위한 인터페이스를 제공한다
  • 상위 타입 역할로 다형성을 지원하여 연결한다
  • 일반 클래스 상속을 이용해서 자식 클래스들의 관계를 맺는 것보다 간편하게 관계를 맺을 수 있다
  • 상속 시 인터페이스 내에 정의된 모든 추상메소드를 구현해야 한다


2. 인터페이스 사용방법

[ 인터페이스 선언 ]

[접근제한자] interface 인터페이스명 {
// 상수도 멤버로 포함할 수 있음
public static final 자료형 변수명 = 초기값;
// 추상 메소드만 선언 가능
[public abstract] 반환자료형 메소드명([자료형 매개변수]);
// public abstract가 생략되기 때문에
// 오버라이딩 시 반드시 public 표기해야 함
}
  • 인터페이스 내부에는 모든 메소드가 추상 메소드이므로 public abstract 키워드를 생략 가능하다
    (하지만 혼동할 수 있으므로 굳이 생략하지 않고 명시해두는 곳도 있다)
  • 모든 인터페이스의 메소드는 묵시적으로 public 이다
  • 변수는 묵시적으로 public static final이다 (상수만 멤버로 가질 수 있기 때문)


[ 인터페이스 상속 ]

  • 인터페이스의 인터페이스 상속

    public interface 인터페이스 extends 인터페이스1, 인터페이스2,  {
    // 상수 또는 추상 메소드
    }
    
    • 클래스의 상속은 단일 상속만 가능하지만 인터페이스는 다중 상속이 가능하다
    • 추상 메소드에 대한 구현(implement) 과 재정의(Overriding)는 인터페이스를 상속받은 후손 클래스에서 구현(Implement)해야 한다
  • 클래스의 인터페이스 상속

    public class 클래스 implements 인터페이스1, 인터페이스2,  {
    // 일반 클래스 정의
    // 인터페이스 추상 메소드 구현
    }
    
    • 클래스간의 상속과는 다르게 implements 를 사용하여 상속 받는다
    • 다중 상속이 가능하다
    • 상속받은 후손 클래스는 반드시 인터페이스의 추상 메소드를 구현해야 한다


3. 추상클래스와 인터페이스 비교

구분 추상 클래스 인터페이스
상속 단일 상속 다중 상속
구현 extends 사용 implements 사용
추상 메소드 abstract 메소드 0개 이상 모든 메소드는 abstract
abstract 명시적 사용 묵시적으로 abstract
객체 객체 생성 불가 객체 생성 불가
용도 참조 타입 참조 타입

댓글남기기