추상클래스(abstract class)의 존재 이유?

See more articles in Java/Java Lab category

자바를 배우다 보면, 자바의 강력한 기능 중에 하나인 상속(Inheritance), 다형성(Polymorphism)에서 많은 혼란을 격게 된다.

그 혼란중에서 추상클래스(abstract class)인터페이스(interface)를 배우게 되는데.. 이것들을 학원등에서 배우게 될 때.. 

추상 클래스 작성법은 가르쳐 주는데.. 왜 사용해야 하는지는 가르쳐 주지 않는다. 본인도, 자바를 배울때.. 왜 필요한지는 가르쳐 주지 않은 것 같다. 오히려, 어떤 형태가 추상클래스고 어떤 문법 구조를 따른다는 설명만을 덧붙여 주었다.

시간이 조금씩 지나면서, 읽을 책의 양이 늘어나면서. 추상클래스가 정확하게 무엇이고, 왜 써야 하는지를 알게 되어서 공유하고자 한다.

우선 아래 UML 다이오그램을 읽어보기 바란다.

우선.. 이 글을 읽는 분들은 기본적인 상속구조를 안다고 전제하겠다.

위 UML다이오그램에서 빨간색 네모가 그려진 Class는 추상클래스(Abstract class)이다. 그리고, 나머지 클래스는 일반클래스(Concrete class)이다.



왜 동물, 고양이과, 개과는 추상 클래스여야 하나?

그렇다면, 왜 동물, 고양이과,개과 클래스는 추상클래스여야 하나?. 그냥 일반 클래스로 정의하여 사용하여도 아무런 문제가 없는데 라는 의문을 가지게 된다. ..사질 프로그램상으로는 추상클래스로 정의된 클래스를 일반 클래스로 정의하여 사용하여도 아무런 오류가 발생하지 않는다.


여기서 필요한 것은 개념적인 부분이다.
알다시피, 자바는 객체지향(Object-Oriented) 언어이다. 따라서, 객체의 개념을 언어에 넣었다. 간단히 개념을 살펴보자.

추상 : 무엇인가 덜 구체화된 것
객체 : 상태와 행동을 가진 것.
클래스 : 객체를 만들기 위한 틀 (도면, 블루프린트 등등)
초기화(Initialize) : 클래스를 이용하여 객체 생성


자. 다시 하던 이야기로 돌아와서, 
우리는 클래스를 이용하여 객체를 생성한다.

예를 들어, Dog(개) 클래스를 이용하여 개 객체(상태와 행동 정의)를 만들고, Wolf(늑대) 클래스를 이용하여 늑대 객체(상태와 행동 정의)를 만든다.

그렇다면, Animal(동물) 클래스로 어떤 객체를 만들 수 있을까? 
동물객체요!!!! 

라고 대답한 당신은 계속 이 글을 읽어야 한다.

분명.. Animial(동물) 클래스로 동물 객체를 만들 수 있다. 하지만, 여기서 우리가 살펴봐야 하는 것은. 객체가 무엇이라 위에 정의 되어 있는가?. 

맞다. 객체란.. 상태와 행동을 가진 것을 의미한다.

그렇다면.. 동물이란 객체를 만든다면.. 
이것은 어떤 동물이란 말인가?.. 
다리는 몇개이고,
이빨은 몇개고,
머리는 몇개란 말인가?

한마디로, Animal(동물) 클래스로 만들어낸 동물객체는.. 전혀 객체의 모습을 가질 수가 없다. 한마디로 동물이 아니라..괴물이다.

 따라서, 우리는 이러한 불완전한 클래스가 객체를 생성 할 수 없게 하는데, 그 때 사용되는 것이 abstract, interface라는 키워드이다.


긴이야기를 짧게 줄여서

다시말해, 추상클래스란 해당 클래스를 통해 만들어낸 객체가 전혀 객체의 모습을 띄지 못할때, 해당클래스가 객체를 생성 할 수 없도록(?, 의미가 좀 그렇지만) 하는 keyword.. 즉.. 넌 너무 추상적이야 라는 의미라는 것이다. 그러니 넌 객체를 만들지마라는 의미~.







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

Java Modifiers Summary  (0) 2010.04.02
String Class | favorite methods  (0) 2010.04.01
추상클래스(abstract class)의 존재 이유?  (0) 2010.02.23