기록공간

추상화(Abstraction) 본문

카테고리 없음

추상화(Abstraction)

입코딩 2020. 2. 13. 16:03
반응형

추상화의 사전적인 정의

추상의 사전적인 정의는

이고 추상화는

이다.

 

즉, 어떤 사물이나 대상의 공통적인 특징을 뽑아내어 표현하는 작업이라는 뜻으로 풀어쓸 수 있겠다. 쉽게 말해 '일반화'를 시킨 다고 생각하면 편할 것이다. 추상화는 컴퓨터 과학에서 뺄 수 없는 개념이다. 도대체 왜 중요한 것일까?


컴퓨터 과학에서의 추상화

컴퓨터 과학에서 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.

 

우리는 추상화를 통해서 컴퓨터, 자동차, 전자레인지, 프로그래밍 언어 등에서 복잡하고 어려운 세부사항들을 무시한 채 하나의 도구, 또는 장비로 파악하여 간단하게 사용할 수 있게된다. 

 

예를들면, 우리는 자동차의 작동원리를 몰라도 운전을 할 수 있고, 컴퓨터의 작동원리를 몰라도 사용 할 수 있으며, 어셈블리어를 몰라도 프로그래밍 언어를 사용할 수 있다.


프로그래밍에서의 추상화

추상화는 객체 지향 프로그래밍(Object Oriented Programming)에서 빠질 수 없는 특징이자 개념이다. 추상화를 적절히 시키면 코드의 재사용성과 가독성을 높힐 수 있다.

 

예를들어 사용자가 어떠한 라이브러리의 기능을 사용할때 그 기능의 세부적인 원리를 알지 못하더라도 그 메서드 호출만 한다면 쓸 수 있다.  

 

이 개념은 결국 생산성, 에러 감소와 같은 요소에 큰 영향을 미친다.


적용법

추상화는 모든 객체의 공통적인 성질들만 담는 것이다. 동물의 추상클래스를 예로 들어보자.

모든 동물은 종류마다 울음소리가 다르다. 하지만 모든 동물들은 울음소리를 낸다. 울음소리를 내는것은 모든 동물이 가지는 특징이다.

 

동물을 추상 클래스로 만들어보면 다음과 같다.  

class Animal
{
public:
	virtual ~Animal() {}     // 가상 소멸자
	virtual void Cry() = 0;  // 순수 가상 함수
};

그리고 동물의 종류별로 클래스 선언하고 추상 클래스를 상속한다.

class Tiger : public Animal
{
public: 
	virtual void Cry() { cout << "어흥!" << endl; }
};

class Cat : public Animal
{
public:
	virtual void Cry() { cout << "야옹~" << endl; }
};

 그리고 main()을 다음과 같이 선언하면

int main()
{
	Tiger tiger;
	tiger.Cry();

	Cat cat;
	cat.Cry();
}

다음과 같이 출력 값이 나오게 된다.

 

출력 값

어흥!
야옹~

 

울음소리를 낸다는 공통된 특성을 가지고 여러 동물들의 울음소리를 낼 수 있게 되었다. 이것을 다형성이라고 하며 우리는 다형성을 가진 함수를 정의하였고, 추상화는 이러한 작업을 할 수 있도록 도와준다.

반응형
Comments