본문 바로가기
[ JAVA ]/JAVA

[ Java ] 추상 클래스

by 환이s 2022. 12. 15.
CHAPTER 11. 추상 클래스 알아가기

 

추상 클래스(abstract class)란?

 

추상 클래스는 객체 지향 프로그래밍에서 중요한  특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해준다. 자바에서는 하나 이상의 추상 메소드(abstract mathod)를 포함하는 클래스를 가리켜 추상 클래스라고 한다. 

 

tip )추상 클래스는 생성(인스턴스화) 할 수 없다!

AbstSuper a = new AbstSuper(); //Cannot instanciate the Abstract Class!!

 

 

1 ) 추상 메소드(abstract mathod)

 

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

자바에서는 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함이다.

 

#구문

abstract int add(int x, int y);

public abstract class AbstSuper {
     public abstract int max(int x, int y);

     public int min(int i, int j) {
              return i > j ? j : i;
  }
}

 

2 ) Extends the Abstract Class

 

  • 추상 클래스를 상속 받는 클래스는 부모의 추상 메소드를 모두 구현해야 한다.
  • 모든 메소드를 구현했어도 avstract keyword가 있으면 추상 클래스다.
  • 다형성 표현시 interface보다 편하게 사용할 수 있다.(모든 자식 클래스의 동일한 기능만 구현)
  • Abstract 상속이 깊어지면 어디에 구현되어 있는지 알기 힘들다.

 

예시 1 ) 

 

무게(Weight) 클래스를 추상 클래스로 정의하고,
이를 상속한 근(Guen: 600g)과 파운드(Pound: 453g) 클래스를 만들고,
그램수를 반환하는 getGram() 함수를 각각 구현하시오.

 

1. 무게(Weight) abstract 생성하기

 

2. Guen,Pound 클래스 extends

 

extends를 하면 아래 보기처럼 에러가 나오는데 이 에러는 Override 구현하라는 뜻이다.

 

 

Override 구현 후 cnt * 주어진 값 작성하기

 

3. main 구현하기

 

Override까지 완료 하고 main에서 표출해보자.

처음에 작성한 것 처럼 abstract는 인스턴스화 할 수가 없다. 상속시킨 클래스로 구현을 해야 한다. can 값을 5를 주고 출력해보자.

 

 

3 ) Template Method

 

상속 받는 모든 자식 클래스들의 동일한 동작 방식을 정의하는 함수이다.

 

# example : 배구, 탁구, 테니스 등의 네트 경기의 serve, hit, score 함수
public abstract class NetSport {
   public abstract void serve();
   public abstract void hit();
   public abstract void score();

public final void play() {

serve();
hit();
score();
   }
}

 

예시 2)

SoftWare 제품을 상속받는 WebSite, MobileApp 클래스는
공통적으로 기획(plan), 개발(develope), 출시(release) 과정을
거친다.
이 부분을 추상클래스와 템플릿 메소드를 활용하여 코딩하시오.

 

 

1. SoftWare를 abstract 후, 각 기획(plan), 개발(develope), 출시(release)  생성하기.

 

 

2. 상속받는 WebSite, MobileApp 클래스에 Override

 

 

3. main 구현하기

 

 

위 예시를 보면 상속 받은 클래스에게 동일한 동작 방식을 할 수 있게 해 주는 게 Template Method이다.

 


마치며

 

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

만약 일반 메소드로 구현한다면 사용자에 따라 해당 메소드를 구현할 수도 있고, 안 할 수도 있다.

하지만 추상 메소드가 포함된 추상 클래스를 상속받은 모든 자식 클래스는 추상 메소드를 구현해야만 인스턴스를 생성할 수 있으므로, 반드시 구현하게 됩니다.

 

 

728x90

'[ JAVA ] > JAVA' 카테고리의 다른 글

[ Java ] Interface 2  (2) 2022.12.21
[ Java ] Interface 1  (0) 2022.12.19
[ Java ] 상속과 다형성  (0) 2022.12.14
[ Java ] 배열 ( ArrayList )  (0) 2022.12.13
[ Java ] 배열  (0) 2022.12.04