추상클래스와 인터페이스

서현서현·2023년 8월 6일
0

JAVA

목록 보기
20/27

추상클래스와 인터페이스

추상클래스

  • 이름에서 알 수 있듯이 class임! abstract를 사용한 클래스이다.
  • 구현부가 없는 미완성 메소드(추상메소드)를 포함한다. 이 특징을 제외하고는 일반클래스와 유사하다(생성자가 있으며, 멤버변수와 일반메소드를 가질 수 있다. 그러나 new 연산자는 사용 불가능하다)
  • 미완성 메소드는 상속을 통해 자손클래스에서 완성된다
abstract class 이동수단 {
	private boolean 시동 = false;
    
    void 시동걸기() {
    	this.시동 = true;
    }
    
    abstract void 가속하기();
    abstract void 감속하기();
}


classextends 이동수단 {

	public(boolean 시동) {
		super(시동);
	}

	@Override
	void 가속하기() {
		System.out.println("액셀 밟기");
	}

	@Override
	void 감속하기() {
		System.out.println("브레이크 밟기");
	}

}

인터페이스

  • 오직 추상메소드와 상수만을 멤버로 가질 수 있다. 즉 모든 멤버변수는 public static final이고, 모든 메소드는 public abstract이다
    (단, static 메소드와 default 메소드는 예외이다)
interface 입을 움직일 수 있는 {
	int HEIGHT = 100; //public static final int HEIGHT
    void 먹기(); //public static void 먹기()
    
    static void 숨쉬기() { System.out.println("후하"); }
    default void 물기() { System.out.println("앙"); }
}

classextends 이동수단 implements 입을움직일수있는{
	@Override
	public void 먹기() {
		System.out.println("냠냠");
	}
}

인터페이스를 왜 사용하는가?
A-B의 직접적인 관계에서 A-I-B의 간접적인 관계로 변환한다.
인터페이스를 통한 간접적 클래스 사용으로 모듈교체가 간편해진다.
관계가 없는 클래스에게 인터페이스 구현을 통한 관계를 부여한다.

추상클래스 VS 인터페이스?

공통점 : 둘을 상속(구현)받은 메소드에서 재정의가 필요하다

또한 추상클래스의 경우 is-a 관계, 즉 Animal과 Dog의 관계를 구현할때 쓰이고, 인터페이스의 경우 is-able-to 관계, 즉 탈것과 비행기의 관계를 구현할때 쓰인다.

0개의 댓글