╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

Java/Java 기초

[Java] 추상메소드, 추상 클래스 (Abstract Method, Abstract Class)

재안안 2022. 4. 15. 17:03

추상화는 여러가지 데이터중 공통된 속성이나 특징만 남기고 차이점을 버리는것을 이라고 했다.

추상화된 객체는 결국 실체가 사라진다.

 

추상 메소드와 추상 클래스를 한마디로 정의하자면 아래와 같다.

 

  • 추상 메소드 : 미완성 함수
  • 추상 클래스 : 미완성 설계도

 

우선 추상 메소드란 선언부만 정의하고 내용은 비워져 있는 메소드를 말한다.

추상 클래스는 추상 메소드를 포함하고 있는 클래스를 말한다.

 

추상 메소드는 자식 클래스에서 메소드 오버라이딩을 통해 반드시 구현해야한다고 명시 하는 것이고

어차피 자식 클래스에서 오버라이딩 할테니 메소드 구현은 하지 않는 것이다. (껍데기만 있다.)

 

추상 클래스는 최소 하나 이상의 추상 메소드를 포함하고 있는 클래스이다.

포함하는 추상 메소드가 실체가 없으니 추상 클래스 또한 실체가 없어진다. (퍼즐 조각 하나가 비어져있다.)

그래서 추상 클래스는 인스턴스화를 할 수 없다.

 

추상 메소드와 추상 클래스는 키워드 abstract를 사용해 실체가 없음을 명시한다.

 

아래의 예제를 통해 설명하겠다.

 

abstract

해당 예제를 통해 아래와 같은 사실을 알 수 있다.

  • Predator는 abstract Class이다.
  • hunt는 abstract 메소드이다.
  • sleep은 그냥 메소드이다. "잠을 잡니다. . ."를 출력한다.

 

사실 그냥 보통 클래스에 abstrac 키워드를 붙여도 된다.

보통 클래스에 abstract 키워드가 붙으면 해당 클래스는 인스턴스화 할 수 없게 된다.

이 점을 오히려 이용 할 수도 있다.

 

여기서 추상 클래스특징을 알고 가야겠다.

  • 추상 클래스는 추상 메소드를 하나 이상 포함해야한다.
  • 추상 클래스에선 변수가 초기화되면 값은 상수값이 되어 값을 바꿀 수 없다. 
  • 만약 final을 명시하지 않아도 생략된걸로 취급한다. 
  • 추상 클래스는 인스턴스를 생성할 수 없다.

 

Predator의 인스턴스를 만들어 볼려고 했는데 아래와 같은 알람이 떴다.

 

추상 클래스는 인스턴스 생성x

 

그럼 이제 추상 클래스와 추상 메소드의 사용 방법에 대해 알아보겠다.

 

아래의 예제를 통해 설명하겠다.

 

추상 클래스 사용

이 처럼 Wolf가 추상 클래스 Predator를 상속받아서 추상메소드를 구현하고 사용한다.

 

이제 main 클래스에서 사용해보자

 

main

 

실행 결과

추상메소드는 이처럼 상속을 이용해여 사용한다.

 

정리하자면

추상 메소드는 껍데기만 있어서 채워줘야하는 미완성 메소드

추상 클래스는 나사 몇개 빠진 미완성 설계도이다.

 

추상 클래스를 상속받아서 미완성 설계도를 자식 클래스에서 완성 시켜야한다.