알버트의 개발하는 블로그

자바 제16강 : 자바 추상 메소드와 추상 클래스 (abstract) 본문

프로그래밍 언어/Java

자바 제16강 : 자바 추상 메소드와 추상 클래스 (abstract)

알버트 2021. 9. 10. 10:20

 

이번 시간에는 자바에서 제공하는 추상 메소드와 추상 클래스에 대해서 알아보고 익혀보도록 하겠습니다.

먼저 추상 메소드라는 것을 알아야 추상 클래스에 대해서 알 수 있습니다. 추상 메소드는 메소드는 메소드지만, 머리만 있고 몸통이 없는 메소드를 말합니다. 즉, 함수의 원형은 있는데 그 함수로 뭘 처리해주겠다는 내용이 없는 것입니다. 즉, 함수의 몸통인 "{ }"블록이 없이 대가리만 선언한 불완전한 함수를 추상 메소드라고 합니다.

public void kindOf() { }  // <- 일반 메소드 (함수의 몸통인 "{ }"블록이 있다.)
public void kindOf();   // <- 추상 메소드 ( "{ }"없이 머리만 있다.)

 

 

그렇다면 추상 클래스는 무엇일까요? 추상 클래스는 한 개 이상의 추상 메소드를 포함한 클래스를 말합니다.

추상 클래스는 불완전한 추상 메소드를 포함한 불완전한 클래스이므로 객체를 만들어 사용할 수 없습니다. 그래서 추상 클래스를 상속받은 자식 클래스는 추상 클래스의 모든 추상 메소드를 override(재정의)시켜서 사용해야 합니다. 추상 클래스가 이렇게 불편해도 많이 쓰이는 이유는 상속을 적용하기 좋은 클래스이기 때문입니다.

abstract class Product {
	
	public void kindOf() { }	// <- 일반 메소드

//	추상 메소드는 함수의 몸통인 "{}" 블록을 가지지 않는 메소드
//	추상 메소드는 abstract 예약어를 사용해 만들며 "{}" 블록이 없는 불완전한 메소드이다.
	public abstract void kindOf();	// <-추상 메소드
	
}

추상 클래스를 쓰는 방법은 위의 코드와 같습니다. 추상 메소드와 추상 클래스 앞에는 추상 예약어인 abstract를 반드시 명시해주어야 합니다. 따라서 kindOf() 함수는 추상 메소드라는 것을 알 수 있습니다. 그래서 이 추상 클래스를 상속받는 자식 클래스에서는 kindOf() 함수의 몸통을 적어줘야 합니다.

이제 간단한 예제를 통해서 추상 클래스를 익혀보겠습니다.

 

 


추상 메소드, 추상 클래스 예제

abstract class Product {
	
	public abstract void kindOf();		//추상 메소드 kindOf()
}



//	추상 Product 클래스를 상속받아 Camera 클래스를 만든다.
class Camera extends Product {

	@Override
	public void kindOf() { //추상메소드 kindOf() 구현
		System.out.println("찰칵찰칵");
	}
}



public class Main {

	public static void main(String[] args) {

		Camera camera = new Camera(); 	//Camera객체 생성
		camera.kindOf();		//추상클래스로부터 상속받은 kindOf()메소드 실행
	}
}

 

추상 메소드를 포함한 Product 추상클래스를 이처럼 사용할 수 있는 것을 볼 수 있습니다.

Product 클래스를 Camera가 상속을 받았습니다. 그리고 나서 Product클래스의 kindOf()메소드를 오버라이드해서 몸통을 구현하는 것을 알 수 있습니다. 추상 클래스는 이처럼 상속과 밀접한 연관이 있습니다.

이제 한번 실행해볼까요??

 

 

이처럼 카메라 클래스에서 구현된 kindOf 메소드가 정상적으로 실행되는 것을 볼 수 있습니다.

이처럼 추상 메소드와 추상 클래스는 자바에서 정말 중요한 문법 중에 하나입니다. 많이 연습하시고 익히시길 바랍니다. 읽어주셔서 감사합니다.