https://www.youtube.com/watch?v=ftQZo7XaTOA
description: |-
1. 이건 꼭 알아야 한다^1
[? 질문] 파이썬은 어떤 언어이며, 왜(무엇을 위해) 배워야 하는가^2
[= 답] 파이썬은 사람이 읽기 쉬운 문법과 빠른 개발 속도를 갖춘 무료 오픈소스 언어로, 웹/데이터/AI/자동화/IoT 등 광범위한 분야에서 쓰이며(구글 내부 소프트웨어의 50% 이상이 파이썬이라는 언급 포함), 입문자가 프로그래밍의 핵심을 빠르게 체득하기에 적합하다고 설명한다.[^3]
[? 질문] 파이썬을 “제대로 시작”하기 위해 어떤 실행/개발 환경을 어떻게 설치하고 구성해야 하는가[^4]
[= 답] 공식 사이트에서 특정 버전(교재 기준 3.11.2)을 내려받아 설치하되 PATH 추가 옵션 체크가 핵심이며, REPL/IDLE/터미널 실행과 VS Code + Python 확장 설치/인터프리터 선택까지 한 번에 세팅할 수 있도록 단계별로 안내한다.[^5]
[? 질문] 파이썬 기초 문법의 뼈대(자료형→제어문→함수→입출력/파일→모듈/클래스/예외→실전문제→심화/정규식)는 어떤 원리로 이해해야 하는가[^6]
[= 답] **자료형(숫자/문자열/리스트/튜플/딕셔너리/집합/불)과 변수(할당=주소 참조)**를 기반으로, 조건/반복 제어문으로 흐름을 만들고, 함수를 통해 반복 로직을 묶어 재사용하며, 파일/모듈/패키지로 프로그램을 확장하고, 예외 처리로 오류 상황을 제어한다는 흐름으로 설명한다.[^7]
2. 큰 그림[^8]
이 콘텐츠는 ‘점프 투 파이썬(개정판)’ 흐름을 따라 파이썬 설치부터 문법 기초, 제어문, 함수, 입출력/파일, 클래스/모듈/예외, 실전 연습문제, 심화(유니코드·데코레이터·이터레이터·타입 어노테이션), 정규표현식까지를 장시간에 걸쳐 연속 강의로 다룬다.[^9] 초보자가 막히기 쉬운 설치·PATH·에디터 설정을 자세히 잡아주고, 이후에는 코드 실습(특히 VS Code) 중심으로 각 개념을 연결해 “왜 이런 문법이 필요한지”까지 설명하는 방식이다.[^10]
- 파이썬의 쉬운 문법/간결함이 입문자에게 유리하며, 들여쓰기 강제 등 “규격”이 코드 가독성과 협업/유지보수에 도움을 준다고 강조한다.[^11]
- 성능은 느릴 수 있지만 C와 결합(접착 언어), C 기반 라이브러리(예: NumPy)로 속도를 확보하며, 컴파일 언어 vs 인터프리터 언어 차이로 속도 차이를 설명한다.[^12]
- 문법을 모두 암기하기보다, 자주 쓰는 패턴을 이해하고 필요한 문법은 검색/도구(예: ChatGPT)로 보완하되, 자료형·제어문·함수·변수(주소 참조) 같은 핵심 원리는 이해해야 한다고 말한다.[^13]
3. 하나씩 살펴보기[^14]
3.1 오프닝, 교재/자료 안내, 강의 목표^1
- 강의는 ‘점프 투 파이썬 개정판’ 종이책 기준으로 진행하며, 책이 없으면 위키독스(온라인)를 참고해도 된다고 안내한다.^2
- 강사는 “저자(박응용)가 쓴 책”을 기준으로 강의를 진행하고, 본인은 강의를 맡았다고 소개한다.^2
3.2 파이썬이란 무엇인가: 기원, 역사, 버전, 사용처[^3]
- 파이썬은 **귀도 반 로섬(Guido van Rossum)**이 취미로 만든 언어이며, 파이썬 공식 홈페이지에 남긴 메시지 “I was looking for a hobby”를 근거로 제시한다.[^3]
- 1991년 공식 발표, 2000년 파이썬 2, 2008년 파이썬 3가 발표되었고 현재까지 3을 사용한다고 설명한다.[^3]
- “파이썬 4” 루머가 있었으나, 귀도 반 로섬이 아직 멀었다며 “파이썬 3를 계속 써도 된다”는 취지의 발언(인터뷰/자료)을 언급하며 학습자 불안을 줄인다.[^3]
- 활용 사례로 구글(자사 소프트웨어 50% 이상 파이썬 사용 언급), 인스타그램/넷플릭스/아마존 등에서 사용을 든다.[^3]
- 파이썬의 장점으로 “이해하기 쉬워 공동 작업과 유지보수가 편하다”고 강조한다.[^3]
3.3 이름의 유래와 로고, “인간다운 언어” 비유[^3]
- “Python” 이름은 Monty Python’s Flying Circus 코미디 프로그램에서 따왔고, 로고는 뱀(신화의 파이썬) 이미지가 결합된 형태로 알려진다고 설명한다.[^3]
- 파이썬을 **“인간다운 언어”**라고 부르며, 예시 코드
if 4 in [1,2,3,4]: print(4)형태를 보여주고, 영어를 어느 정도 알면 초보도 의미를 유추할 수 있다고 말한다.[^3] - 자바 코드(클래스/퍼블릭/보이드 등)와 비교해 파이썬은 부수 개념이 적어 초보가 “바로 하고 싶은 것”에 집중할 수 있다고 대비한다.[^3]
3.4 파이썬의 특징 4가지: 쉬움, 무료, 간결, 즐거움/개발속도[^11]
-
문법이 쉽고 빠르게 배울 수 있음
- 교양 강의에서 많이 쓰이고, 다른 언어 경험이 있으면 “일주일이면 충분”하다고 말한다(본 강의 6주 완성은 완전 초보 기준).[^11]
-
무료 오픈소스
- 무료로 다운로드/사용 가능, 파이썬으로 만든 프로그램을 영리 목적으로 판매도 가능하다고 설명한다.[^11]
-
무료지만 강력함: C와 찰떡궁합(접착 언어)
- 파이썬은 쉽지만 느릴 수 있고, C는 빠르지만 어렵다. 파이썬은 C와 결합하기 쉬워 “접착 언어”로 쓸 수 있다고 소개한다.[^12]
- C 기반 라이브러리(예: NumPy)를 쓰면 파이썬에서도 C처럼 빠르게 수치 연산을 수행할 수 있다고 언급한다.[^12]
- “모조(Mojo)”라는 파이썬 문법 기반의 고속 언어/툴(오픈베타/웨이팅리스트/오픈소스 아님)을 언급하며 미래 가능성도 덧붙인다.[^12]
-
간결함과 규격(파이썬다운 방식)
- 파이썬은 “가장 좋은 방법 한 가지만 선호”하고, 들여쓰기를 강제해 코드가 정리되지 않으면 실행이 안 된다고 비유(집정리 비유)한다.[^11]
- “Life is too short, you need Python” 비유를 소개하며 개발 속도가 빠르다고 강조한다.[^11]
3.5 컴파일 언어 vs 인터프리터 언어: 왜 C는 빠르고 파이썬은 느린가[^12]
- 컴퓨터는 0과 1만 이해하므로 사람이 쓰는 코드를 기계어로 바꿔야 한다는 전제에서 출발한다.[^12]
- 컴파일 언어: 코드를 한 번에 컴파일하여 실행 파일(기계어에 가까운 형태)을 만들어 실행 → 빠름.[^12]
- 인터프리터 언어(파이썬): 한 줄씩 읽어 해석(인터프리터 거쳐 실행) → 상대적으로 느림.[^12]
- 이 차이가 성능 차이의 주요 원인이라는 “큰 그림”을 제공한다.[^12]
3.6 파이썬으로 무엇을 할 수 있나 / 할 수 없나[^3]
할 수 있는 것[^3]
- 웹 백엔드: Django, Flask, FastAPI 프레임워크 소개. Django는 무겁지만 많은 것을 묶어 편리, Flask/FastAPI는 가볍게 서버 만들 때 편리하다고 설명한다.[^3]
- 웹 프론트엔드: “ReactPy” 같은 파이썬 기반 리액트 유사 프레임워크도 언급한다.[^3]
- AI/머신러닝: TensorFlow, PyTorch는 파이썬 기반으로 가장 먼저 생태계가 확장되는 경우가 많다고 설명한다.[^3]
- 수치연산: NumPy 같은 C 기반 라이브러리로 행렬/연산 가속 가능.[^12]
- 데이터 분석: Pandas(엑셀 같은 느낌)로 데이터 불러오기/연산/그래프 등 가능.[^3]
- DB 프로그래밍: SQLite, MySQL 등과 소통하며 데이터 저장/조작 가능(출석부 예시).[^3]
- GUI/시스템 유틸리티: Tkinter 등으로 버튼/창 기반 프로그램 제작 가능(시스템 최적화/관리 프로그램 예시).[^3]
- IoT/라즈베리파이: 작은 컴퓨터(라즈베리파이)를 파이썬으로 제어, 스마트 스피커/개인 서버 등 가능.[^3]
하기 어려운 것/비적합[^3]
- 운영체제 같은 시스템 밀접 영역: 인터프리터/고급언어 특성상 OS 개발 등에는 부적합하다고 설명한다.[^3]
- 모바일 앱(화면단) 개발: 프론트(앱 UI)는 다른 언어/프레임워크가 적합하고, 파이썬은 서버(백엔드)에서 주로 활용된다고 말한다.[^3]
3.7 파이썬 설치(Windows 중심)와 실행 방식(REPL/IDLE/터미널) 완전 정복[^4]
3.7.1 설치: 버전 맞추기, 64비트, PATH 체크의 중요성[^5]
- python.org 공식 홈페이지에서 다운로드 가능하며, 강의/교재는 3.11.2 기준이라 특정 버전 설치 방법도 알려준다.[^5]
- Windows Installer에서 보통 64비트를 권장하되, 일부 라이브러리는 32비트가 필요할 수 있어 상황별로 선택 가능하다고 말한다.[^5]
- 설치 화면에서 “Add Python 3.11.x to PATH” 옵션을 “무조건 체크”하라고 강조한다. 체크하지 않으면 터미널에서
python명령이 안 먹거나 스토어가 열리는 등 문제가 생길 수 있다고 설명한다.[^5]
[!IMPORTANT] PATH 체크는 설치 단계의 최중요 포인트
설치 시 PATH 옵션을 체크하지 않으면 이후 cmd/powershell에서python실행이 안 되는 대표적인 문제가 생긴다고 강조한다.[^5]
3.7.2 REPL(파이썬 실행기)로 테스트: hello world, 1+1, 종료 방법[^5]
- 시작 메뉴에서 Python 실행 →
>>>프롬프트(REPL) 등장. print("hello world")실행으로 정상 설치 확인.[^5]1+1같은 계산도 즉시 결과 확인 가능.[^5]- 종료는
quit()또는exit()를 사용한다.[^5]
3.7.3 IDLE: REPL + 에디터 기능, 이름 유래(몬티 파이썬) 이야기[^5]
- IDLE은 파이썬 설치 시 함께 깔리는 기본 에디터/실행 환경으로 소개한다.[^5]
- 색상 하이라이팅 등으로 기본 실행기보다 보기 편하고, New File로
.py파일을 만들어 저장/실행 가능하다고 시연한다.[^5] - IDLE 이름이 몬티 파이썬 출연자 “Eric Idle”에서 왔다는 이야기와 귀도의 트위터 언급도 덧붙인다.[^5]
3.7.4 터미널에서 실행: cd, python 파일.py, REPL과 파일 실행 구분[^5]
cd는 change directory로 경로 이동,python hello.py로 실행한다.[^5]- 흔한 실수: REPL 안에서
python hello.py를 입력하는 것. REPL은 파이썬 문법을 치는 곳이고, 파일 실행은 REPL을exit()로 나가 터미널에서 수행해야 한다고 설명한다.[^5]
3.7.5 PATH가 안 잡혔을 때 수동 설정(환경 변수 편집) 절차[^5]
- “시스템 환경 변수 편집” → 환경 변수 → Path 편집에서 파이썬 설치 경로와
Scripts폴더 경로를 추가하고 위로 올린 뒤, 새 cmd를 열어python재시도하는 절차를 단계적으로 안내한다.[^5]
3.7.6 VS Code 설치와 Python 확장(Extension) 설치, 인터프리터 선택[^5]
- VS Code는 무료이며 “비주얼 스튜디오(Visual Studio)와 다르다”고 강조한다(Visual Studio는 더 무겁다).[^5]
- 폴더를 “Open Folder”로 열어 프로젝트 구조(왼쪽 탐색기 + 코드 + 하단 터미널 통합)를 보여주며, 이것이 일종의 IDE(통합 개발 환경) 느낌이라고 설명한다.[^5]
- Python extension 설치 후 우측 상단 실행 버튼(재생 아이콘)이 나타나고, 인터프리터(여러 파이썬 버전) 선택은 하단 상태바의 Python 버전 영역을 클릭해 경로 지정으로 바꿀 수 있다고 안내한다.[^5]
3.7.7 온라인 대안: 구글 코랩(Colab)과 온라인 파이썬 실행 환경[^5]
- 설치가 막히면 Google Colab에서 바로 파이썬 실행 가능: 셀에
print("hi")입력 후 Shift+Enter 실행 등으로 소개한다.[^5] - “온라인 파이썬” 검색하면 다른 서비스도 많으니 설치 실패로 포기하지 말라고 독려한다.[^5]
3.8 주석(Comment)과 기초 편집 팁(저장, 단축키) + ChatGPT 디버깅 팁[^13]
- 주석은
#로 처리하며, VS Code에서 **Ctrl + /**로 한 줄 또는 여러 줄 주석 토글 가능하다고 설명한다.[^13] - 여러 줄 주석(혹은 여러 줄 문자열을 주석처럼 쓰는 형태)로
""" ... """또는''' ... '''를 소개한다.[^13] - 저장 안 해서 코드 반영이 안 되는 경우가 많다며 Ctrl+S 습관화를 강조한다.[^13]
- 오류(신택스 에러 등)를 ChatGPT에 코드(```로 감싸기)와 함께 물으면 오타 수정 등 도움받을 수 있고, 영어로 물으면 더 정확도가 높다고 말한다.[^13]
3.9 2장: 자료형(숫자/문자열/리스트…)과 변수의 핵심 개념[^6]
3.9.1 자료형이 중요한 이유: 1+1이 2가 아닐 수 있다[^6]
- 숫자형이면 1+1=2지만, 문자열
"1"+"1"이면 “11”처럼 붙는다는 예로 자료형이 결과를 바꾼다고 설명한다.[^6] - 자료형을 알면 언어의 절반을 터득했다는 말이 있을 정도로 중요하다고 강조한다.[^6]
3.9.2 변수는 상자(할당의 의미), a=3은 “같다”가 아니다[^6]
- 등호는 수학의 ‘같다’가 아니라 “오른쪽 값을 왼쪽 변수에 넣는다”는 의미라고 강조한다.[^6]
a = a + 1은 수학적으로 모순처럼 보이지만, 프로그래밍에서는 “a에 1을 더한 결과를 다시 a에 넣는다”로 이해해야 한다고 설명한다.[^6]- ‘같음 비교’는
==로 한다고 예고한다.[^6]
3.10 숫자형(Number): 정수/실수, 진수, 사칙연산, 몫/나머지/제곱[^6]
정수/실수와 type() 확인[^6]
- 정수 예:
a=123, 음수, 0 포함.type(a)→int.[^6] - 실수 예:
a=1.2,type(a)→float.[^6] - 지수 표기 예:
4.24e10은4.24 * 10^10의미라고 설명한다.[^6]
8진수/16진수(책에 나와서 소개, “중요도 낮음” 언급)[^6]
- 8진수는 앞에
0o형태(말로는 0 붙인 예시도 언급)로 표현하며, “0o10은 8”이 되는 진수 개념을 설명한다.[^6] - 16진수는
0x로 시작, A=10, B=11… 같은 매핑을 언급한다.[^6] - 이 부분은 “지적 허영심” 성격이며 실무에서 자주 쓰지 않는다고 덧붙인다.[^6]
사칙연산과 특수 연산자[^6]
+ - * /기본 연산.[^6]//는 몫,%는 나머지(예:7 % 3 = 1),7 // 3 = 2.[^6]**는 거듭제곱(예:3**4 = 81).[^6]
3.11 문자열(String): 생성 4가지, 따옴표 포함/이스케이프, 줄바꿈, 연산, 인덱싱/슬라이싱, 포맷팅, 메서드들[^6]
3.11.1 문자열 생성과 타입[^6]
"abc",'abc',"""abc""",'''abc'''네 방식 소개.[^6]type()찍으면str가 나옴.[^6]"123"은 숫자가 아닌 문자열로 처리된다고 강조한다.[^6]
3.11.2 문자열 안에 따옴표 넣기: 다른 따옴표로 감싸기 / 백슬래시[^6]
- 큰따옴표 문자열 안에 큰따옴표를 넣으면 깨지므로, 작은따옴표로 감싸거나
\"로 이스케이프하라고 설명한다.[^6] - 마찬가지로 작은따옴표는 큰따옴표로 감싸거나
\'로 처리.[^6]
3.11.3 여러 줄 문자열과 이스케이프 코드 \n, \t, \\[^6]
\n줄바꿈,\t탭 간격, 백슬래시 자체 표시는\\로 한다고 설명한다.[^6]- 여러 줄을 진짜 줄바꿈 포함 문자열로 만들려면
"""..."""형태를 쓰라고 안내한다.[^6]
3.11.4 문자열 연산: 더하기(연결), 곱하기(반복), 길이 len()[^6]
"Python" + " is fun"처럼 연결,"Python"*3처럼 반복.[^6]- 문자열끼리 곱은 불가, 문자열*정수만 가능하다고 말한다.[^6]
len("...")으로 길이(공백 포함) 구함.[^6]
3.11.5 인덱싱/슬라이싱: 0부터 시작, 음수 인덱스, step, 실전 분해 예시[^6]
- 인덱스는 0부터 시작이 핵심이라고 강조한다.[^6]
a[0]은 첫 글자,a[-1]은 마지막 글자. 범위 밖은IndexError.[^6]- 슬라이싱
a[0:4]는 0 이상 4 미만.a[:7],a[7:]등 생략 규칙,a[::2]step,a[::-1]역순도 시연한다.[^6] - 날짜/날씨 데이터
"20230331Rainy"같은 문자열을 인덱스로 끊어 year/month/day/weather로 분리하는 예를 든다.[^6]
3.11.6 문자열은 이뮤터블(변경 불가) 예고와 회문(palindrome) 예시[^6]
- 문자열의 특정 문자만 바꾸려고 하면 오류가 나는 이유가 immutable 때문이라고 예고하며, 슬라이싱 역순을 이용한 회문 검사 코드 예시를 언급한다.[^6]
3.11.7 문자열 포맷팅 3종: %, .format, f-string(최신) + 이스케이프 %/{}[^6]
%d,%s방식: “나는 사과를 %d개 먹었다” 같은 예시로 값 삽입.[^6]%자체 출력은%%로 처리.[^6].format()방식:{0},{1}순서/이름 지정 가능,{}문자 자체 출력은{{ }}처럼 중괄호 이스케이프 필요.[^6]- f-string(파이썬 3.6+):
f"나의 이름은 {name}"형태로 가장 깔끔하다고 강조, 중괄호 안에 연산도 가능(예:{age+1}).[^6] - 정렬/폭/소수점 자리수 포맷도 소개하되 “실무에서 자주 안 쓰면 검색/도구로 해결”이라며 암기 비권장, ChatGPT로 물어보라고 말한다.[^13]
3.11.8 문자열 메서드(함수): count, find vs index, join, upper/lower, strip, replace, split[^6]
count()로 문자 개수 세기.[^6]find()는 없으면 -1,index()는 없으면 오류라는 차이를 강조한다.[^6]join()은 문자 사이사이에 삽입해 결합(문자열 리스트에도 적용).[^6]upper()/lower()대소문자 변환.[^6]lstrip/rstrip/strip으로 공백 제거.[^6]replace()는 “찾아 바꾸기(Ctrl+F)” 기능의 프로그래밍 버전이라 설명.[^6]split()은 기본 공백 기준 분리, 구분자 지정(예:":")도 가능.[^6]
3.12 리스트(List): 서랍장 비유, 인덱싱/슬라이싱, 연산, 수정/삭제, 메서드들[^6]
3.12.1 리스트 개념: 여러 값을 한 변수에 담는 “서랍장”[^6]
a=[1,2,3]처럼 대괄호와 콤마로 구성,type()은list.[^6]- 파이썬 리스트는 다양한 자료형 혼합 가능(숫자/문자/리스트 중첩). 다만 메모리/성능 측면에서 비효율 가능성도 언급한다.[^6]
3.12.2 인덱싱/슬라이싱: 문자열과 유사, 중첩 리스트 접근[^6]
a[0],a[-1]등 동일 규칙.[^6]- 중첩 리스트
a[3][1]처럼 “리스트를 뽑고, 그 안에서 다시 인덱싱” 패턴을 매우 중요하다고 강조한다.[^6] - 숫자 요소에 다시 인덱싱하면 오류지만, 문자열 요소라면 다시 인덱싱 가능(예:
a[1][0]).[^6] - 슬라이싱
a[0:2], step 등도 동일.[^6]
3.12.3 리스트 연산: +, * , len()[^6]
a+b는 리스트 이어붙이기,a*3는 반복,len(a)길이.[^6]
3.12.4 자료형 혼동 방지: 숫자+문자열 오류와 형변환 str() 등[^6]
a[2] + "hi"는 int와 str 더하기라 TypeError.str(a[2]) + "hi"로 해결 가능하다고 설명한다.[^6]
3.12.5 리스트 수정/삭제: 대입으로 값 교체, del, 슬라이싱 삭제[^6]
a[2]=4로 특정 인덱스 값 교체 가능.[^6]del a[1]로 요소 삭제.[^6]del a[2:]처럼 슬라이싱 범위 삭제도 가능함을 보여준다.[^6]
3.12.6 리스트 메서드: append, sort, reverse, index, insert, remove, pop, count, extend[^6]
append(x)는 끝에 요소 추가(리스트를 append하면 리스트가 “통째로” 들어감).[^6]sort()오름차순 정렬, 문자도 알파벳 순.[^6]reverse()는 순서 뒤집기,sort()후reverse()는 내림차순 효과.[^6]index(x)는 위치 반환(없으면 오류).[^6]insert(i, x)는 특정 위치에 삽입.[^6]remove(x)는 “처음 만나는” x 하나만 삭제(여러 개면 여러 번 호출).[^6]pop()은 끝 요소를 “꺼내면서” 삭제하고, 꺼낸 값을 리턴해 사용할 수 있음을 강조(append는 None).[^6]extend([..])는 리스트를 펼쳐서 요소로 추가(append와 차이 비교).[^6]
[!TIP] 리스트 append vs extend 차이 기억법
append는 “그 자체를 한 칸에 넣기”, extend는 “펼쳐서 칸을 늘려 넣기”라고 설명한다.[^6]
- “문법 다 외우는 건 말이 안 된다”며 구글링/ChatGPT로 찾고, 자주 쓰면 외워진다고 현실적인 학습 태도를 제시한다.[^13]
3.13 튜플(Tuple): 리스트와 거의 같지만 변경 불가(자물쇠), mutable/immutable 개념[^7]
- 튜플은 소괄호
()로 만들며, 리스트와 비슷하지만 변경 불가라고 설명한다.[^7] - 하나짜리 튜플은
(1,)처럼 콤마가 필요하다고 강조한다.[^7] - 괄호 없이
1,2도 튜플로 인식됨을 보여준다.[^7] - 삭제/수정(
del, 대입)이 안 되어 오류가 남을 실습한다.[^7] - 인덱싱/슬라이싱/더하기/곱하기/len은 “새 튜플 생성”으로 동작하며 원본은 바뀌지 않는다고 시각화 도구로 설명한다.[^7]
- 튜플은 sort/append/insert/remove/pop 같은 변형 메서드가 없다고 정리한다.[^7]
- mutable vs immutable: 리스트/딕셔너리/집합은 mutable, 정수/실수/문자열/튜플은 immutable로 소개한다.[^7]
3.14 딕셔너리(Dictionary): 키-값, JSON/API, 추가/삭제/조회, 주의사항, 주요 메서드[^7]
3.14.1 딕셔너리 개념: 사전(단어=키, 뜻=값), 사물함 비유[^7]
- 중괄호
{}에키:값쌍을 콤마로 나열한다.[^7] - API에서 흔히 받는 JSON 형태(이름/나이/성별/특기 리스트 등)가 파이썬의 딕셔너리와 동일한 구조라고 설명한다.[^7]
3.14.2 값 추가/삭제/조회[^7]
- 추가:
d[key]=value로 새 키-값 추가.[^7] - 삭제:
del d[key]로 해당 키 쌍 제거.[^7] - 조회:
d["name"]처럼 키로 값 얻기. 없는 키는 KeyError.[^7]
3.14.3 주의사항: 키 중복 불가(덮어쓰기), 키는 immutable만 가능[^7]
- 동일 키를 두 번 넣으면 마지막 값으로 덮어써진다는 예시를 보여준다.[^7]
- 리스트는 mutable이므로 딕셔너리 키로 쓸 수 없고 TypeError가 난다고 설명한다.[^7]
3.14.4 딕셔너리 메서드: keys/values/items/clear/get/in[^7]
keys()는 키 목록(파이썬3에서는 dict_keys 객체, list()로 변환 가능).[^7]values()는 값 목록,items()는 (키,값) 쌍 목록.[^7]clear()는 전체 삭제.[^7]get(key)은 없으면 None(또는 기본값 지정 가능)이라d[key]와 차이(오류 vs None)를 설명한다.[^7]key in d로 키 존재 여부를 True/False로 빠르게 확인 가능.[^7]- “리스트는 0,1,2 키를 가진 딕셔너리처럼 볼 수도 있다”는 이해 보조 관점도 제시한다.[^7]
3.15 집합(Set): 중복 제거, 순서 없음, 교집합/합집합/차집합, add/update/remove[^7]
- 집합은
set([...])또는{1,2,3}형태로 만들며, 중복이 제거되고 순서가 없다고 강조한다.[^7] - 문자열
"hello"를 set으로 바꾸면 중복 문자가 하나로 줄고 순서가 섞이는 예로 특성을 보여준다.[^7] - 인덱싱 불가 → 필요하면 list/tuple로 변환 후 접근 가능.[^7]
- 교집합:
s1 & s2또는intersection(), 합집합:s1 | s2또는union(), 차집합:s1 - s2또는difference().[^7] - 요소 추가:
add(x), 여러 개 추가:update([...]), 제거:remove(x).[^7] - 중복 제거 실전: 리스트→set→list로 중복 제거(순서가 바뀔 수 있음을 언급).[^7]
3.16 불(Boolean): True/False, 비교연산, 자료형의 참/거짓 속성[^7]
- 불은 참/거짓 자료형이며 True/False는 반드시 대문자 시작이라고 강조한다(소문자면 NameError).[^7]
==는 같음 비교,!=는 같지 않음, 부등호 비교도 True/False를 만든다.[^7]- “자료형의 참/거짓” 소개: 값이 있으면 참, 비어 있으면 거짓(빈 리스트/빈 문자열/빈 튜플/빈 딕셔너리), 숫자 0은 거짓, None도 거짓.[^7]
bool(x)로 참/거짓 속성 확인 가능.[^7]- 반복문 예시: 리스트가 비면 반복을 끝내는 구조(while a: a.pop()) 같은 패턴을 미리 보여준다.[^7]
3.17 변수(주소 참조) 심화: id(), 얕은 복사 문제, 슬라이싱/ copy / list.copy(), 다중 할당, swap[^7]
3.17.1 변수는 값 자체가 아니라 “주소”를 들고 있다[^7]
- 메모리의 주소(호텔 방 번호 비유)와 객체 개념을 소개하고,
id(a)로 주소값(정확히는 객체 식별자)을 확인한다고 설명한다.[^7]
3.17.2 리스트 복사 오해: b=a 하면 같은 주소 참조[^7]
a=[1,2,3],b=a후id(a)==id(b)가 같고,a[1]=4하면 b도[1,4,3]이 되는 “대표 함정”을 시각화로 설명한다.[^7]- 이를 피하려면:
- 슬라이싱
b=a[:]로 새 리스트 생성[^7] copy모듈copy(a)[^7]- 리스트 메서드
a.copy()[^7]
- 슬라이싱
- “주소 개념을 몰랐으면 매우 헷갈릴 수 있는 버그”라며 이 단원을 넣은 이유를 설명한다.[^7]
3.17.3 다중 할당과 swap(파이썬의 간결함)[^7]
a,b = ('python','life')또는a,b = ['python','life']형태로 한 번에 할당 가능.[^7]a=b='python'도 가능.[^7]- 값 교환(swap): 다른 언어는 임시변수 필요하지만 파이썬은
a,b = b,a로 가능하다고 강조한다.[^7]
3.18 3장 제어문: if(조건) / while·for(반복) + 디버깅, break/continue, range, 컴프리헨션[^14]
3.18.1 조건문 if: 구조, 들여쓰기, 콜론, elif, 조건부 표현식[^14]
- 돈이 있으면 택시, 없으면 걸어가는 순서도 예시로 조건문 필요성을 설명한다.[^14]
- 기본 구조:
if 조건:아래 들여쓰기 블록 실행else:블록은 거짓일 때 실행[^14]
- **들여쓰기(Indentation)**가 틀리면 IndentationError. 탭 vs 스페이스 4칸 논쟁을 소개하되, 중요한 건 “일관성/정렬”이라고 강조한다.[^14]
- 콜론
:을 빼먹으면 문법 오류라고 경고한다.[^14] - 비교 연산자
> < >= <= == !=정리,!=는 느낌표+등호로 표현한다고 설명한다.[^14] - 논리 연산자
or,and,not:- or: 하나라도 True면 True
- and: 둘 다 True여야 True
- not: 반대[^14]
in,not in:- 리스트/튜플/문자열에 포함 여부로 True/False를 만들 수 있음(주머니(pocket) 예시로 money 포함 검사).[^14]
pass: 조건이 참일 때 “아무것도 하지 않음”을 명시적으로 표현할 때 사용.[^14]elif: else 다음 조건을 계속 이어 붙이는 구조로, if-else 중첩을 더 깔끔하게 만든다고 보여준다.[^14]- 한 줄 if(패션 코딩)와 조건부 표현식(삼항 연산자 스타일)도 소개하되 “스타일”로 설명한다.[^14]
- 자료형의 참/거짓 속성이 if 조건에 직접 사용되는 예시(빈 문자열/값 있는 문자열)를 다시 연결해 이해시킨다.[^14]
3.18.2 while: 반복 구조, 디버깅(브레이크포인트), break/continue, 무한루프[^14]
- “나무를 10번 찍는다” 예시로 while 구조(조건이 True인 동안 반복)를 순서도로 설명한다.[^14]
- VS Code 디버깅:
- 코드 라인 옆 브레이크포인트(빨간 점) 찍고 “Start Debugging”
- Step Over로 한 줄씩 실행 흐름/변수 변화 확인.[^14]
x = x + 1축약x += 1소개(파이썬은++없음).[^14]- 입력 기반 while 예시: 사용자가 4 입력 시 종료되는 메뉴 형태 시연(
input()은 이후 장에서 자세히 다루지만 예제로 먼저 사용).[^14] - break 예시(커피 자판기): 커피가 0이면 “판매 중지” 출력 후 break로 반복 종료.[^14]
- continue 예시: 짝수면 continue로 위로 올라가 출력 건너뛰어 홀수만 출력하는 코드(1,3,5,7,9).[^14]
- 무한루프
while True:는 Ctrl+C로 강제 종료 가능하다고 안내한다.[^14] - 질문 대응: 무한루프에서 메모리 누수는 “계속 객체를 생성/리스트 append 등으로 누적”이 원인이며, 적절히 삭제/초기화해야 한다는 방향(ChatGPT 답변 참고)으로 설명한다.[^14]
3.18.3 for: 리스트/튜플/문자열 반복, 점수 합격 판정, continue, range, 이중 for(구구단), print(end=)
- for 기본 구조:
for 변수 in 리스트:리스트에서 하나씩 꺼내 변수에 담아 반복.[^14] - 튜플 언패킹 for:
for (first,last) in [(1,2),(3,4)...]:처럼 한 번에 분해하여 더하기 예시(3,7,11 출력).[^14] - 점수 리스트로 합격/불합격 출력 예시: 번호를 1부터 만들기 위해 number=0에서 시작, 반복마다 number += 1, if 점수 >= 60 출력 분기.[^14]
- for + continue로 “합격만 출력” 같은 흐름 시연.[^14]
range(1,11)은 1 이상 11 미만 규칙(슬라이싱과 동일한 이상/미만)을 다시 연결하며 합계 55 예시를 한다.[^14]- 구구단(이중 for + range)에서 print(end=" ")로 줄바꿈 대신 공백을 넣어 한 줄 출력, 바깥 for마다 빈 print()로 줄바꿈하는 구조를 디버깅으로 해설한다.[^14]
- 리스트 컴프리헨션(패션 코딩):
[num*3 for num in a], 조건 포함[num*3 for num in a if num%2==0]등으로 기존 for+append를 한 줄로 축약하는 패턴을 보여준다.[^14]
3.19 4장: 함수, 사용자 입력(input), 출력(print), 파일 읽기/쓰기, 명령행 인수(sys.argv)[^14]
3.19.1 함수 개념: 입력→처리→출력(리턴), “반복 작업 묶기”, 구조(def/매개변수/return)[^14]
- 과일주스(재료→믹서기→주스), 수학 함수 f(x)=2x+3 비유로 “입력→처리→출력” 구조를 설명한다.[^14]
- 함수는 반복되는 가치 있는 부분을 묶어 재사용하고, 기능 단위 분리로 가독성을 높인다고 말한다.[^14]
- 기본 구조:
def 함수이름(매개변수): ... return 값.[^14] - 함수 정의만으로 실행되지 않고,
add(1,2)처럼 호출해야 수행된다고 시연한다.[^14]
3.19.2 용어 정리: 매개변수(parameter) vs 인수(argument) 혼용 주의[^14]
- 매개변수: 함수 정의에서 사용하는 변수(a,b).
- 인수: 호출 시 넘기는 값(3,4).
- 다만 현실적으로 혼용이 많아 “함수에 들어가는 값” 정도로 이해해도 된다고 말한다.[^14]
3.19.3 입력/리턴 조합 4가지(없을 수도 있다) + print와 return 구분[^14]
- 입력 O / 리턴 O: 일반적인 형태(add).[^14]
- 입력 X / 리턴 O:
say()가 "hi"를 리턴,a=say()로 받는 예.[^14] - 입력 O / 리턴 X: 내부에서 print만 하고, 호출 결과는 None. “출력(프린트)과 리턴은 다르다”를 강조한다.[^14]
- 입력 X / 리턴 X: 실행만 하고 None(예: print("hi")).[^14]
3.19.4 키워드 인수(매개변수 이름 지정 호출), *args, **kwargs[^14]
sub(a=7,b=3)처럼 순서와 무관하게 지정 가능.[^14]*args로 가변 인수 받기:add_many(*args)로 여러 수 합산.[^14]- 응용: 첫 인수로 "add"/"mul"을 받고 나머지 args 처리하는 계산기 함수 예시.[^14]
**kwargs는 키-값 딕셔너리 형태로 받기(예:print_kwargs(a=1,b=2)).[^14]
3.19.5 return은 하나(여러 값은 튜플) + return은 함수 종료[^14]
return a+b, a*b는 사실 튜플 하나를 리턴하는 것이라고 설명하고, 튜플 언패킹으로 받을 수 있음을 보여준다.[^14]- return을 두 번 쓰면 첫 return에서 함수가 끝나므로 둘째 return은 의미 없다고 강조한다.[^14]
- return을 “특정 상황에서 함수 즉시 종료” 용도로도 쓸 수 있음(예: nickname이 "바보"면 return으로 빠져나감).[^14]
3.19.6 디폴트 인자(초기값): 기본값은 뒤에 와야 함[^14]
is_male=True같은 기본값을 지정하면 호출 시 생략 가능, 값 덮어쓰려면 False 전달.[^14]- 기본값이 있는 파라미터를 앞에 두면 오류가 나므로, “기본값 파라미터는 항상 뒤” 규칙을 설명한다.[^14]
3.19.7 지역변수 vs 전역변수(스코프), global, mutable/immutable과 결합된 대표 함정[^14]
a=1,def vartest(a): a=a+1후print(a)가 1인 이유: 함수 안 a는 지역변수, 바깥 a는 전역변수.[^14]- 전역 a를 바꾸려면:
- return으로 값을 받아
a=vartest(a)하거나[^14] global a로 전역을 직접 참조하는 방법도 가능하다고 설명한다.[^14]
- return으로 값을 받아
- 중요 종합 함정(뮤터블): 리스트를 인수로 넘기고 함수 안에서
b.append(4)하면, 지역변수 b는 사라져도 리스트 객체 자체가 변경되어 바깥 리스트가[1,2,3,4]가 된다는 예를 상세히 해설한다.[^14] - append는 None을 리턴, pop은 값을 리턴하는 차이(리턴 유무로 이해)까지 연결해 설명한다.[^14]
[!IMPORTANT] 이 강의에서 함수/변수/뮤터블-이뮤터블을 종합하는 핵심 포인트
“변수는 주소를 가리키며, mutable 객체는 함수 안에서 조작하면 바깥에서도 변화가 보일 수 있다”는 점을 가장 중요한 이해 포인트로 반복 강조한다.[^14]
3.19.8 람다(lambda): “패션 코딩”이지만 실무에서도 종종 사용[^14]
lambda a,b: a+b형태로 한 줄 함수 정의 가능.[^14]- 함수 이름 없이 리스트에 람다 함수들을 넣고
a[0](3,4)처럼 호출하는 예를 보여준다.[^14] - “실무에서도 은근히 많이 쓰며, 이름 붙이기 애매한 간단 함수 전달에 유용”하다고 말한다.[^14]
- 리턴 여부는 VS Code에서 마우스 올리면 시그니처로 확인 가능(append는 None, pop은 값 리턴)이라고 팁 제공.[^14]
3.19.9 사용자 입력 input(): 항상 문자열로 들어옴, 안내문구 가능, 형변환 필요[^14]
input()은 입력 대기 상태가 되며, 입력값을 변수에 저장해 출력 가능.[^14]input("숫자를 입력하세요: ")처럼 프롬프트 문자열도 넣을 수 있음.[^14]- 숫자를 입력해도
type()찍으면str이므로, 정수 연산을 하려면int(input(...))처럼 형변환해야 한다고 설명한다.[^14]
3.19.10 print(): 콤마 자동 띄어쓰기, end 파라미터로 줄바꿈 제어[^14]
print("a","b","c")는 자동으로 공백이 들어가 출력된다고 설명한다.[^14]- 기본 줄바꿈은
end="\n"이지만,end=" "로 바꾸면 한 줄로 이어 출력 가능(구구단에서 사용).[^14]
3.19.11 파일 쓰기/읽기: open 모드(w/r/a), 경로(상대/절대), 인코딩(utf-8), read/readline/readlines, with문[^14]
open("새파일.txt","w")로 파일 생성,write()로 내용 쓰기,close()필수라고 강조한다.[^14]- 상대 경로: 실행 위치 기준 파일 생성, 절대 경로:
C:/doit/...형태로 지정.[^14] - 한글 깨짐은 인코딩 문제로,
encoding="utf-8"지정으로 해결하는 예를 보여준다.[^14] - 읽기:
readline()한 줄- while로 readline 반복 +
if not line: break패턴으로 전체 읽기[^14] readlines()는 줄들을 리스트로 반환, for로 순회[^14]read()는 전체 문자열로 읽기[^14]- 파일 객체 자체를 for에 넣어 한 줄씩 반복 가능하다고 소개[^14]
- 줄바꿈이 중복되는 이유(라인 문자열 자체에
\n포함 + print의 기본 줄바꿈)를 설명하고,strip()으로 줄바꿈 제거 시연.[^14] - 추가 모드
a로 기존 내용 유지하며 덧붙이기.w는 덮어쓰기.[^14] with open(...) as f:는 블록이 끝나면 자동 close(지역 변수처럼 범위 종료)라는 관점으로 설명한다.[^14]
3.19.12 명령행 인수(sys.argv): 터미널 파라미터 받기[^14]
python script.py arg1 arg2 ...형태의 인수들이sys.argv리스트로 들어오며,argv[0]은 파일명이라는 점을 시연한다.[^14]- 인수 합산 예시, 대문자 변환 예시,
end=" "조합 출력 등 커맨드라인 프로그램 활용을 보여준다.[^14]
3.20 5장: 클래스/모듈/패키지/예외처리/내장함수/표준라이브러리/pip(외부 라이브러리)[^14]
3.20.1 클래스: 설계도(붕어빵틀/과자틀/SCV 생산)와 객체(인스턴스) 비유[^14]
- 클래스는 “반복되는 변수와 메서드(함수)”를 미리 정의한 틀/설계도이며, 객체(인스턴스)는 그 설계도로 찍어낸 결과물이라고 설명한다.[^14]
- 객체는 “값(속성) + 행동(메서드)” 두 가지로만 구성된다고 강조한다.[^14]
- 클래스는 어렵지만, “사용자 관점에서
a.method()/a.attr의미만 이해해도 많은 걸 할 수 있다”고 부담을 낮춘다.[^14]
3.20.2 계산기 예제로 클래스 필요성: 전역변수/함수 중복 vs 클래스 인스턴스 여러 개[^14]
- 클래스 없이 계산기 2대를 만들면
result1/result2,add1/add2처럼 변수·함수를 중복 작성해야 하는 비효율을 보여준다.[^14] - 클래스로 Calculator 설계도를 만들면
cal1=Calculator(),cal2=Calculator()처럼 여러 인스턴스를 찍어내어 서로 독립적인 상태로 계산 가능함을 비교한다.[^14]
3.20.3 메서드의 self, 속성 저장(setdata), 사칙연산 메서드 구현[^14]
def setdata(self, first, second): self.first=first; self.second=second구조를 만들고,a.setdata(4,2)호출 시 self는 a 객체 자신을 가리키며 first/second가 속성으로 저장됨을 설명한다.[^14]add/mul/sub/div메서드는self.first,self.second를 사용해 계산 후 return.[^14]
3.20.4 생성자 __init__: 인스턴스 생성 시 강제 초기화, 실수 방지[^14]
- setdata를 안 하고 add를 호출하면
attribute가 없어 오류가 나는 문제를 보여주고, 이를 막기 위해 생성자__init__(self, first, second)로 “생성 시점에 반드시 값 받게” 강제한다고 설명한다.[^14]
3.20.5 상속(Inheritance)과 오버라이딩(Override)[^14]
class MoreCalculator(Calculator): ...처럼 괄호에 부모 클래스를 넣으면 부모 기능을 그대로 물려받는다고 설명한다.[^14]- 자식에 새 메서드(예: 제곱
pow)를 추가해 확장 가능.[^14] - 오버라이딩: 부모의 div가 0으로 나누기 오류를 내는 문제를 자식이 div를 재정의하여 0일 때 0 반환하도록 바꾸는 예시로 “부모 vs 자식 충돌 시 자식이 이김”을 설명한다.[^14]
3.20.6 클래스 변수 vs 인스턴스 변수(속성)[^14]
- 클래스 레벨에
lastname="김"같은 값을 두면 모든 인스턴스가 공유하는 클래스 변수가 된다고 예시(김씨 집안)로 설명한다.[^14] - 인스턴스에서 값을 바꾸면 그 인스턴스만 바뀌고, 클래스 자체를 바꾸면 이후/기존 인스턴스에도 영향이 갈 수 있음을 보여준다.[^14]
3.20.7 모듈(module): 파이썬 파일을 import해 재사용[^14]
import mod1후mod1.add(3,4)처럼 사용.[^14]from mod1 import add는 add만 가져오므로mod1.없이add()호출 가능, 다만 가져오지 않은 함수는 못 쓴다는 차이를 설명한다.[^14]- 모듈 내부 테스트 코드가 import 시 실행되는 문제를 막기 위해
if __name__ == "__main__":패턴을 소개한다.[^14]
3.20.8 패키지(package): 모듈의 모음(폴더 구조), import 경로, init.py, * import 개념(올) 언급[^14]
- 게임 패키지 예시(게임/사운드/그래픽 하위 폴더)로
import game.sound.echo같은 경로 import를 시연한다.[^14] __init__.py의 역할,from ... import *가__all__에 의해 제어되는 개념을 언급하되 “초보는 이해/암기 불필요”라고 반복한다.[^14]- import 경로 문제는
sys.path.append("...")로 해결 가능하지만 역시 “대부분 설치가 해결”한다고 정리한다.[^14]
3.20.9 예외 처리(try/except/else/finally), 에러 강제 발생(raise), 사용자 정의 예외[^14]
- 예외 처리 구조가 if/else와 유사하며, try 블록에 위험 코드를 넣고 except에서 처리한다고 설명한다.[^14]
ZeroDivisionError,FileNotFoundError,IndexError등 예시.[^14]- finally는 오류 여부와 상관없이 실행(파일 close 같은 정리 작업).[^14]
- 여러 예외를 각각 처리하거나, 튜플로 묶어 한 번에 처리 가능.[^14]
- else는 “오류 없을 때” 수행되는 블록, 예시로 나이 입력/검증(미성년자/환영) 흐름을 보여준다.[^14]
- except에 pass를 두면 오류를 무시하고 계속 진행 가능(주의가 필요하지만 가능).[^14]
raise NotImplementedError로 “오버라이딩 강제” 패턴을 설명한다.[^14]Exception상속으로 사용자 정의 예외(MyError) 만들고,__str__오버라이딩으로 메시지 출력하는 예를 보여준다.[^14]
3.20.10 내장 함수/표준 라이브러리/외부 라이브러리(pip) 철학: 바퀴를 다시 만들지 말라[^14]
- 내장 함수는 매우 많아 “외우지 말고 필요하면 찾아 쓰라”고 강조한다.[^14]
- 표준 라이브러리는 import만 하면 되는 기본 제공 라이브러리(예: datetime, time)이며, 날짜 차이 계산, 실행 시간 측정, sleep(1초) 등 예시를 든다.[^14]
- 외부 라이브러리는 PyPI에서 찾아
pip install 패키지명으로 설치한다.[^14] pip list로 설치 목록 확인, 특정 버전 설치/업그레이드 방법도 안내한다.[^14]- faker 라이브러리를 설치해 가짜 이름/주소/텍스트를 생성하는 예시를 시연하고, 사용법은 문서/검색으로 배우는 것이라고 설명한다.[^14]
3.21 6장 실전: 문제 해결 사고(입력/출력), 구구단/배수합/페이징/메모장/탭→공백/하위 디렉터리 검색[^14]
3.21.1 “프로그램을 만들 수 있을까”: 2단 만들기(입력/출력 사고)[^14]
- 함수 이름(구구), 입력(단), 출력(2단 결과 리스트)부터 설계하라고 소개한다.[^14]
- 처음엔 무식하게 append를 9번 쓰는 형태를 보여준 뒤, while로 1~9 반복하여 리스트에
n*iappend하는 형태로 개선한다.[^14]
3.21.2 3과 5의 배수 합(1~999)[^14]
- for/range로 1~999 생성,
%로 배수 판정,if i%3==0 or i%5==0: result += i형태로 합산.[^14] - 실수 포인트: 조건을 두 개 if로 분리하면 15 같은 공배수가 중복 더해지는 문제 → or 하나로 묶어 해결.[^14]
3.21.3 게시판 페이징(총 페이지 수)[^14]
- 입력: 총 게시물 m, 페이지당 n. 출력: 총 페이지 수.[^14]
- 단순히
m//n + 1은 m이 n으로 딱 나누어떨어질 때(예: 30,10) 오답(4)이 되므로,m % n == 0일 때는m//n, 아니면m//n + 1로 분기 처리한다.[^14]
3.21.4 간단 메모장: sys.argv + 파일 append/read[^14]
python memo.py -a "내용"이면 memo.txt에 추가(append 모드, 줄바꿈 포함).[^14]python memo.py -v이면 읽기 모드로 전체 출력.[^14]- argv[1] 옵션, argv[2] 메모 내용 구조를 확인하며 구현한다.[^14]
3.21.5 탭을 공백 4칸으로 변환: 파일 read→replace→write[^14]
python tabto4.py a.txt b.txt로 a.txt를 읽고\t를" "*4로 replace 후 b.txt로 저장.[^14]\t가 탭 문자라는 점과 문자열 곱하기를 결합해 공백 4칸을 만든다.[^14]
3.21.6 하위 디렉터리에서 .py 찾기: os.listdir/os.path.join/splitext/isdir + 재귀, 또는 os.walk[^14]
- os.listdir로 목록을 얻고, join으로 전체 경로를 만든 뒤 확장자(spliext의 -1)로
.py여부 판단해 출력.[^14] - 하위 폴더는 isdir이면 재귀적으로 같은 함수를 다시 호출(재귀 함수)하여 탐색한다.[^14]
- 접근 권한 문제는 try/except로 pass 처리.[^14]
- 더 간단한 방법으로
os.walk를 소개하며 코드 축약을 보여준다.[^14]
3.22 7장 심화: 유니코드, 클로저/데코레이터, 이터레이터/제너레이터, 타입 어노테이션[^14]
- 7장은 “심화”로, 이해 못해도 실무에 큰 문제는 없으며 “지적 허영심/참고” 성격이라 부담을 낮춘다.[^14]
3.22.1 유니코드/인코딩/디코딩(ASCII vs EUC-KR vs UTF-8)[^14]
- ASCII는 영어 중심이라 다국어(한글)가 안 되고, 유니코드는 통합 표준이라 설명한다.[^14]
- 파이썬 3은 문자열을 기본적으로 유니코드로 처리.[^14]
- 인코딩: 문자열을 bytes로 변환(
encode("utf-8")), 타입이 bytes가 됨.[^14] - 한글을 ascii로 encode하면 에러, euc-kr 또는 utf-8로 encode 가능.[^14]
- 디코딩: bytes를 다시 문자열로(
decode("euc-kr")). 인코딩과 디코딩 방식이 일치해야 하며, 다르면 에러가 난다고 강조한다.[^14] - 파일 입출력에서 encoding 지정의 중요성을 다시 연결한다.[^14]
3.22.2 클로저: “함수 안의 함수 + 내부 함수 리턴”[^14]
- 3을 곱하는 함수, 5를 곱하는 함수 등 반복을 줄이기 위해:
- 클래스(Mul)로 multiplier를 만들 수 있고[^14]
- 더 단순하게는
mul(m)이 내부함수 wrapper(n)=m*n을 리턴하는 방식(클로저)으로 구현 가능하다고 설명한다.[^14]
3.22.3 데코레이터: 기존 함수에 기능(실행 시간 측정) 덧씌우기[^14]
- time 모듈로 start/end를 재는 코드를 모든 함수에 넣기 번거로움 → 클로저로 “측정 템플릿”을 만들고 함수(원본 함수)를 인수로 받아 wrapper에서 실행 후 시간 출력.[^14]
@decorator문법으로 함수 위에 붙여 간단히 적용 가능하다고 설명한다.[^14]- 데코레이터 적용 함수가 매개변수를 가질 때는 wrapper가
*args, **kwargs로 받아 원본 함수에 전달해야 오류가 안 난다고 수정 과정을 보여준다.[^14]
3.22.4 이터레이터/제너레이터: next, iter, StopIteration, 레이지 평가[^14]
- 리스트는 반복 가능(iterable)이지만 iterator는 아니며,
iter(a)로 iterator로 바꿔next()사용 가능하다고 설명한다.[^14] - next를 다 쓰면 StopIteration 예외가 나고, for문은 내부에서 이를 처리해 종료한다고 연결한다.[^14]
- iterator는 한 번 소비하면 다시 못 읽는 특징도 시연한다.[^14]
- iterator를 클래스로 직접 구현(
__iter__,__next__)하는 예시와 역방향 iterator 예시를 보여준다.[^14] - 제너레이터:
yield를 쓰는 함수, next로 값을 순차 반환. - 제너레이터 표현식: 리스트 컴프리헨션에서
[]대신()를 쓰면 제너레이터가 된다고 설명한다.[^14] - 리스트로 작업하면 모든 결과를 미리 계산하지만, 제너레이터는 필요할 때만 계산(레이지 평가)해서 오래 걸리는 작업에서 효율적이라고 예시로 보여준다(1초 sleep 작업).[^14]
3.22.5 타입 어노테이션: 동적 언어 파이썬에서 “힌트” 제공, mypy로 검사 가능[^14]
- 파이썬은 동적 타입 언어라 변수 타입이 실행 중 바뀔 수 있음(
a=1→ int,a="1"→ str).[^14] - 자바 등 정적 타입 언어는 타입 불일치 시 컴파일 에러.[^14]
- 파이썬 3.5+ 타입 어노테이션은
num: int,def add(a:int, b:int) -> int:처럼 힌트 제공하지만, 런타임 오류를 강제하지는 않는다고 설명한다.[^14] - mypy를 설치(pip)해 타입 체크를 수행하면 어노테이션 위반을 에러로 잡아낼 수 있다고 소개한다.[^14]
3.23 8장 정규표현식: 필요성(주민번호 마스킹), 메타문자, re 모듈, 패턴/매치객체, 옵션, 고급 기능(그룹/전방탐색/치환/논그리디)[^14]
3.23.1 왜 정규식이 필요한가: 주민번호 뒷자리 마스킹 예시[^14]
- 정규식 없이 구현하면 split/검사/재조립 등 코드가 길고 복잡하지만, 정규식으로 패턴을 잡으면 몇 줄로 해결 가능하다고 대비한다.[^14]
3.23.2 메타 문자 핵심: 문자 클래스[], ., *, +, {m,n}, ?[^14]
[]는 해당 문자 중 하나와 매치,-로 범위 지정.[^14].은 줄바꿈 제외 모든 문자 1개.[^14]*0회 이상,+1회 이상,{m,n}반복 횟수 범위,?는 0 또는 1회.[^14]
3.23.3 re 사용: compile→match/search/findall/finditer[^14]
match는 문자열 시작부터 매치,search는 문자열 전체에서 첫 매치,findall은 리스트로 전부,finditer는 이터레이터로 전부(매치 객체) 반환.[^14]- 매치 객체 메서드:
group(),start(),end(),span().[^14]
3.23.4 컴파일 옵션: DOTALL(S), IGNORECASE(I), MULTILINE(M), VERBOSE(X)[^14]
- DOTALL은
.이 줄바꿈도 포함하도록.[^14] - IGNORECASE는 대소문자 무시.[^14]
- MULTILINE은
^,$가 각 줄에도 적용되도록.[^14] - VERBOSE는 공백/주석을 허용해 복잡한 패턴을 읽기 쉽게 작성.[^14]
3.23.5 백슬래시 이슈와 raw string r"..."[^14]
- 정규식과 파이썬 문자열 모두에서 백슬래시가 특수 의미라 이스케이프가 복잡해지므로
r"..."로우 스트링 사용을 권장한다.[^14]
3.23.6 고급: |, ^/$, \A/\Z, \b/\B, 그룹/재참조/이름붙이기, 전방탐색, sub 치환, 논그리디[^14]
|는 OR.^/$는 시작/끝,\A/\Z는 멀티라인과 무관한 전체 문자열 시작/끝.[^14]\b단어 경계,\B비경계.[^14]- 그룹핑
(...)과group(n), 중첩 그룹,\1재참조,(?P<name>...)이름 그룹,(?P=name)재참조.[^14] - 전방탐색:
- 긍정
(?=...)는 조건 확인하되 소비하지 않음(콜론 제외 http 예시).[^14] - 부정
(?!...)는 특정 패턴 제외(bat/exe 제외 파일 찾기 예시).[^14]
- 긍정
sub()로 치환, 횟수 제한, 그룹 참조 치환, 치환에 함수 전달 가능.[^14]- 그리디(
*가 최대한 먹음) vs 논그리디(*?로 최소 매치) 예시로<html>...</html>에서 첫 태그만 매치하도록 설명한다.[^14]
3.23.7 정규식 학습 태도: AI(ChatGPT)가 잘하니 부담 낮추기[^14]
- 정규식은 어렵고 요즘은 AI가 패턴 생성/해설을 잘하므로 “완벽 암기/숙련”에 부담 갖지 말라고 말한다.[^14]
4. 핵심 통찰[^6]
- [h 파이썬 학습의 출발점은 ‘설치/환경’이다] PATH 체크, 인터프리터 선택, VS Code 확장 설치처럼 초반 세팅이 막히면 학습이 멈추므로 가장 먼저 해결해야 한다.[^5]
- [h 자료형은 결과를 바꾸는 근본 변수다] 같은
1+1도 숫자/문자열 여부에 따라 2 또는 "11"이 되므로, 자료형 이해가 모든 문법의 바탕이다.[^6] - [c “할당은 값이 아니라 참조(주소)”라는 관점이 이후 모든 헷갈림을 해결한다] 리스트 복사/함수 인수 전달/지역변수-전역변수/뮤터블 변형 문제는 주소 참조를 이해하면 일관되게 설명된다.[^7]
- [h 파이썬의 규격(들여쓰기/콜론) 강제는 가독성과 협업을 위한 장치다] 느슨한 언어 대비 초반엔 불편하지만, 코드 구조를 명확히 만든다는 메시지로 연결된다.[^11]
- [h 반복/조건/함수는 “프로그램 구조”의 3대 축이다] 조건문이 흐름을 나누고, 반복문이 자동화를 만들며, 함수가 반복 로직을 재사용 단위로 묶는다.[^14]
- [m 문법 암기보다 “어떤 기능이 있고 어떻게 찾아 쓰는지”가 현실적인 역량이다] 내장함수/표준라이브러리/외부라이브러리는 광범위하므로, 핵심은 검색·문서·도구를 활용해 가져다 쓰는 것이다.[^14]
- [m 심화 주제(데코레이터/제너레이터/정규식)는 ‘필요할 때’ 다시 보면 된다] 강의도 심화 파트를 “이해 못해도 문제 없음”으로 위치시키며 학습 부담을 조절한다.[^14]
- 실행 행동 항목
python설치 시 [h PATH 체크]를 최우선으로 하고, cmd/powershell에서python --version으로 확인한다.[^5]- VS Code에서 [h Python extension 설치 + 인터프리터 선택]을 먼저 완료한 뒤 실습을 진행한다.[^5]
- 자료형·리스트·딕셔너리·함수·제어문은 직접 예제를 치고, 막히면 REPL/디버거로 한 줄씩 확인한다.[^14]
- 문자열/정규식/파일 인코딩 문제는 [h utf-8 지정]을 기본으로 하고, 깨질 때만 원인(인코딩 불일치)을 추적한다.[^14]
- 모르는 메서드 리턴(None 여부 등)는 VS Code 시그니처/문서/검색으로 확인한다.[^14]
5. 헷갈리는 용어 정리 (해당 시에만)[^14]
- REPL:
>>>에서 한 줄씩 입력하면 바로 실행 결과가 나오는 대화형 실행 환경.[^5] - PATH: 터미널에서
python같은 명령을 인식하도록 실행 파일 경로를 등록하는 환경 변수.[^5] - 자료형(Type): 값의 종류(정수/실수/문자열/리스트 등)로, 연산 결과와 동작 규칙을 결정.[^6]
- 할당(=): 수학의 같음이 아니라 “오른쪽 값을 왼쪽 변수에 넣음”. 파이썬에서는 객체 참조(주소) 관점이 중요.[^7]
- 뮤터블/이뮤터블(mutable/immutable): 변경 가능한 자료형(리스트/딕셔너리/집합) vs 변경 불가(정수/실수/문자열/튜플).[^7]
- 메서드(Method): 객체(문자열/리스트/클래스 인스턴스 등)에 붙어 있는 함수. 강의에서는 “함수와 비슷”하게 설명.[^6]
- 클래스(Class) / 객체(Object) / 인스턴스(Instance): 설계도(클래스)로 찍어낸 결과물(객체/인스턴스). 강의에서는 큰 틀에서 거의 동일한 의미로 이해해도 된다고 안내.[^14]
- 모듈(Module) / 패키지(Package): 모듈은 파이썬 파일 단위 재사용, 패키지는 모듈을 폴더 구조로 묶은 단위.[^14]
- 예외 처리(Exception handling): 오류가 발생했을 때 프로그램이 죽지 않도록 try/except 등으로 흐름을 제어.[^14]
- 정규표현식(Regex): 문자열에서 특정 “패턴”을 찾거나 치환하는 규칙 언어.[^14]
참고(콘텐츠 정보)^1
- 제목: 최신 파이썬 코딩 무료 강의 | 2024 점프 투 파이썬 통합본^1
- 채널: 조코딩 JoCoding^1
- 길이: 518분 39초^1
- 링크: https://www.youtube.com/watch?v=ftQZo7XaTOA^1
[^3]: @[00:27]~@[03:21] 파이썬 기원/역사/사용처/이름 유래/인간다운 언어/특징 [^4]: @[20:13] "파이썬을 직접적으로 설치…" [^5]: @[20:29]~@[45:16] 파이썬 설치, PATH, REPL/IDLE/터미널, VS Code 설치/확장/인터프리터 [^6]: @[51:48]~@[02:01:20] 자료형(숫자/문자열/리스트) 전개 [^7]: @[02:01:24]~@[03:03:17] 튜플/딕셔너리/집합/불/변수(주소)/복사/할당/스왑 [^8]: @[00:05]~@[08:38:11] 전체 강의 흐름(점프투파이썬 전 범위) 전개 [^9]: @[03:04:21]~@[08:38:05] 제어문→함수/입출력→클래스/모듈/예외→실전→심화→정규식 [^10]: @[56:04]~@[44:10] VS Code 중심 실습 흐름, 설치/실행/학습 진행 방식 [^11]: @[04:46]~@[12:57] 파이썬 특징(쉬움/무료/간결/즐거움), 들여쓰기 강제, Life is too short 비유 [^12]: @[05:38]~@[09:44] C 결합/접착 언어, 컴파일 vs 인터프리터, Mojo 언급 [^13]: @[50:08]~@[51:42] ChatGPT 디버깅/영어 질문 정확도, 문법 암기보다 도구 활용 관점 [^14]: @[03:04:21]~@[08:37:44] 3장 제어문, 4장 함수/입출력/파일, 5장 클래스/모듈/예외, 6장 실전, 7장 심화, 8장 정규식