프로그래밍 추상화: 복잡성 은닉과 일반화, 두 가지 시선으로 이해하기
🤖 AI 추천
프로그래밍 학습 중 추상화 개념을 명확히 이해하고 싶은 주니어 개발자부터, 코드 리뷰나 설계 시 추상화의 맥락을 정확히 파악하고 싶은 미들 레벨 이상의 개발자에게 유용합니다.
🔖 주요 키워드

핵심 기술
이 글은 프로그래밍에서 자주 사용되는 '추상화'라는 개념을 '복잡성 은닉'과 '일반화'라는 두 가지 관점으로 명확히 구분하여 설명합니다. 이를 통해 개발자들이 코드 리뷰나 설계 논의 시 추상화의 맥락을 더 정확하게 파악하도록 돕습니다.
기술적 세부사항
- 복잡성 은닉 (Complexity Hiding):
- 내부의 복잡한 구현은 숨기고, 단순하고 명확한 인터페이스만 외부에 제공하는 방식입니다.
- 예시:
- 스마트폰 사용 시 내부 회로 동작 원리를 몰라도 버튼 터치로 사용 가능.
- HTTP 요청 시 TCP 연결, 핸드셰이킹 등 내부 과정을 신경 쓰지 않고
fetch(url)
과 같은 간단한 함수 호출로 사용. - XMLHttpRequest 또는 HTTP 프로토콜 대신
fetch
API 사용.
- 일반화 (Generalization):
- 다양한 객체나 함수에서 공통적이고 핵심적인 요소를 추출하여 더 높은 수준의 개념으로 묶는 방식입니다.
- 코드 중복을 제거하고 재사용성을 높이는 데 기여합니다.
- 예시:
- 자동차, 자전거, 기차 등을 '탈 것'이라는 상위 개념으로 묶는 것.
- 객체 지향 프로그래밍(OOP)에서
Vehicle
과 같은 추상 클래스를 정의하고drive()
와 같은 공통 메서드를 구현하는 것.
개발 임팩트
추상화를 두 가지 관점으로 이해함으로써, 개발자는 코드의 가독성 및 유지보수성을 향상시키고, 재사용 가능한 컴포넌트를 설계하는 데 도움을 받을 수 있습니다. 또한, 팀원들과의 코드 리뷰나 기술 토론 시 명확한 용어 사용으로 오해를 줄이고 효율적인 소통을 가능하게 합니다.
커뮤니티 반응
글에서는 우테코(우아한 형제들 기술 블로그로 추정)의 크루들과의 대화 및 코드 리뷰 경험을 바탕으로 추상화의 다양한 의미를 포착했음을 언급합니다. 이는 실제 개발 현장에서 추상화 개념이 어떻게 논의되고 적용되는지를 보여줍니다.
📚 관련 자료
awesome-abstraction
이 저장소는 소프트웨어 공학에서의 추상화에 관한 다양한 자료, 글, 개념을 모아놓은 것으로, 본문에서 다루는 추상화의 여러 측면을 깊이 이해하는 데 도움이 될 수 있습니다.
관련도: 90%
design-patterns-java
이 저장소는 디자인 패턴을 Java 코드로 구현한 것으로, '일반화' 측면의 추상화(예: 템플릿 메서드 패턴, 전략 패턴 등)를 실제 코드에서 어떻게 적용하는지 이해하는 데 참고할 수 있습니다.
관련도: 75%
clean-code-javascript
이 저장소는 JavaScript로 클린 코드를 작성하기 위한 지침을 제공합니다. 추상화는 클린 코드의 중요한 요소 중 하나이므로, '복잡성 은닉'과 관련된 좋은 코드 작성 원칙을 이해하는 데 도움이 될 수 있습니다.
관련도: 60%