추상화
추상클래스와 추상매서드에 대해 알아보기 전에 우리는 추상화란 무엇인가에 대한
답을 생각해보아야한다.
추상의 단어 뜻은 네이버 사전에 다음과 같이 나와있다.
예를 들면, 인간의 얼굴만을 표상(表象)으로서 분리하는 것은 대상과 동차원상(同次元上)의 절단(切斷)이며 본래의 추상이라고는 할 수 없다. 빨간 넥타이로부터 ‘빨강’ 혹은 ‘형(形)’만을 추출(抽出)하는 것, 또 빨간 우체통, 잘 익은 토마토 등에서 공통적인 ‘빨강’을 골라내고, 적(赤) ·청(靑) ·황(黃)으로부터 ‘색(色)’을 빼내는 것은 추상이다.
추상은 불필요한 계기를 버리는 사상(捨象)을 표리일체(表裏一體)로 동반한다. 추상에는 보편성 ·일반성의 정도가 있고, 고도(高度)의 추상은 언어작용과 밀접히 관계하여 보통명사나 명제(命題)의 형성, 유형화(類型化), 이론구성의 전제(前提)가 되어, 일상적(日常的) ·학문적 활동에 불가결한 작용이다.
왠지 더 어렵다...-.-
결국 추상이란 어떤 여러개의 객체로부터 공통된 것을 빼내는 작업이다.
단 우리가 생각하는 추상이란 이미지는 뭔가 자세하지 않은 모호한 것을 의미한다.
이런 의미로 볼때 C#에서의 추상화는 위의 내용을 담고 있다.
1) 공통된 것을 빼낸다.
2) 자세하지 않은 모호한 것을 의미한다.
이 두가지의 의미를 가진 것이 추상화다.
추상화는 C#에서 클래스와 메서드로 표현한다. 여기서 중요한 것은 클래스에 메서드가
한개 이상 포함하고 있다는 것이다.
즉 추상화 클래스에는 반드시 메서드가 한개가 존재해야한다는 점이다.
그리고 추상화는 모호한 것을 의미하므로 자체에서 메서드에 대한 정의가 이루어지면 안된다.
즉 선언부만 추상화 클래스에는 존재해야한다는 의미다.
다음 예시를 보자.
abstract class Computer
{
public abstract void CPU();
}
class IBM : Computer
{
public override void Engine()
{
-----실제 구현부가 위치하는 곳
}
}
자바의 경우 추상화 클래스를 상속받는 곳에 해당 함수명만 쓰면 되지만
C#의 경우 오버라이드 되는 함수에 override라고 기술을 해주어야한다.
일반 클래스와 추상화 클래스를 구분짓는 키워드는 위에서 보듯이 abstract이며
이것은 추상화 클래스 내부의 모든 메서드에서 abstract 키워드가 사용되어져야 한다는 것을
의미한다.