추상클래스는 서로 다른 유형의 클래스들의 공통된 행위를 추출하여 정의한 것입니다.
주로 다형성의 구현하기 위하여 사용이 되는데요.
현실세계를 생각하면 요리방법이라고 생각하는데요.
왜냐하면 요리방법은 현실세계에서 각각의 사람마다 다 다르기 때문입니다. 라면을 요리 할 수도 있고, 짜장면을 요리 할 수도 있습니다. 즉 요리방법은 구체화(인스턴스화)를 할 수가 없습니다. 요리 방법을 구체화 하기 위해서는 그 요리방법의 구체화된 방법이 필요합니다. 짜장면요리방법이라던가, 라면요리방법이라던가 하는 그 요리방법에 속하는 구체화된 것이 필요합니다.
이러한 추상클래스는 가상의 클래스로써 공통된 행위(클래스)들에 대해 일반화시켜 만들어지게 됩니다.
추상클래스의 하위클래스, 추상클래스를 상속받은 클래스를 구체화 클래스라 합니다.
앞서 말한 공통된 행위는 메소드를 의미하며 메소드는 멤버필드를 다루는 방법, 다른 객체와의 소통을 위한 방법이라고 할 수 있습니다.
추상클래스는 여러 클래스들 간에 공통행위들이 있어 중복성을 배제하기 위해 일반화시킨 클래스이기에 실제객체를 생성할 수 없습니다. 즉, 인스턴스화를 할 수 없습니다.
추상메소드는 각각 상속받은 구체클래스에 따라 알고리즘 또는 로직이 다르게 구현됩니다.
추상클래스는 단일 인터페이스를 제공합니다. 공통된 행위를 추출하기 위함으로 그러한 공통행위를 통해 단일의 공통인터페이스를 제공합니다. 하지만 공통인터페이스는 구체클래스들이 서로 다르게 구현하여 하나의 인터페이스로 다양하게 수행됩니다. 즉, 다형성이 목적입니다. 이러한 다형성이 가능한 이유는 동적바인딩매커니즘(virtual invocation)을 통해 가능합니다.
동적바인딩매커니즘은 JVM의 특성인데요. 자세한 설명은 추후에 하겠습니다.
설계적 관점에서 추상클래스는 적어도 하나 이상의 추상메소드를 가져야 합니다. 구체클래스들의 공통점을 나타내는 행위가 하나이상 필요하다는 의미입니다. 이 추상메소드는 추상클래스의 하위 클래스들에서 각자 메소드바디를 구현해야 합니다.
추상클래스와 인터페이스의 목적은 결론적으로 다형성입니다. 하나의 인터페이스로 다양한 행동을 하는 것입니다.
파라매트릭폴리모피즘 : 서브클래스의 객체들을 추상클래스 객체들로 대치시킬 수 있습니다.
헤테로지니어스컬렉션 : 서로 다른 종류의 객체들을 수집할 수 있습니다.
이러한 다형성을 구현하기 위한 방법 말고도 기존시스템에서 외부접근 인스턴스화를 방지하기 위해서 사용되는 경우도 있습니다.
'IT > 개발' 카테고리의 다른 글
객체(object) 캐스팅(casting) (0) | 2013.08.17 |
---|---|
인터페이스(interface) (0) | 2013.08.16 |
다형성(polymorphism) (0) | 2013.08.15 |
상속(inheritance)과 확장(extend) (0) | 2013.08.15 |
레퍼런스(reference) 타입 (0) | 2013.08.14 |