본문 바로가기
OOP

[OOP] Abstraction, 추상화란 무엇인가

by ifhead 2022. 8. 26.
반응형

추상화의 정의

추상화는 공통점을 취하고 차이점을 제거하는 일반화를 사용합니다. 또 하나의 방법으로, 중요한 부분을 강조하기 위해 세부 사항을 제거합니다. 프로그래밍에 있어서 추상화는 불필요한 코드의 제거, 중요한 부분의 강조라고도 볼 수 있습니다.

위키피디아는 추상화를 다음과 같이 정의합니다.

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

 

컴퓨터 과학 및 소프트웨어 공학에서 추상화는 매우 중요합니다.
소프트웨어는 그 자체로 추상적이며 소프트웨어 생산 분야는 추상화 기술입니다.

 

Keith Devlin은 추상화에 대한 자신의 견해를 이렇게 말합니다.

”컴퓨팅은 추상화를 구성하고 조작하고 추론하는 일이다.
정확한 방식으로 추상화해야 좋은 프로그램을 만들 수 있다."

 

 

추상화의 목적


Ghezzi et al은 추상화를 '복잡성에 통달하기 위한 소프트웨어의 기본 원칙'으로 보았습니다.

예시를 하나 들어 보겠습니다. 해리 벡은 지하철 노선도에서 불필요한 지형 정보를 제거함으로써 승객들의 요구에 맞게 현실을 단순화했습니다. 

다시 말해 추상화란, 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러나게 하는 과정입니다. Root-Bernstein 2001

 

추상화의 목적은 불필요한 부분을 무시함으로써 현실에 존재하는 복잡성을 극복하는 데 있습니다.

리처드 파인만은 "현상은 복잡하다. 법칙은 단순하다. 버릴 것이 무엇인지 알아내라"고 말했습니다.

 

추상화

어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법

복잡성을 다루기 위해 추상화는 두 차원에서 이루어집니다. Kramer 2007.
- 첫 번째 차원은 '일반화'로, 구체적인 사물들 간의 공통점은 취하고 차이점은 버려 단순하게 만듭니다.
- 두 번째 차원은 '디테일 제거'로, 중요한 부분을 강조하기 위해 단순하게 만듭니다.

예외 없이, 추상화는 복잡한 대상을 이해하기 쉽게 단순화하는 일입니다.

객체지향의 사실과 오해 2015

 

프로그래밍에서 추상화

프로그래밍 언어조차도 기계 언어를 추상화한 것이라고 할 수 있습니다.

이 맥락에서 추상화는 두 가지로 나뉩니다.

데이터 추상화 Data Abstraction

  • 변수 : 메모리 위치를 우리가 지은 변수명으로 대신한다.
  • 타입 : 자료 특성를 간단하게 표시한다. int, float, char 처럼.
  • 배열 : 같은 타입의 연속된 변수들의 모음. int int int 따위가 아니라 int[].
  • 클래스의 멤버 변수에 무엇을 포함할지 정함.

제어 추상화 Control Abstrcation

  • 기계어 명령들을 while, if, operator 등으로 단순화한다.

 

객체지향 프로그래밍에서 클래스로 타입을 만들고, 인터페이스를 추출하고, 슈퍼타입과 서브타입을 분류하는 등의 모든 과정이 프로그래밍에서 말하는 추상화의 실제입니다.

 

 

반응형

댓글