본문 바로가기
Java/Java

[Java] 추상 클래스, 메소드

by 전재경 2022. 12. 2.

Abstract Class(추상 클래스)

 

Abstract Class란 구체적이지 않은 Class를 의미한다.
ex) 독수리, 타조는 구체적인 새를 지칭하는데 새, 포유류 같은 것은 구체적이지 않다.

주로 클래스들의 공통되는 필드와 메소드를 정의한 클래스를 말한다.

이런 것을 구현한 클래스를 Abstract Class = 추상클래스라고 한다.

 

또 어떻게 본다면 완성되지 않은 설계도라고도 한다.

 

특징

예를 들어, Animal 클래스가 추상클래스라면 아래의 코드는 동작하지 않는다. 자바는 추상 클래스의 직접적 객체 생성을 차단하기 때문

Animal animal = new Animal(); // ERROR

형식

이러한 추상클래스는 abstract 키워드를 통해 선언

abstract class Animal {
// 내부 구현 생략..
}

 

사용법

추상 클래스는, 개념적으로는 의미가 있으나, 실존하지 않는 경우에 사용한다.

 

코드 예

호랑이, 토끼, 사자, 기린 클래스가 아래와 같이 있다.

class Tiger {
  private String name;
  public void eat() {
    System.out.println("냠냠");
  }
}
class Rabbit {
  private String name;
  public void eat() {
    System.out.println("냠냠");
  }
}
class Lion {
  private String name;
  public void eat() {
    System.out.println("냠냠");
  }
}
class Giraffe {
  private String name;
  public void eat() {
    System.out.println("냠냠");
  }
}

상속을 통해 최소화할 수 있다.

 

위와 같이 호랑이, 토끼, 사자, 기린 이라는 동물은 실제로 존재

하지만 동물이라는 동물이 있나 ? 아니다

왜냐면 동물이라는 말은 사람이 만들어낸 추상적 개념이다.

이렇게 개념적 클래스의 경우, 추상 클래스로 선언

 

Abstract Method (추상 메소드)

추상 메소드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미

자바에서 추상 메소드를 선언하여 사용하는 목적은 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함

이러한 추상 메소드는 선언부만이 존재하며, 구현부는 작성되어 있지 않습니다.

바로 이 작성되어 있지 않은 구현부를 자식 클래스에서 오버라이딩하여 사용하는 것입니다.

 

abstract 반환타입 메소드이름();

 

 

요약

추상 클래스란

  • 개념적 클래스이다
  • 직접적 객체 생성이 불가능하다
  • abstract 키워드로 선언한다

추상 클래스의 장점

  • 상속을 통해 중복 코드를 줄일 수 있다
  • 자식 클래스를 그룹화할 수 있다
  • 비 실존 객체의 직접 생성 차단하여 실수를 사전에 방지한다

추상 메소드란

  • abstract키워드로 선언한다
  • override 되어있지 않다면 Compile 자체가 되지 않는다
  • 추상 메소드가 하나 이상 포함되면 반드시 추상클래스로 선언이 되어야한다.

 

abstract class Player { //추상클래스
    abstract void play(int pos);
    abstract void stop();
}
class AudioPlayer extends Player {
    void play(int pos) { }	//추상메서드를 구현
    void stop() {}		//추상메서드를 구현
}
abstract class AbstractPlayer extends Player {
	void play(int pos) {}	//추상메서드를 구현
}

굳이 abstract를 붙여서 추상메서드로 선언하는 이유는 자손 클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해서이다.

다형성에서 배웠듯이 조상 클래스타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것이 가능하기 때문에, 조상 클래스 타입의 배열에 자손 클래스의 인스턴스를 담을 수 있다.

 

 

 

참고

 

34 추상 클래스 | CloudStudying

# 추상(abstract) 클래스 <div class="embed-responsive embed-responsive-16by9"> <iframe src="https://www.youtube.com/embed/O6f6fRSkpA0" frameborder="0" allowfullscreen></iframe> </div> ## 들어가며 --- 이전 시간 우리는 인터페이스에 대

cloudstudying.kr

 

'Java > Java' 카테고리의 다른 글

[Java] 타입 변환과 다형성  (0) 2022.12.06
[Java] 인터페이스(Interface)  (0) 2022.12.05
[Java]타입 변환과 다형성  (0) 2022.11.30
[Java] 상속  (0) 2022.11.30
[Java]public static void  (0) 2022.11.27

댓글