JAVA

[JAVA] 다형성(2) - abstract, 인터페이스

준몽쓰 2025. 3. 30. 23:38

추상 클래스

- 이름 그대로 추상적인 개념을 제공하는 클래스이다. 따라서 실체인 인스턴스가 존재하지 않는다. 대신에 상속을 목적으로 사용되고 부모클래스 역할을 담당한다.

abstract class A { ...}

- 추상 클래스는 클래스를 선언할 때 abstract 키워드를 붙인다.

- new A()처럼 직접 인스턴스를 생성하지 못하는 제약이 추가된 것

 

추상 메서드

- 부모 클래스를 상속 받는 자식 클래스가 반드시 오버라이딩 해야 하는 메서드를 부모 클래스에 정의할 수 있다. 이름 그대로 추상적인 개념을 제공하는 메서드 따라서 실체가 존재하지 않고 메서드 바디가 없다.

public abstarct void sound();

- 추상 메서드는 메서드 앞에 abstarct 키워드를 붙인다.

- 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야한다.

- 추상 메서드는 상속 받는 자식 클래스가 반드시 오버라이딩해서 사용해아 한다.

 

순수 추상 클래스

- 모든 메서드가 추상 메서드인 추상 클래스(실행할 바디 부분이 없다)

- 인스턴스를 생성할 수 없다.

- 상속 시 자식은 모든 메서드를 오버라이딩 해야 한다.

- 주로 다형성을 위해 사용

public abstract class A {
   public abstract void sound();
   public abstract void move();
 }

 

 

인터페이스

- 순수 추상 클래스를 더 편리하게 사용할 수  있는 인터페이스라는 기능 제공

- class 대신에 interface 키워드 작성

- 다중 구현(상속)을 지원

- 구현(상속) 시 상속할 때는 extends 키워드를 사용했지만, 인터페이스에선 구현할 때는 implements 키워드를 사용

- 인터페이스는 그래서 상속이라 하지 않고 구현이라 표현

public interface InterfaceA {
   public abstract void sound(); //public abstract 생략 가능
   public abstract void move(); //public abstract 생략 가능
 }

 

인터페이스 다중 구현

- 자바가 다중 상속을 지원하지 않는다 그래서 extends 대상은 하나만 선택할 수 있다.

- 호출할 때 애매한 문제가 발생하는 다이아몬드 문제가 생기면 클래스 계층 구조가 매우 복잡해져서 다중 상속 지원 안한다.

- 인터페이스는 구현하는 곳에서 부모들을 모두 구현한다. ex) implements A, B {....} 

- 인터페이스는 모두 추상 메서드로 이루어져있기 때문에 다중 구현이 가능하다.