Programming/Java

9. 추상클래스

주죵 2021. 1. 7. 20:27
728x90
반응형

추상클래스란? - 추상적으로 정의할테니 사용자가 꼭 재정의(overriding) 해!

지난번 예제를 생각해보자. 이번엔 본사가 메뉴만 정해주고, 매장마다 주위 환경에 맞게 가격을 책정한다고 하자.

지난 예제처럼 주택, 대학가, 증권가는 본사 class를 상속받을것이다. 그런데 이전처럼 본사만 믿고 오버라이딩 하지 않는다면 어떤 가격이 0원으로 출력될것이다! 따라서 매장에 본사가 가격측정을 강요할 필요가 있다

부모클래스가 자식클래스에게 메소드를 강제로 재정의하게 하는 방법으로 만들어진 클래스가 '추상클래스'이다.

 

코드로 된 예시를 보자.

package com.javale.chain2;

public abstract class HeadQuaterStore {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	public abstract void Kimchisoup();
	
	public abstract void Budaesoup();
	
	public abstract void Bibimbap();
	
	public abstract void Sundaesoup();
	
	public void Rice(){
    	System.out.println("밥1000원은 국룰이지 ㅋㅋ");	
    }
	

}

 

위의 클래스는 추상클래스이다. 추상클래스로서 아래의 선언부를 지정한다

 

package com.javale.chain2;



public class StoreNum1 extends HeadQuaterStore {
	public StoreNum1() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void Kimchisoup() {
		// TODO Auto-generated method stub
		System.out.println("김치찌개 4500원");
	}
	
	@Override
	public void Bibimbap() {
		// TODO Auto-generated method stub
		System.out.println("비빔밥 4500원");
	}
	@Override
	public void Sundaesoup() {
		// TODO Auto-generated method stub
		System.out.println("순대국 4500원");
	}
	@Override
	public void Budaesoup() {
		// TODO Auto-generated method stub

		System.out.println("부대찌개 4500원");
	}
	@Override


}

 

위의 추상클래스를 상속받는 childclass이다. 추상클래스를 상속받았기 때문에 추상클래스가 선언한 모든 추상메소드를 오버라이드 해야한다.

 

주목해야할점은 추상메소드는 정의만 할 뿐 구현하지 않는다는 것이다

 

추상클래스의 상속 vs 일반적인 상속

뭐가 더 좋다고 할 수는 없다. 상황에 따라 적절하게 사용하면 된다.

부모 클래스 메소드를 자식 클래스에서 변경할일이 없다면 일반클래스를 이요한 상속이 좋다. 하지만 이전 예제처럼 자식클래스에서 꼭 재정의해야하는 부분이 있다면, 추상클래스가 좋은것이다.

 

출처 : 신입 SW인력을 위한 실전 자바 (by 블스)

728x90

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

11. 패턴을 통한 객체지향 언어의 이해  (0) 2021.01.10
10. 인터페이스  (0) 2021.01.07
8. 상속  (0) 2021.01.04
7. Static  (0) 2021.01.03
6. 패키지 및 접근제한  (0) 2021.01.03