Contents

what is Abstraction(추상화)?

Contents

추상화 & 구체화

개발 미팅을 하다보면 자주 듣게 되었는데, 정확한 정의와 의미를 알기 위해 정리합니다.

추상화

추상화는 복잡한 시스템, 객체 또는 개념을 단순화하여 핵심 기능에 집중하고 불필요한 세부 사항을 숨기는 프로세스입니다. 이는 문제를 이해하기 쉽게 만들고, 핵심 개념에 집중하여 설계를 간소화하며, 재사용성을 높이는 데 도움이 됩니다.

프로그래밍에서 추상화는 여러 수준에서 발생할 수 있습니다:

  1. 데이터 추상화: 데이터를 간소화하거나 숨기는 것으로, 특정 데이터 유형의 세부 정보를 숨기고 핵심 데이터만 표시하는 것을 의미합니다. 이는 객체 지향 프로그래밍에서 클래스와 객체를 사용하여 데이터를 캡슐화하는 것과 관련이 있습니다.
  2. 프로세스 추상화: 복잡한 작업이나 알고리즘을 간단한 단계나 함수로 나누어 표현하는 것입니다. 이를 통해 코드를 이해하기 쉽게 만들고, 유지보수를 용이하게 할 수 있습니다.
  3. 인터페이스 추상화: 시스템의 일부를 간단한 인터페이스로 정의하는 것으로, 해당 부분의 내부 동작은 숨기고 필요한 부분만 외부로 노출시킵니다. 이는 모듈화와 관련이 있으며, 모듈 간의 결합도를 낮출 수 있습니다.

추상화는 소프트웨어 개발에서 중요한 개념으로, 복잡성을 다루고 코드를 이해하기 쉽고 관리하기 쉽게 만들어줍니다. 추상화는 모델링, 설계 및 구현 단계에서 계속해서 사용되며, 좋은 소프트웨어 아키텍처의 핵심 원칙 중 하나입니다.

구체화

구체화(Concretization)는 추상화의 반대 개념으로, 추상적인 개념이나 아이디어를 실제로 구체적인 형태로 나타내거나 실현하는 것을 말합니다. 추상화가 일반적이고 고수준의 개념을 간추려 표현하는 것이라면, 구체화는 그 개념을 실제로 구현하거나 현실 세계에서 구체적인 사물로 만드는 것입니다.

프로그래밍에서 클래스나 인터페이스 등을 정의할 때, 이를 구체화하기 위해 실제 코드를 작성하고 객체를 생성하는 것이 구체화에 해당합니다. 이는 개념을 구현체로 옮겨가게끔 하는 과정이며, 추상화와 함께 프로그래밍에서 중요한 요소 중 하나입니다.

예를 들어, 추상적인 “자동차"라는 개념이 있다면, 이를 구체화하기 위해서는 실제 자동차 모델을 만들어야 합니다. 추상화는 고수준의 개념을 이해하기 쉽게 단순화하는 것이라면, 구체화는 실제로 그 개념을 구현하고 동작시키는 것입니다.