10-Abstract&Interface



추상

서로 다른 클래스를 구할 때 공통되는 특성의 메소드 스펙을 만들어주는 기술이다. 즉, 객체를 직접 생성할 수 있는 클래스들의 공통적인 특성을 추출해 선언한 클래스가 추상 클래스이다.

  • abstrcat 클래스: abstract 메소드가 하나 이상 포함되고 있는 클래스 앞에 붙인다. 객체 생성은 금지, 상속이 의무화이다.

  • abstract 메소드: 선언부만 있고 구현부는 없는 메소드 앞에 붙인다. 그리고 상속부는 overriding이 의무적이다.

abstract class 도형 {
    abstract void 면적(); // 구현하지 않은 상태 { }x
    abstract 둘레();
}

@override
class  extends 도형{ 
void 면적(){반지름 * 반지름 * 3.14;}
void 둘레(){반지름 * 2 * 3.14;}
}

용도

1) 실체 클래스들의 공통된 필드와 메소드 이름을 통일

2) 실체 클래스를 작성할 때의 시간 절약



인터페이스

자바에서 인터페이스란 객체의 사용 방법을 정의한 타입이다. 인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할로, 일종의 스케치 역할을 한다.

  • 인터페이스 선언
[modifier] interface 인터페이스명 { ... }
  • 인터페이스 특징
    • 자바의 클래스는 단일 상속만이 가능한 반면, 인터페이스는 다중 상속이 가능하다.
      • 인터페이스는 abstract 메소드만 갖기 때문에 다중상속하여 호출하여도 override가 의무화되어 객체가 충돌할 일이 없다. 즉, 애초에 객체를 갖지 않기 때문에 충돌의 가능성이 없다.
    • public abstract이 자동 선언된 메소드만 가진다.
    • 인터페이스타입으로 객체 생성이 불가능하다. (상속 의무)
    • 생성자가 없다. (인터페이스는 정의가 불가능. 따라서 객체 생성이 불가능)
    • 변수는 가능하나, public final static 자동 선언 변수만 갖는다.
  • 인터페이스 구현
public class 구현클래스명 implements 인터페이스명 {
  //인터페이스에 선언된 추상 메소드의 실체 메소드 선언(override)
}


상속이 같은 종류의 하위클래스를 만드는 것이라면 인터페이스는 사용 방법이 동일한 클래스를 만드는 기술이라는 개념적 차이가 있다. 그리고 둘 다 다형성을 구현한다.

인터페이스도 마찬가지로 자동타입변환이 된다.