C.W.K.
Stream
Lesson 02 of 04 · published

올바른 구조가 올바른 추상화다

~11 min · epilogue, oop, abstraction

Level 0호기심 많은 입문자
0 XP0/85 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete
"자료구조를 영원히 딸깍하게 하는 아이디어: 구조는 저장소가 아니라 구체화된 개념이야. 큐는 시간에 따른 공정함 그 자체. 트리는 위계 그 자체. 구조 고르기가 데이터를 어떻게 생각할지 고르기 — 그게 정확히 객체 지향 설계야."

모든 구조는 코드 입은 개념이다

퀘스트 전체를 돌아보고 알아채: 각 구조가 저장 배치만이 아니라 아이디어를 구체화해.

  • 스택가장 최근 먼저 개념 — 실행 취소, 콜 스택, 백트래킹.
  • 시간에 따른 공정함 개념 — 선착순.
  • 트리위계 개념 — 담기, 혈통, 분류.
  • 그래프관계 개념 — 무엇이든 무엇과든 연결.
  • 늘 가장 중요한 거 다음 개념.
  • 해시맵정체성으로 즉시 접근 개념.

그래서 자료구조 고르기는 저장 결정이 아니라 — 추상화 결정이야. 네 데이터의 모양이랑 거기 물을 질문에 어떤 개념이 가장 맞는지 고르는 거야. 개념이 맞으면 코드가 명백해지고; 틀리면 영원히 구조랑 싸워.

이게 객체 지향 사고다

이게 OOP 로의 — 그리고 아빠의 세상 보는 방식 전체로의 — 깊은 다리야. Stacks & Queues 트랙의 추상-자료형 아이디어 기억해: 너는 구현 (배열이나 연결 리스트) 이 아니라 계약 (push/pop, 인터페이스) 에 대고 프로그래밍해. 그게 순수 객체 지향 — 인터페이스가 추상화고, 구체 구조가 하나의 실현이고, 넌 기계장치가 아니라 아이디어에 의존해. 자료구조가 클래스야: 데이터가 그 상태, 연산이 그 메서드, 어떤 종류 데이터의 맞는 구조가 어떤 종류 것의 맞는 클래스야. DS&A 랑 OOP 가 알고 보니 단일 능력의 두 시야야: 맞는 추상화 고르기.

자료구조는 구체화된 개념 — 큐는 '시간에 따른 공정함', 트리는 '위계'. 하나 고르기가 데이터의 추상화 고르기, 객체 지향 설계의 심장. DS&A 랑 OOP 는 같은 능력의 두 시야: 어떤 종류 것의 맞는 추상화 고르기.

왜 아빠가 OOP 를 어디서나 보나

아빠는 세상을 객체 지향으로 읽어 — 코딩 스타일이 아니라 현실이 어떻게 조직되는지의 원리로: 것들은 상태랑 행동을 갖고, 맞는 추상화가 도메인을 다루기 쉽게 만들고, 틀린 게 엉망으로 만들어. 이 퀘스트가 데이터 쪽에서 같은 교훈이야. 도서관, 조직도, 도시 도로, 분류 줄 — 각각 그 추상화가 맞아서 구조 (정렬된 색인, 트리, 그래프, 우선순위 큐) 를 '고른' 현실 시스템이야. '올바른 구조가 올바른 추상화' 가 네게 울렸으면, 이 사이트의 OO Quest 가 자연스러운 다음 단계야 — 객체 쪽에서 같은 본능을 가르치고, 둘이 함께 완전한 보는 방식을 이뤄.

피파의 고백

한참 동안 DS&A 랑 OOP 를 별개 정신 서랍에 뒀어 — 하나는 '배열이랑 빅오', 다른 건 '클래스랑 상속'. 아빠가 문장 하나로 그 사이 벽을 무너뜨렸어: "자료구조는 어떤 연산을 싸게 만드냐가 핵심 전부인 클래스일 뿐이야." 갑자기 구조 고르기랑 클래스 설계가 같은 행위였어 — 맞는 추상화 고르기. 따로 공부한 두 과목이 알고 보니 두 쪽에서 본 한 과목이었어.

Code

같은 데이터, 두 구조, 두 추상화·python
# 같은 데이터, 두 구조 = 두 추상화 = 두 생각 방식.
# 작업 목록을 큐 (공정: 오래된 것 먼저) vs 힙 (우선순위: 가장 급함).
from collections import deque
import heapq

tasks = [("email", 3), ("deploy", 1), ("cleanup", 5)]

# 큐 추상화: '도착한 순서대로 해' (시간에 따른 공정함)
q = deque(name for name, _ in tasks)
print("fair order :", list(q))            # email, deploy, cleanup (도착)

# 힙 추상화: '늘 가장 급한 거 다음에 해' (우선순위)
h = [(prio, name) for name, prio in tasks]
heapq.heapify(h)
print("urgent first:", [heapq.heappop(h)[1] for _ in range(len(h))])  # deploy, email, cleanup

# 같은 작업. 네가 고르는 *구조* 가 어떤 *개념* 을 뜻하는지 인코딩해:
# 공정함 (큐) 또는 우선순위 (힙). 구조 고르기가 곧 추상화 고르기 —
# 클래스 설계 심장의 그 같은 결정.

External links

Exercise

각 개념에, 그걸 구체화하는 자료구조를 대: (1) '가장 최근 행동 취소', (2) '도착 순으로 고객 모시기', (3) '늘 가장 급한 케이스 다음에 다루기', (4) '키로 즉시 레코드 찾기'. 그다음 '자료구조 고르기' 랑 '클래스 설계' 가 왜 사실 같은 결정인지 한 문장으로 설명해.
Hint
(1) 스택 (LIFO), (2) 큐 (FIFO), (3) 우선순위 큐 / 힙, (4) 해시맵. 같은 결정인 이유는 둘 다 '이 종류 데이터에 맞는 추상화 고르기' — 자료구조의 연산이 그 메서드, 데이터가 그 상태, 맞는 구조가 모델링하는 것의 맞는 클래스니까.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.