추상클래스 – 1.개요

메뉴 “객체지향언어로서의 PHP”에 포함시켜도 되는 주제이지만, 내용의 분량이 많아 별도의 메뉴로 분리하였습니다. 제가 공개한 세셔너함수-0.2.0을 작성하면서 도입된 객체지향프로그래밍 이론입니다.

여기에 있는 내용들은 관련 웹사이트나 관련 서적에 있는 내용을 정리(짜집기)한 것입니다.

추상클래스(abstract class)

추상클래스는 추상적인 클래스로써 그 구현이 덜 되었거나 또는 아직은 미완성 클래스이므로 실제 인스턴스(또는 객체)를 생성할 수 없도록 한 클래스입니다. 다시 말해서, 추상클래스는 객체가 가지는 특성들을 추상화시켜 놓았을 뿐 아직 구체화 시키지 못한 클래스이므로, 이 추상클래스를 상속하는 하위클래스에서 좀 더 구체화 시키도록 하는 것입니다. 따라서, 추상클래스를 상위클래스로 하여 상속하는 하위클래스는 추상클래스인 상위클래스에서 완전히 구현하지 못한 부분들을 완전하게 구현해 주어야만 하위클래스에 대한 객체 생성이 가능하고, 그렇지 못할 경우 하위클래스는 상위클래스인 추상클래스와 같이 미완성이므로 자체적으로 객체를 생성할 수 없고, 이 하위클래스는 다시 추상클래스가 됩니다.

추상클래스는 객체 지향 프로그램에서 하위클래스들의 공통된 특성을 추출하여 묘사하기 위한 클래스로, 클래스 자체가 너무 일반적인 특성을 가지기 때문에 객체를 생성하여 실제로 사용하기에 부적당한 클래스로, 디자인의 편의를 위해서 사용됩니다. 추상클래스의 일반적인 특성을 하위클래스에서 좀 더 덧붙여 실제 사물을 표현할 수 있기 때문에 추상클래스 그 자체로는 쓸모가 없지만 파생을 할 경우는 쓸모가 있습니다.

추상함수(abstract function)

추상클래스에는 연관된 하위클래스들의 공통데이터 구조, 즉 변수들을 정의하고, 함수중 일부는 완전히 구현하지 않고 프로토타입만 정의합니다. 이와 같이 추상클래스에는 함수 몸체가 없이 정의되는 함수를 멤버로 가지게 됩니다. 이것은 필요한 기능을 지금 당장 함수로 구현할 수 없을 때 일단 정의만 해두고 내용은 나중에(하위클래스에서) 채워넣고 사용하겠다는 의미입니다. 이러한 몸체가 없이 정의되는 함수를 C++에서는 순수가상함수(pure virtual function)라고 하고 자바에서는 추상메소드(abstract method)라고 합니다. 여기서는 앞으로 순수가상함수 또는 추상메소드를 추상함수라 통칭하겠습니다.

추상함수를 포함하고 있는 추상클래스를 상속하는 하위클래스는 추상클래스가 갖고 있는 모든 추상함수를 구현하여 주어야 합니다. 그럴 경우, 하위클래스는 일반클래스처럼 사용할 수 있고, 인스턴스의 생성도 가능하지만, 추상함수를 모두 구현해 주지 못한 경우에는 하위클래스도 구현이 완전히 이루어지지 않은 추상함수를 포함하게 되므로 추상클래스가 됩니다.

추상클래스의 예

추상클래스의 아주 좋은 예로 그래픽 화면 상의 한 좌표를 가지는 Position 클래스를 들 수 있습니다.

이 클래스는 위치만을 가지기 때문에 어떠한 그래픽 요소도 표현할 수가 없습니다. 가장 간단한 그래픽 요소인 점조차도 색상을 지정할 능력이 없기 때문에 표현이 불가능하며 단지 위치만을 가질 뿐입니다. 하지만 이 클래스는 모든 그래픽 요소에서 공통된 요소인 위치를 가지므로 파생을 할 경우는 하위클래스 자체가 유용하게 사용될 수 있습니다. 점을 나타내는 Point 클래스를 이 클래스로부터 파생시켜 색상을 나타내는 데이터 멤버만 덧붙이면 되며 원은 색상과, 반지름을 덧붙이고, 선은 끝점의 좌표와 색상을 덧붙이면 됩니다. 그외의 다른 그래픽 요소들도 Position 클래스로부터 파생시켜 나갈 수 있습니다.

추상클래스란 이렇게 파생을 목적으로 만들어지는 부모클래스이며 추상클래스의 멤버 함수는 객체를 가지지 않기 때문에 코드를 가질 필요가 없습니다. 단 하위클래스에서 멤버 함수를 재정의(overriding)하여 쓸 수 있도록 추상함수로 멤버 함수를 정의해주기만 하면 됩니다.

추상클래스의 특징

  • 추상함수를 갖는 클래스는 자동으로 추상클래스가 됩니다. 추상클래스는 최소한 한 개 이상의 추상함수를 가져야 합니다.
  • 추상클래스로부터 인스턴스 객체를 생성할 수는 없으며, 반드시 하위클래스가 존재합니다.
  • 추상클래스의 하위클래스는 상위클래스의 추상함수를 구현해주기만 하면 해당 하위클래스의 인스턴스 객체를 생성해 줄 수 있습니다.
  • 추상클래스의 하위클래스가 추상클래스로부터 상속받은 모든 추상함수를 구현해주지 않는 한 하위클래스 자신도 추상클래스가 됩니다.

답글 남기기