본문 바로가기

자바

[JAVA] 컴퓨터 프로그래밍 - 인터페이스 vs Abstract 클래스.

abstract

Abstract class abst{
    int A; // 인스턴스 변수 선언 가능

    public void msd1(){
        //
      }

    abstract void msd2(); // 추상 클래스는 절대 {} 내용을 가질 수 없음. 그냥 적는것도 안됨


    // 내부에 abstract 메소드 사용 가능 ( abstract 함수는 abstract 클래스 안에서만 선언 가능함)
    // 공용 변수 / 메소드 정의 가능
}

Interface

규칙 느낌이 강함. 변수가 final로 고정되는 것도 그렇게 생각하면 편함

interface itface{
    int y; // ❌ 초기화 안되어 있음
    int x = 10; // ✅ 인터페이스 안에 모든 변수는 public static final로 고정됨
    x = 20; // ❌ final 이라 수정 불가능함

    void msd1(); //public abstract void로 고정 (쓰던 말던 상관 없음 그냥 명시해주는 거임)

    //
}

Abstract class vs Interface

Abstract class Interface
변수 선언 선언 가능 final 변수만 선언 가능
메소드 abstract 또는 일반 메소드 선언 가능 무조건 abstract만 (state인가 예외 있다고 함)

abstract 메소드를 선언하면 무조건 하위 클래스가 구현하도록 강제할 수 있음
abstract 메소드는 일반 클래스에서 선언 불가능함 & {} 구현을 가지고 있으면 안됨

언제 쓰지?

상속하는 클래스들이 많은 공통 메소드를 가질 때,
public 외에 다른 접근 제어자가 필요할 때,
인스턴수 변수 선언이 필요할 때.


-> 추상 클래스


다중 상속이 쓰고 싶을 때,
서로 관련 없는 클래스들이 같은 기능을 가져야 할 때


-> 인터페이스