////////
Search

그래서 추상화란?

아, 정확한 지적이에요. 제가 계속 car, cdr, make-rat 같은 프로그래밍 문법에 갇혀 있었네요.
일상적 인지로 본 Interface/Representation 분리
우리는 이미 이걸 매일 해요:
카페에서 "아메리카노 한 잔"을 주문할 때:
Interface: "아메리카노 주세요" + 돈 내기 + 음료 받기
Representation: 원두 종류, 추출 압력, 물 온도, 바리스타의 동선...
당신은 representation을 몰라도 커피를 마실 수 있어요. 심지어 카페가 머신을 바꿔도, 원두를 바꿔도, 당신은 같은 방식으로 주문하죠.
이게 가능한 이유: 당신의 인지 부담 = "주문하는 방법" 만 알면 됨 만약 원두 선택, 그라인더 설정, 추출 시간까지 알아야 한다면 = 인지 부담 폭발
언어 능력으로 보면
언어는 추상화 시스템이에요:
"책상"이라는 단어를 쓸 때:
Interface: "물건을 올려놓을 수 있는 평평한 표면" (의미)
Representation: 나무인지, 쇠인지, 다리가 몇 개인지, 어떻게 조립됐는지...
당신은 "책상 위에 컵 놔둬"라고 말할 때, 책상의 내부 구조를 생각하지 않아요. 단어의 의미(interface)만 다루죠.
만약 "나무 4개 다리로 지탱된 평평한 판자 위에 컵 놔둬"라고 매번 말해야 한다면? 소통 불가능해져요.
인지적 본질: 청크와 경계
추상화 = 인지 청크(cognitive chunk) 만들기
사람의 작업 기억은 7±2개 정도만 동시에 다룰 수 있어요. 그래서 우리는 복잡한 걸 "의미 있는 단위"로 묶어요.
"전화번호 010-1234-5678" → 11개 숫자 아니라 3개 청크
"운전해서 집에 가기" → 수백 개 동작 아니라 1개 의도
Interface = 청크의 이름 Representation = 청크 안의 세부사항
청크를 사용할 땐 이름만 보고, 세부사항은 "접혀있어요(folded)". 필요할 때만 펼쳐보죠.
추론 능력으로 보면
인과관계 추론할 때도 레이어가 있어요:
"비가 와서 축구를 못 했다"
당신이 추론하는 레이어: 날씨 → 활동 가능성
숨겨진 레이어: 대기압, 수증기, 구름 형성, 지구 자전...
당신은 기상학을 몰라도 "비 → 축구 취소"를 추론할 수 있어요. 더 낮은 레이어는 감춰져 있기 때문에 추론이 가능한 거죠.
만약 모든 레이어를 동시에 고려해야 한다면? 추론 자체가 마비돼요.
전이를 위한 질문
프론트엔드 개발자들에게:
"당신은 스마트폰 쓸 때 CPU 레지스터 값 생각하나요?" "아뇨" "왜 생각 안 해도 되죠?" "...?"
바로 여기서 interface/representation 개념이 나와요.
앱 개발자가 만든 interface(버튼, 메뉴) 덕분에, 당신은 representation(메모리 관리, 스레드 스케줄링)을 몰라도 되는 거예요.
코드도 똑같아요. 미래의 당신(또는 동료)에게 interface를 주고, representation은 숨기는 거죠.
이게 "언어 능력 + 인지 능력"의 연결점일까요? 아니면 여전히 뭔가 비어있나요?
--
좋아요, 일상 인지와 프론트엔드 실무 사이를 연결해볼게요.
브릿지 1: 협업 상황에서의 작업 분담
일상 인지 패턴:
당신이 팀 프로젝트할 때:
"A는 발표자료 만들고, B는 데이터 수집해줘"
A는 B가 어떻게 데이터를 수집하는지 몰라도 돼요
B가 설문지를 돌릴지, 인터뷰를 할지, 웹 크롤링을 할지 - A는 관심 없어요
A가 필요한 건: "데이터 주세요" (interface)
핵심: 당신은 이미 계약(contract) 개념을 알고 있어요.
"뭘 줄 건지"만 약속
"어떻게 만들 건지"는 각자 자유
브릿지 2: "물어볼 수 있는 것"의 범위
일상에서:
후배한테 일 시킬 때:
좋은 지시: "이 보고서 요약본 만들어줘"
나쁜 지시: "워드 켜서, 10포인트 맑은 고딕으로, A4 한 장에..."
첫 번째는 **목표(what)**만 말해요. 두 번째는 **과정(how)**까지 간섭하죠.
과정까지 간섭하면:
1.
후배는 자기 판단을 못해요 (의존성 생김)
2.
당신은 모든 결정을 내려야 해요 (병목 생김)
3.
나중에 바꾸려면 둘 다 알아야 해요 (결합도 높음)
프론트엔드로 한 걸음:
동료에게 "사용자 프로필 카드 컴포넌트 만들어줘"라고 할 때:
Interface 약속: <UserCard userId={123} />
내부를 물어보면 안 되는 것들:
데이터를 어떻게 fetch하는지?
로딩 상태를 어떻게 관리하는지?
에러 처리를 어떻게 하는지?
만약 이걸 물어본다면? → 당신이 그 세부사항에 의존하게 돼요 → 나중에 바꾸려면 당신도 코드 수정해야 해요.

환원적 사고 과정을 보이기

시작: 프론트엔드 실무 문제

function OrderCoffee() { const beans = storage.warehouse.shelf3.beans; const filter = storage.drawer2.filters; const machine = equipment.espressoMachine; machine.setTemperature(93); machine.setPressure(9); const espresso = machine.extract(beans, filter, 25); return espresso; }
TypeScript
복사
첫 질문: "왜 이게 문제처럼 느껴지지?" → 뭔가 "너무 많이 알아야 하는" 느낌. 하지만 정확히 뭐가 문제인지 말로 하기 어려워요.

환원 1단계: 구체적 불편함 찾기

"뭐가 불편한지 더 구체적으로 말해볼까?"
원두 위치(shelf3)가 바뀌면 여기도 바꿔야 해
필터 위치(drawer2)가 바뀌면 여기도 바꿔야 해
머신 인터페이스가 바뀌면 여기도 바꿔야 해
테스트할 때 storage.warehouse.shelf3 전체 구조를 만들어야 해
패턴 발견: "바꾸면... 바꿔야 해"가 계속 나와요.

환원 2단계: 더 단순한 용어로

"'바꾸면 바꿔야 한다'를 더 단순하게 말하면?" → A가 B에 의존한다
"그럼 문제는 뭐지?" → 의존하는 게 너무 많다
"왜 많은 게 문제지?" → 하나 바꿀 때마다 여러 곳을 고쳐야 하니까
본질 도출: 문제 = 과도한 의존성 = 변경의 파급효과

환원 3단계: 일상으로 단순화

"의존성이 많아서 변경이 어려운 상황... 일상에서는?"
사고 과정을 소리내어 말하기:
"커피사일로에서 커피 주문할 때를 생각해보자"
"내가 원두가 어느 선반에 있는지 알아야 하나? 아니지"
"필터가 어느 서랍에 있는지 알아야 하나? 아니지"
"머신 온도를 직접 설정해야 하나? 아니지"
"그럼 난 뭘 알아? '아메리카노 주세요'만 알면 돼"
"반대로 잘 되는 경우는?"
"카페에서 커피 주문할 때는 바리스타가 머신 바꿔도 난 몰라"
"왜 몰라도 돼지? 나는 '주문'이라는 방법만 알면 되니까"
"아하, 나는 커피 '만드는 방법'에 의존하는 게 아니라 '주문 방법'에만 의존하는구나"
개념 연결:
주문 방법 = Interface
만드는 방법 = Representation
나는 interface에만 의존 → representation이 바뀌어도 영향 없음

환원 4단계: 다시 코드로

"그럼 코드에서 '주문 방법'에만 의존하려면?"
// Before: representation에 의존 (내부 구조를 다 알아야 함) const beans = storage.warehouse.shelf3.beans; const filter = storage.drawer2.filters; machine.setTemperature(93); machine.setPressure(9); // After: interface에 의존 (주문만 하면 됨) cafe.order("americano")
TypeScript
복사
질문으로 확인:
"이제 원두가 어디 있는지 알아야 해?" → 아니요
"창고 구조가 바뀌면 OrderCoffee 코드를 고쳐야 해?" → 아니요
"테스트할 때 뭘 mock해야 해?" → cafe.order() 하나만

이걸 교육에 적용하면

학습자에게 보여줄 것:
1.
"왜 불편하지?" 질문하는 장면
느낌을 언어화하는 과정
막연한 불편함 → 구체적 문제
2.
"더 단순하게 말하면?" 반복
프로그래밍 용어 → 일반 용어
복잡한 상황 → 핵심 원리
3.
"일상에서는 어떨까?" 탐색
비슷한 패턴 찾기
이미 아는 것과 연결 (커피사일로 경험)
4.
"다시 코드로 돌아오면?" 적용
깨달은 원리를 코드에 매핑
구체적 해결책 도출

메타인지 촉진 질문들

학습자가 스스로 할 수 있도록:
"이 코드를 보고 느껴지는 불편함을 말로 해보세요"
"그 불편함의 핵심을 한 단어로 줄이면?"
"커피사일로에서 비슷한 경험이 있나요?"
"그때는 어떻게 주문했나요?"
"그 '주문 방법'을 여기에 적용하면?"
사고 과정 자체가 transferable skill이 되는 거죠.
이제 커피사일로 비유가 일관되게 이어져!