13.추상 클래스
'추상적이다'라는 말의 뜻을 생각해봅시다. 추상적이라는 것은 구체적이지 않고 막연한 것을 뜻합니다.그렇다면 ' 어떤 클래스가 추상적이다'라는 말은 무슨 뜻일까요? 앞의 용어 풀이를 대입해 보면 '구체적이지 않은 클래스' 라는 뜻이겠죠. 추상 클래스를 영어로 표현하면 abstract class 이고, 추상 클래스가 아닌 클래스는 concrete class 라고 합니다. 우리가 지금까지 만든 클래스는 모드 concrete class였습니다. 추상 클래스 활용 방법을 살펴보기 전에 추상 클래스 문법부터 배워 보겠습니다.
추상 클래스는 항상 추상 메소드를 포함합니다.
추상메소드는 구현코드가 없습니다.
함수의 구현코드가 없다는 것은 함수 몸체(body)가 없다는 뜻입니다.
{}(중괄호)로 감싼 부분을 함수의 구현부라고 합니다. 이부분이 없는 함수는 추상함수(abstract function)이고 자바에서는 추상메소드 (abstract method)라고 합니다.
추상클래스의 구현과정을 코드로 보기 전에 클래스 간의 관계를 살펴별 수 있는 클래스 다이어그램을 그려 보겠습니다. 클래스 다이어그램 맨 위쪽에는 클래스 이름을 씁니다. 그리고 아래쪽에 변수 이름을 쓰고 그 다음에 메소드 이름을 씁니다. 추상 클래스와 추상 메소드는 기울임꼴로 표시합니다. Computer클래스는 추상클래스 입니다. 컴퓨터 종류에는 데스크톱과 노트북이 있습니다. 그리고 노트북의 종류에는 MyNoteBook이 있습니다.
Computer 클래스는 추상 클래스이며 이를 상속받은 두 클래스 중 DeskTop 클래스는 일반 클래스이고 Notebook 클래스는 추상 클래스입니다. 마지막으로 NoteBook 클래스를 상속 받은 MyNoteBook 클래스도 일반 클래스 입니다. Computer 클래스가 제공하는 메소드중 두 개는 기울임꼴 서체로 표시했습니다. 이는 추상 메소드임을 나타냅니다. 즉 display()와 typing()은 추상 메소드이고 turnOn()과 turnOff()구현 코드가 있는 메소드입니다.
Computer 클래스 내부에 추상 메소드 display()와 typing()을 선언하고, 구현 메소드 turnOn()과 turnOff()를 작성합니다.
DeskTop 클래스는 일반 클래스이기 때문에 상속받은 Computer 추상 클래스에 포함된 추상메소드인 disPlay()와 typing()을 오버라이딩 해 주어야합니다. 그러면 상속받은 추상메소드가 모두 구현되었기 떄문에 DeskTop 클래스는 일반 클래스로서 사용할 수 있습니다.
NoteBook클래스는 추상클래스 입니다.
이 클래스에서는 상속받은 추상메소드를 모두 구현하지않고 disPlay() 하나만 구현하였습니다.
그러므로 NoteBook 클래스는 추상메소드를 하나 가지고 있기 떄문에 추상 클래스가 됩니다.
MyNoteBook은 모든 추상메소드가 구현된 클래스이므로 abstract 예약어를 쓰지 않습니다.
NoteBook에서 구현하지 않았던 하나의 추상메소드(typing())를 구현함으로써 추상메소드가 아닌 일반 메소드가 됩니다.