추상화
추상화(Abstraction)는 복잡한 시스템에서 본질적인 부분만 남기고 세부 사항을 감춤으로써, 사용자가 단순화된 모델로 시스템을 다루도록 만드는 기법이다. 모든 좋은 소프트웨어 설계의 토대이며, 단지 OOP만이 아니라 함수, 모듈, API 설계 전반에서 작동한다.
왜 추상화하는가
- 인지 부담 감소: 한 번에 한 수준의 추상화에만 집중
- 재사용: 본질만 남으면 다른 맥락에서도 활용 가능
- 변경 격리: 내부 구현이 바뀌어도 외부 인터페이스는 유지
세 가지 축
기능 추상화 (Procedural Abstraction)
구현 절차를 함수/메서드로 묶어 이름만으로 사용한다.
예:
sort(list)— 정렬 알고리즘을 몰라도 사용 가능
자료 추상화 (Data Abstraction)
데이터 구조의 내부를 감추고 연산을 통해서만 접근하게 한다.
예:
Stack이라는 타입 — 배열인지 연결리스트인지는 관심 없음
제어 추상화 (Control Abstraction)
복잡한 제어 흐름을 한 단계 위의 구조로 감춘다.
예:
for-each,try-catch,await
추상화 수준의 일관성
좋은 함수는 같은 추상화 수준의 단계만 호출한다. 한 함수 안에서 비즈니스 로직과 SQL 쿼리, 문자열 파싱이 뒤섞이면 추상화가 무너지고 가독성이 떨어진다.
너무 많은 추상화의 역설
- 잘못된 추상화는 코드 베이스를 오히려 복잡하게 만든다.
- 미래를 예측한 과도한 추상화 → 실제로는 사용되지 않을 가능성이 높다.
- “현재 필요한 만큼”의 추상화가 좋다.