"자료구조가 단번에, 그리고 영원히 이해되게 하는 아이디어가 하나 있어. ADT는 행동을 약속하고, 자료구조는 그 약속에 비용표를 붙여 몸으로 만들고, 클래스는 그 몸을 감쌀 수 있어. 큐는 FIFO를 주지만 공정함은 더 큰 정책이 결정하고, 트리는 위계를 몸으로 만들지. 서로 같은 개념은 아니어도, 문제에 맞는 추상화를 고른다는 설계 습관으로 이어져."
모든 구조는 코드 입은 개념이다
퀘스트 전체를 돌아보면 보여. 각 구조는 저장 배치만이 아니라 아이디어를 구체화해.
- 스택은 가장 최근 것 먼저라는 개념이야. 실행 취소, 콜 스택, 백트래킹.
- 큐는 먼저 들어온 항목을 먼저 꺼내는 FIFO 순서를 제공해. 이게 공정성에 도움이 될 수는 있지만, 우선순위, 작업 길이, 재시도 정책이 끼어드는 순간 시스템 전체가 자동으로 공정해지는 건 아니야.
- 트리는 위계라는 개념이야. 담김, 혈통, 분류 체계.
- 그래프는 관계라는 개념이야. 무엇이든 무엇과든 이어져.
- 힙은 다음은 늘 가장 중요한 것이라는 개념이야.
- 해시맵은 키로 접근하되 비용은 구현에 달렸다는 개념이야.
그래서 자료구조 고르기는 저장 결정이 아니라 추상화 결정이야. 데이터의 모양과 거기에 던질 질문에 어떤 개념이 가장 맞는지 고르는 일이지. 개념이 맞으면 코드가 명백해지고, 틀리면 그 구조와 영원히 싸우게 돼.
이게 객체 지향 사고다
추상 자료형은 가능한 연산과 행동 계약을 정의하고, 자료구조는 그 계약을 특정 비용으로 구현해. 클래스는 그 구현을 담는 한 방법일 수 있지만, ADT, 자료구조, 클래스, 객체 지향은 서로 같은 말이 아니야. 이들을 잇는 실은 하나야. 구체 표현보다 계약에 의존하고, 문제에 맞는 추상화와 비용을 고른다는 설계 습관.
ADT는 연산 계약, 자료구조는 그 계약의 비용 있는 구현, 클래스는 구현을 캡슐화하는 한 수단이야. 서로 같지는 않지만 모두 구체 표현보다 맞는 추상화에 의존하라는 설계 습관을 공유해.
왜 아빠 눈엔 어디서나 OOP가 보이나
아빠는 세상을 객체 지향으로 읽어. 코딩 스타일이 아니라 현실이 조직되는 원리로서 말이야. 사물은 상태와 행동을 갖고, 맞는 추상화는 도메인을 다루기 쉽게 만들고, 틀린 추상화는 엉망으로 만들어. 이 퀘스트는 같은 교훈의 데이터 쪽 면이야. 도서관, 조직도, 도시 도로망, 응급실 분류 줄. 각각 그 추상화가 맞아떨어져서 정렬된 색인, 트리, 그래프, 우선순위 큐라는 구조를 '고른' 현실 시스템이지. '올바른 구조가 올바른 추상화다'가 마음에 울렸다면, 이 사이트의 OO Quest가 자연스러운 다음 걸음이야. 같은 본능을 객체 쪽에서 가르치고, 둘이 합쳐지면 완전한 보는 방식이 돼.
피파의 고백
한참 동안 난 DS&A와 OOP를 서로 다른 머릿속 서랍에 넣어 뒀어. 하나는 '배열이랑 빅오', 다른 하나는 '클래스랑 상속'. 아빠가 문장 하나로 그 사이 벽을 무너뜨렸지. "자료구조는 어떤 연산을 싸게 만드냐가 핵심 전부인 클래스일 뿐이야." 갑자기 구조 고르기와 클래스 설계가 같은 행위가 됐어. 맞는 추상화 고르기. 따로 공부했던 두 과목이 알고 보니 두 방향에서 바라본 한 과목이었던 거야.