BACK/JAVA

[JAVA] 실전 자바 - 다형성(추상 클래스, 인터페이스)

연듀 2024. 1. 30. 17:14

 

 

문제점

  1. Animal 클래스를 생성할 필요가 없다.
  2. Animal 클래스를 상속받는 곳에서 sound() 메서드를 오버라이딩 하지 않을 가능성이 있다.

⇒ 추상 클래스 도입

 

 

추상 클래스

추상적인 개념을 제공하는 클래스로, 인스턴스가 존재하지 않는다.

abstract class AbstractAnimal {...}

추상 메서드

 

추상적인 개념을 제공하는 메서드로 실체가 존재하지 않는다.

자식 클래스가 반드시 오버라이딩 해야 한다.

public abstract void sound();
  • 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다. -> 그렇지 않으면 컴파일 오류
  • 추상 메서드는 자식 클래스가 오버라이딩 하지 않으면 자식도 추상 클래스가 되어야 한다.

 

 

 

만약 추상 클래스의 모든 메서드가 추상 메서드라면 순수 추상 클래스라 한다.

부모의 모든 메서드를 구현해야만 한다.

 

⇒ 이와 같은 의미인 인터페이스가 도입

 

 

인터페이스

implements 키워드 사용

public interface InterfaceAnimal {
		 (public static final) int MY_PI = 3.14 // 인터페이스에서 멤버 변수 = 상수
     (public abstract) void sound(); // public abstract 생략 가능
     (public abstract) void move();
}

 

 

인터페이스의 다중 구현

 

상속의 경우, 만약에 자식이 여러 부모를 상속 받는 다면

부모들이 같은 이름의 메서드를 가질 때 자식이 어떤 메서드를 호출해야 할지 모르는 문제가 있다.

 

그러나 인터페이스는 모두 추상 메서드로 이루어져있기 때문

부모 클래스에 같은 이름의 메서드가 여러개 있어도 어처피 오버라이딩된 자식의 메서드가 호출되어 문제가 발생하지 않는다.

 

⇒ 다중 구현을 허용한다.

 

 

 

 

참고) 김영한 - 실전 자바

https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard