01 / 15
SESSION 08 · Part 2 개발자처럼 생각하기

추상화와
함수

복잡함을 숨기고 이름 하나로 불러쓰는 기술

02 / 15
🎯

이 세션에서
배우는 것

🎭
추상화
복잡한 내부를 숨기고 필요한 것만 드러내는 방법을 이해한다
🛠️
함수
함수를 왜 만들고, 언제 만들어야 하는지 안다
🎁
매개변수 · 반환값
함수의 입력과 출력 구조를 설명할 수 있다
03 / 15
🎭

추상화는
"몰라도 되게" 해준다

자동차 운전에 엔진 구조를 알 필요 없다.
핸들, 페달, 기어 — 필요한 인터페이스만 있으면 된다.

프로그래밍도 똑같다. 한 번 잘 만들어두면 이름만 부르면 끝. 이것이 함수다.

04 / 15

함수 없이 vs 있을 때

같은 일을 세 번 할 때 — 차이가 극명해진다.

😵 함수 없이
같은 코드를 복붙 3번
수정하려면 3곳 모두 고쳐야
한 군데 빠뜨리면 버그
읽기 어렵고 길어짐
🎁 함수로
한 번만 정의 — 여러 번 호출
수정은 한 곳만 고치면 전체 반영
이름만 봐도 의도가 드러남
코드가 짧고 재사용 가능
05 / 15
🎭

추상화가 없다면 —
더 깊게 이해하기

추상화가 없다면 프로그래머는 무슨 일을 해야 할까? 스마트폰 카메라 촬영을 예로 보자.

1
추상화 없이: 셔터 버튼을 누를 때
센서 전압 제어 → ADC 변환 → ISP 처리 → JPEG 인코딩 → 저장 → ... 수천 줄의 저수준 코드를 직접 작성해야 한다.
2
추상화 있을 때: camera.takePicture() 한 줄
OS가 하드웨어를 추상화했기 때문에 앱 개발자는 한 줄이면 된다. 내부 수만 줄이 숨겨진 것이다.
3
추상화의 계층: 하드웨어 → OS → 프레임워크 → 앱
각 층이 아래 층의 복잡함을 숨긴다. 앱 개발자는 프레임워크만 알면 되고, OS 개발자만 하드웨어를 다룬다.
4
결과: 생산성의 폭발적 증가
추상화 덕분에 혼자서도 수십만 줄짜리 앱을 만들 수 있다. 거인의 어깨 위에 서는 것이다.
06 / 15

함수 호출의 흐름

매개변수를 넣으면, 블랙박스 안에서 처리되어 반환값이 나온다.

입력
매개변수
함수
처리 로직
출력
반환값
# 한 번 정의하면
def greet(name):
  return "안녕, " + name + "!"

# 여러 번 불러 쓴다
greet("철수") # "안녕, 철수!"
greet("영희") # "안녕, 영희!"
07 / 15
📦

함수 → 모듈 →
실제로는 어떻게?

함수 하나가 어떻게 대규모 라이브러리로 성장하는지 따라가 보자.

함수 작성
add(), multiply()
파일로 묶기
math_utils.py
공개·배포
npm/pip 등록
전 세계 사용
import 한 줄

핵심: React·TensorFlow·카카오 로그인 API — 모두 함수와 추상화로 만들어진 모듈. import 한 줄로 수년의 노력을 얹는다.

08 / 15
📦

모듈 — 함수의 묶음

함수 여러 개를 모아놓은 파일. 남이 만든 모듈을 import만 하면 즉시 사용 가능.

1
함수를 모아 모듈로
math_utils.py 파일에 add, subtract, multiply 등을 모은다.
2
다른 파일에서 불러오기
import math_utils — 한 줄이면 끝.
3
오픈소스 패키지 활용
전 세계 개발자가 만든 수십만 개 패키지 — npm, pip로 설치 후 바로 사용.
4
거인의 어깨 위에서
바퀴를 다시 발명하지 말라. 검증된 코드를 조립해 나만의 제품을 만든다.
09 / 15
📱

실생활에서
이렇게 쓰여요

우리가 매일 사용하는 앱과 서비스 속에 이 개념이 녹아 있다.

📷
카메라 앱
수십 만 줄의 하드웨어 코드가 추상화되어 "셔터 버튼 누름" 하나로 동작한다.
💳
결제 API
카드사·은행·보안 시스템과의 복잡한 통신이 pay(amount) 함수 하나로 추상화된 인터페이스로 제공된다.
🔑
카카오 로그인
OAuth 인증 흐름 전체가 loginWithKakao() 한 줄로 추상화. 내부는 수백 줄이지만 개발자는 몰라도 된다.

💡 이 개념이 없다면 앱 하나 만들기 위해 OS부터 다시 개발해야 한다

10 / 15
💡

자주 하는
오해 바로잡기

이렇게 생각하기 쉽지만, 실제로는 조금 다릅니다.

❌ 흔한 오해
  • 추상화 = 단순화 (같은 말이다)
  • 함수 = 수학 함수 (같은 개념이다)
  • API = 추상화 (같은 것이다)
✓ 실제로는
  • 추상화는 복잡함을 숨기는 것. 단순화는 실제로 복잡도를 줄이는 것 — 다른 개념이다
  • 프로그래밍 함수는 입력→처리→출력의 코드 블록. 수학처럼 순수하지 않아도 된다
  • API는 추상화를 사용하지만, 추상화보다 더 넓은 개념 (네트워크 인터페이스 포함)
11 / 15

함수는 커피 머신이다

어려운 개념도 익숙한 것에 빗대면 쉬워진다.

☕ 커피 머신 비유
물 + 원두
=
매개변수 — 함수에 넣는 입력
머신 내부
=
함수 본체 — 처리 로직(몰라도 된다)
나오는 커피
=
반환값 — 결과
버튼만 누르면 끝
=
추상화 — 내부 원리 없이도 사용 가능
12 / 15
🤖

이걸 알면
AI와 이렇게 대화해요

이 개념을 이해하면 Claude나 ChatGPT를 훨씬 잘 활용할 수 있다.

👤
같은 코드를 계속 반복 작성하고 있어요
🤖
반복 코드는 함수로 묶는 리팩토링이 필요합니다. 코드를 보여주시겠어요?
👤
이 반복 코드를 함수로 리팩토링하는 방법 알려줘. 매개변수와 반환값도 어떻게 설계해야 할지 설명해줘
🤖
반복되는 부분에서 변하는 값을 찾아 매개변수로, 결과로 필요한 값을 반환값으로 설계합니다. 예: function formatUser(name, age) { return `${name}(${age}세)` } — 이렇게 추상화하면 어디서든 재사용 가능합니다.
13 / 15

이렇게
이해하셨나요?

맞게 이해하셨어요
추상화는 복잡한 내부를 숨기고 인터페이스(사용법)만 제공한다. 커피 머신의 버튼처럼.
이렇게는 아니에요
추상화하면 성능이 항상 좋아진다. (추상화는 성능보다 생산성·유지보수를 위한 것이다)
맞게 이해하셨어요
함수는 같은 코드를 반복 작성하지 않고, 이름 하나로 여러 번 호출해 재사용하는 블록이다.
이렇게는 아니에요
함수는 반드시 값을 반환해야 한다. (반환값 없이 동작만 하는 함수도 많다)

💪 추상화와 함수를 이해했다면, 이제 남이 만든 라이브러리를 두려움 없이 사용할 수 있어요!

14 / 15
📌

핵심 정리

🎭
추상화
복잡한 내부를 숨기고
인터페이스만 제공
🛠️
함수
이름이 붙은
재사용 가능한 코드 블록
🎁
매개변수
함수로 전달하는
입력 값
🎯
반환값
함수가 내놓는
결과 값
📦
모듈
함수들의 묶음 —
import로 재사용
🧱
조립의 미학
작은 함수를 쌓아
거대한 시스템으로
15 / 15
🚀

다음 Part 3
운영체제의 세계로

코드를 실제로 실행시키는 배경 시스템 — 운영체제(OS).
Windows, macOS, Linux는 무엇이 다르고, 왜 필요한가?

💡 기억할 것: 같은 코드를 두 번 쓰지 말자. 바로 함수로 만들 때다.

슬라이드 목록