성준이의 공부블로그

[기술면접준비] 추상 클래스와 인터페이스의 차이 본문

기술면접

[기술면접준비] 추상 클래스와 인터페이스의 차이

Seong-Jun 2025. 5. 21. 00:59
728x90
반응형
SMALL

Abstract Class & Interface

Abstract Class

  • 하나 이상의 추상 메서드를 포함한 클래스를 뜻한다.
    • 추상 메서드 : 구현부 없이 반환 타입과 메서드명, 매개변수 정보만 있는 메서드이다.
  • 인스턴스를 생성할 수 없다 하지만 참조자료형으로는 사용할 수 있다.
  • 생성자의 접근 제한자를 protected로 정의하면 해당 클래스는 같은 패키지 내 혹은 상속관계에서만 인스턴스 생성이 가능하다.

Example

public abstract class Animal {
    private String name;
    private String kinds;

    protected Animal() {}

    protected Animal(String name, String kinds) {
        this.name = name;
        this.kinds = kinds;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getKinds() {
        return kinds;
    }

    public void setKinds(String kinds) {
        this.kinds = kinds;
    }

    public abstract void speak(); // 자식 클래스에서 반드시 @Override 해야 함
}

Interface

  • 필드와 일반 메서드, 생성자도 포함할 수 있는 추상 클래스와는 달리 상수와 추상 메서드만을 포함할 수 있다.

Example

[접근제한자] interface 인터페이스명 {}
public interface Animal {
    // 추상 메소드 => 몸체(구현)가 없는 메소드! 미완성 메소드!
    /* public abstract */ void move();
    public /* abstract */ void eat();
    public abstract void makeSound();
}
  • public abstract 혹은 abstract 생략 가능

인터페이스 상속(구현)

public class Cat implements Animal {
    @Override
    public void move() {
        System.out.println("Cat이 사뿐사뿐 걷습니다.");
    }

    @Override
    public void eat() {
        System.out.println("Cat이 츄르를 먹습니다.");
    }

    @Override
    public void makeSound() {
        System.out.println("냐옹~ 냐옹~~");
    }

}
  • 해당 인터페이스를 implements한 클래스는 반드시 인터페이스의 추상 메서드를 구현해야한다.
  • 추상 메서드를 오버라이딩 하지 않을 시 현 클래스는 추상 메서드를 가지게 되어 추상 클래스가 된다.
    • => 객체 생성 불가

요약 정리

  • 인터페이스 => 상수 필드 + 추상메소드

    • 클래스가 구현해야 할 추상 메소드로 규격 정의
    • 인터페이스 구현 시 implements 키워드 사용
    • 독립적인 프로그래밍이 가능하고 개발 시간을 단축시킬 수 있다.
    • 표현식
      [접근제한자] interface 인터페이스명 {
        [public static final] 자료형 변수명 = 값;
        [public abstract] 반환형 메소드명(매개변수정보);
      }
  • 모든 필드는 기본적으로 public static final 키워드가 적용됨

  • 추상클래스

    • 추상 메소드가 포함된 클래스
    • abstract 키워드 사용
    • 중복되거나 공통적인 부분은 미리 만들어 진 것을 사용할 수 있고 필요에 따라 재정의가 가능하다.
    • 표현식
        public abstract class 클래스명() {}
728x90
반응형
LIST