Python 정복
목차 24
4과목 프로그래밍 파트에서 가장 자주 떨어지는 언어가 Python이다. 자료형 특성·슬라이싱·코드 추론이 과목당 20문항 중 3~4문항 고정 출제되는 빈출 핵심이다. 두 황금 규칙 ★인동들★(Python 3대 특징)과 ★시포끝미★(슬라이싱·range 공통 규칙)을 축으로, 자료형 4종·불변 3종·제어문·함수·객체지향·신경향(컴프리헨션·lambda)까지 한 강에 정리한다. 39~42강에서 다룬 C(절차·정적·중괄호)·Java(정적·중괄호)와 대비해, Python의 인터프리터·동적 타입·들여쓰기가 시험 1순위 함정이다.
대단원 1 — Python의 정체성 (★인동들★)
★인동들★ — Python 3대 특징 ·언어 개요·시험 1순위·
[정의] Python = 1991년 귀도 반 로섬(Guido van Rossum)이 발표한 언어. 세 가지 특징으로 정의된다.
[표] ★인동들★ — 인터프리터 · 동적 타이핑 · 들여쓰기
| 두음 | 특징 | 한 줄 정의 | 시험 포인트 |
|---|---|---|---|
| 인 | 인터프리터(Interpreter) | 코드를 한 줄씩 즉시 실행 (별도 컴파일 단계 없음) | 38강 ★컴인어★ 中 인 회수 |
| 동 | 동적 타이핑(Dynamic Typing) | 변수 선언 시 자료형 명시 X (a = 10 한 줄) |
실행 중 타입 결정·같은 변수 다른 타입 재대입 OK |
| 들 | 들여쓰기(Indentation) | 중괄호 {} 대신 들여쓰기로 코드 블록 구분 |
C·Java 중괄호 ↔ Python 들여쓰기 |
🔑 암기 ★인동들★ — 인터프리터·동적·들여쓰기. 세 글자로 Python 특징 짝짓기 즉답. ⚠️ 함정 "Python은 컴파일 언어 / 정적 타이핑 / 중괄호로 블록 구분" 3종이 단골 오답 보기. 모두 인동들에 어긋난다. 🎯 빈출 Python 특징을 묻는 "옳지 않은 것" 문제가 거의 매 회차 출제. 인동들에 어긋난 보기가 정답.
C · Java · Python 8행 비교 ·언어 개요·시험 1순위·
[정의] 세 언어를 한 표로 정렬한 짝짓기 카드. Python 열의 굵은 항목이 "옳지 않은 것"으로 자주 뒤집혀 출제된다.
[표] 3개 언어 8항목 비교
| 비교 항목 | C | Java | Python |
|---|---|---|---|
| ① 번역 방식 | 컴파일러 | 컴파일 + JVM 하이브리드 | 인터프리터 |
| ② 타입 지정 | 정적 (int a;) |
정적 (int a;) |
동적 (a = 10) |
| ③ 코드 블록 | 중괄호 { } |
중괄호 { } |
들여쓰기 |
| ④ 세미콜론 | 필수 | 필수 | 불필요 |
| ⑤ 메모리 관리 | 수동 (직접 할당·해제) | 자동 (GC) | 자동 (GC) |
| ⑥ 객체지향 | 비객체지향 | 객체지향 (클래스 기반) | 객체지향 + 덕 타이핑 |
| ⑦ 등장 연도 | 1972 (데니스 리치) | 1995 (제임스 고슬링) | 1991 (귀도 반 로섬) |
| ⑧ 대표 도메인 | 시스템·임베디드 | 대규모 서버·안드로이드 | AI/ML·데이터 분석 |
# C: int a = 10; ← 자료형 명시 + 세미콜론
# Java: int a = 10; ← 자료형 명시 + 세미콜론
# Python: a = 10 ← 자료형 X · 세미콜론 X
a = 10 # int
a = "Hello" # 같은 변수에 str 재대입 → Python OK (C/Java는 컴파일 오류)
🔑 암기 Python = 동적 + 들여쓰기 + 세미콜론 없음. C·Java는 정적 + 중괄호 + 세미콜론.
⚠️ 함정 타입 검사는 type(10) → <class 'int'>, isinstance(10, int) → True. Java의 instanceof는 키워드, Python의 isinstance는 내장 함수.
🎯 빈출 ①~⑧ 짝짓기 1문제가 거의 매 회차. 특히 ②③④의 정적/동적·중괄호/들여쓰기 대비.
대단원 2 — 연산과 입력 함정
나눗셈 3종 · 문자열 연산 · input() = str ·기본 문법·시험 1순위·
[정의] Python 연산자 중 나눗셈 3종과 문자열 연산, 그리고 input()의 반환 타입이 코드 추론 함정의 핵심이다.
# 나눗셈 3종
print(7 / 2) # 3.5 ← / : 실수 나눗셈(항상 float)
print(7 // 2) # 3 ← // : 정수 나눗셈(몫만)
print(7 % 2) # 1 ← % : 나머지
# 문자열 연산
print("3" + "5") # 35 ← 문자열 연결
print(3 + 5) # 8 ← 정수 덧셈
print("ab" * 3) # ababab ← 문자열 반복
# input() 은 항상 str 반환
a = input() # 25 입력 → a = "25" (str!)
b = int(input()) # 25 입력 → b = 25 (int) → 계산 가능
[표] 형변환 함수
| 함수 | 용도 | 예시 |
|---|---|---|
int(x) |
정수로 | int("25") → 25 |
float(x) |
실수로 | float("3.14") → 3.14 |
str(x) |
문자열로 | str(25) → "25" |
list(x) |
리스트로 | list("abc") → ['a','b','c'] |
set(x) |
집합으로 | set([1,1,2]) → {1,2} |
🔑 암기 /는 실수(3.5), //는 몫(3), %는 나머지(1). input()은 무조건 str.
⚠️ 함정 "3" + 5 → TypeError (str + int 불가). 숫자 계산하려면 int()·float() 형변환 필수.
🎯 빈출 7/2=3.5(3이라고 답하면 오답)·input()=str이 코드 추론 문항에서 매 회차 결정.
대단원 3 — 자료형 4종과 불변성
자료형 4종 + 불변 3종 — 가변/불변 마스터 분별표 ·자료형·시험 1순위·
[정의] Python 자료형 4종(리스트·튜플·딕셔너리·집합)과, 한 번 만들면 수정 불가한 불변(Immutable) 3종(숫자·문자열·튜플)을 한 표로 분별한다.
[표] 자료형 6항목 분별
| 자료형 | 표기 | 변경 | 순서 | 중복 | 빈 표기 | 비유 |
|---|---|---|---|---|---|---|
| 리스트 | [1, 2, 3] |
✅ 가변 | ✅ | ✅ | [] |
만능 도시락 |
| 튜플 | (1, 2, 3) |
❌ 불변 | ✅ | ✅ | () |
잠금 도시락 |
| 딕셔너리 | {'a':1} |
✅ 가변 | ✅(3.7+) | ❌ 키 | {} |
국어사전 |
| 집합 | {1, 2, 3} |
✅ 가변 | ❌ | ❌ | set() |
중복 없는 가방 |
[표] 불변 3종 vs 가변 3종
| 구분 | 자료형 | 변경 |
|---|---|---|
| 불변 | 숫자(int·float) · 문자열(str) · 튜플(tuple) | ❌ |
| 가변 | 리스트 · 딕셔너리 · 집합 | ✅ |
s = "Hello"
s[0] = "h" # TypeError — str 불변이라 수정 불가
t = (1, 2, 3)
t[0] = 100 # TypeError — tuple 불변
lst = [1, 2, 3]
lst[0] = 100 # OK → [100, 2, 3] — 리스트는 가변
🔑 암기 불변 3종 = 숫자·문자열·튜플. 나머지(리스트·딕셔너리·집합)는 가변. 본드로 굳은 레고 블럭은 모양 바꾸려면 새로 만들어야 한다. ⚠️ 함정 "Python 불변 자료형은 리스트" → 오답(리스트는 가변). "튜플은 변경 가능" → 오답. 불변 자료형 원소에 대입하면 TypeError. 🎯 빈출 "불변 자료형이 아닌 것은?" / "가변 자료형은?" 짝짓기가 매 회차. 튜플의 불변성이 핵심.
리스트 — pop(2) vs remove(20) 함정 ·자료형·
[정의] 리스트(만능 도시락)는 자료형 4종 중 가장 많이 쓰이는 가변 자료형. 메서드의 "인덱스 기준 / 값 기준 / 반환값" 구분이 함정이다.
lst = [10, 20, 30]
lst.append(40) # 끝에 추가 → [10, 20, 30, 40]
lst.insert(1, 15) # 인덱스 1에 삽입 → [10, 15, 20, 30, 40]
lst.pop() # 마지막 원소 제거 + 반환
lst.pop(2) # 인덱스 2 위치 원소 제거 (값 2가 아님!)
lst.remove(20) # 값 20을 첫 번째로 제거 (인덱스 아님!)
del lst[0] # 인덱스 0 제거 (반환 없음)
lst.sort() # 원본 정렬 (반환 None)
sorted(lst) # 새 리스트 반환 (원본 보존)
[표] 메서드 함정 3쌍
| 메서드 | 동작 | 함정 |
|---|---|---|
pop(2) |
인덱스 2 위치 원소 제거 | "값 2 제거" → 오답 |
remove(20) |
값 20 첫 번째 제거 | "인덱스 20 제거" → 오답 |
sort() |
원본 변경, 반환 None | x = lst.sort() → x는 None |
sorted(lst) |
새 리스트 반환 | 원본 보존 |
🔑 암기 pop은 인덱스, remove는 값, sort()는 원본 바꾸고 None 반환.
⚠️ 함정 x = lst.sort()에서 x는 정렬 리스트가 아니라 None. 정렬 결과를 받으려면 sorted().
🎯 빈출 pop(2)의 인덱스/값 혼동이 단골. 코드 추론에서 결과 리스트를 묻는다.
튜플 — (1,) 콤마 필수 ·자료형·
[정의] 튜플(잠금 도시락)은 불변 3종 중 하나. 1요소 튜플의 콤마와 언패킹이 함정이다.
t1 = (1, 2, 3) # 일반 튜플
t2 = (1,) # 1요소 튜플 — 콤마가 본체
t3 = (1) # 정수 1 (튜플 X — 그냥 괄호!)
t4 = 1, 2, 3 # 괄호 생략 OK (튜플 패킹)
# 튜플 언패킹
a, b = 1, 2 # a=1, b=2
a, b = b, a # swap 한 줄! (C/Java는 임시 변수 필요)
[표] 튜플 vs 리스트
| 비교 | 튜플(잠금) | 리스트(만능) |
|---|---|---|
| 표기 | ( ) |
[ ] |
| 변경 | ❌ 불변 | ✅ 가변 |
| 메서드 | count · index만 | append · pop · sort 등 |
| dict 키로 | ✅ 가능 (불변이라) | ❌ 불가 |
🔑 암기 (1) = 정수 / (1,) = 튜플. 콤마가 튜플의 본체.
⚠️ 함정 type((1))은 int, type((1,))은 tuple. 1요소 튜플에 콤마를 빠뜨리면 튜플이 아니다.
🎯 빈출 (1,) 콤마 함정이 매년 1문제. 튜플이 불변이라 dict 키·set 원소로 쓸 수 있다는 점도 출제.
딕셔너리 — d.get vs KeyError ·자료형·시험 1순위·
[정의] 딕셔너리(국어사전)는 "키→값" 쌍으로 저장하는 가변 자료형. 없는 키 조회 시 동작 차이가 핵심 함정이다.
d = {'이름': '홍길동', '나이': 25}
print(d['이름']) # 홍길동
print(d['주소']) # KeyError — 없는 키
print(d.get('주소')) # None — 예외 없이 안전 조회
print(d.get('주소', '미입력')) # 미입력 — 기본값 반환
d['주소'] = '서울' # 추가
del d['나이'] # 삭제
print('이름' in d) # True (in은 키만 검사 — 값 아님!)
[표] 없는 키 조회 시
| 패턴 | 키 없을 때 | 함정 |
|---|---|---|
d[key] |
KeyError (예외) | 매년 단골 |
d.get(key) |
None (예외 X) | 안전 조회 |
d.get(key, 0) |
0 (기본값 반환) | 기본값 패턴 |
'값' in d |
False | in은 키만 검사 |
🔑 암기 d[키] = KeyError 위험 / d.get(키) = None 안전 / 3.7+는 입력 순서 유지.
⚠️ 함정 딕셔너리 키는 중복 불가(값은 중복 가능). {'a':1, 'a':2} → {'a': 2}로 뒤가 앞을 덮어쓴다.
🎯 빈출 d[키](KeyError)와 d.get(키)(None) 대비가 매 회차 1순위. d.get(키, 기본값) 결과 추론도 단골.
집합 — 중복 자동 제거 + 4대 연산 ·자료형·
[정의] 집합(중복 없는 가방)은 수학의 집합과 같다. 중복 X · 순서 X · 인덱스 접근 X. 데이터 중복 제거와 집합 연산에 쓴다.
s = {1, 1, 2, 2, 3} # → {1, 2, 3} 중복 자동 제거
e = set() # 빈 집합 ({} 는 빈 딕셔너리!)
# 4대 연산 (A={1,2,3,4}, B={3,4,5,6})
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # {1, 2, 3, 4, 5, 6} 합집합
print(A & B) # {3, 4} 교집합
print(A - B) # {1, 2} 차집합
print(A ^ B) # {1, 2, 5, 6} 대칭 차집합
[표] 집합 4대 연산
| 연산 | 기호 | 메서드 | 결과(A={1,2,3,4}, B={3,4,5,6}) |
|---|---|---|---|
| 합집합 | | |
.union() |
{1,2,3,4,5,6} |
| 교집합 | & |
.intersection() |
{3,4} |
| 차집합 | - |
.difference() |
{1,2} |
| 대칭차 | ^ |
.symmetric_difference() |
{1,2,5,6} |
🔑 암기 집합 = 중복 X · 순서 X · 인덱스 X. - 차 / & 교 / | 합 / ^ 대칭차.
⚠️ 함정 빈 집합은 set(). {}는 빈 딕셔너리다. 집합은 순서가 없어 s[0] 인덱스 접근 시 TypeError.
🎯 빈출 4대 연산 결과 추론이 매 회차. 종이에 벤다이어그램을 그리면 즉답.
대단원 4 — 인덱싱과 슬라이싱 (★시포끝미★)
인덱스 + ★시포끝미★ 슬라이싱 기본 ·슬라이싱·시험 1순위·
[정의] 인덱스는 0부터 시작, 음수는 -1부터 끝에서 센다. 슬라이싱 [start:end]은 ★시포끝미★ — 시작은 포함, 끝은 미포함.
문자열 "PYTHON"
+인덱스: 0 1 2 3 4 5
P Y T H O N
-인덱스: -6 -5 -4 -3 -2 -1
s = "PYTHON"
print(s[0]) # P ← 첫 글자(0부터)
print(s[-1]) # N ← 마지막(음수는 -1부터)
print(len(s)) # 6 ← 길이는 len()
print(s[6]) # IndexError — 범위 초과
# 슬라이싱 — ★시포끝미★
print(s[2:5]) # THO ← 인덱스 2·3·4 (5는 미포함)
print(s[:3]) # PYT ← 0부터 2까지
print(s[3:]) # HON ← 3부터 끝까지
print(s[:]) # PYTHON ← 전체 복사
[표] ★시포끝미★ — 슬라이싱 황금 규칙
| 두음 | 의미 |
|---|---|
| 시포 | 시작은 포함(Start Inclusive) |
| 끝미 | 끝은 미포함(End Exclusive) |
🔑 암기 ★시포끝미★ — 시작 포함, 끝 미포함. s[2:5]는 2·3·4(3개), 5는 빠진다. end - start = 개수.
⚠️ 함정 s[2:5]를 "인덱스 2·3·4·5(4개)"로 보면 오답. 슬라이싱은 범위를 초과해도 IndexError 없이 빈 문자열 반환(단일 인덱스 s[6]은 IndexError).
🎯 빈출 시포끝미가 매 회차 1순위. 끝값 미포함 한 줄로 슬라이싱 함정 대부분이 풀린다.
슬라이싱 심화 — step · 역순 · 뒤 N개 ·슬라이싱·시험 1순위·
[정의] 슬라이싱 3인자 표기 a[start:end:step]. step이 추가되면 짝수 추출·역순까지 한 줄로 표현한다.
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(a[::2]) # [0, 2, 4, 6, 8] ← step 2 (짝수 인덱스)
print(a[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] ← 역순 전체
print(a[-3:]) # [7, 8, 9] ← 뒤 3개(음수 start)
print(a[5:1:-1]) # [5, 4, 3, 2] ← 역순에도 시포끝미
[표] 심화 표기
| 표기 | 결과 | 핵심 |
|---|---|---|
a[::-1] |
역순 전체 | Python 역순 한 줄 |
a[::2] |
짝수 인덱스 | step = 2 |
a[-3:] |
뒤 3개 | 음수 start |
a[5:1:-1] |
[5, 4, 3, 2] |
역순에도 end 미포함 |
🔑 암기 a[::-1] 역순 · a[::2] 짝수 · a[-3:] 뒤 3개.
⚠️ 함정 a[5:1:-1]은 역순이라도 시포끝미 적용 — start 5 포함, end 1 미포함 → 5·4·3·2(인덱스 1은 빠짐).
🎯 빈출 a[start:end:step]의 step·음수 조합 추론이 신경향 코드 문항에서 단골.
range() — 시포끝미 동일 철학 ·슬라이싱·
[정의] range()는 반복문에서 가장 많이 쓰이며, 슬라이싱과 동일하게 ★시포끝미★를 따른다.
list(range(5)) # [0, 1, 2, 3, 4] ← 0부터 5 미포함
list(range(1, 5)) # [1, 2, 3, 4] ← 1 포함, 5 미포함
list(range(1, 10, 2)) # [1, 3, 5, 7, 9] ← step 2
list(range(10, 0, -1)) # [10, 9, 8, ..., 1] ← 역순
list(range(5, 1)) # [] ← start ≥ end (step 양수) → 빈 range
[표] range 표기
| 표기 | 결과 | 핵심 |
|---|---|---|
range(5) |
0·1·2·3·4 | start 0 · 끝 미포함 |
range(1, 5) |
1·2·3·4 | 시포끝미 |
range(1, 10, 2) |
1·3·5·7·9 | step 2 |
range(5, 1) |
빈 range | step 양수인데 start ≥ end |
🔑 암기 range도 시포끝미. range(1, 11) = 1~10 정확히 10개. end - start = 개수.
⚠️ 함정 range(5, 1)은 step이 양수(기본값 1)인데 start ≥ end라 빈 range. 역순은 range(5, 1, -1).
🎯 빈출 range(2, 11, 2) 같은 step 표기를 for 합산과 묶어 출제(끝값 미포함이 결정).
대단원 5 — 제어문과 함수
조건문 if/elif/else — 들여쓰기가 문법 ·제어문·
[정의] Python의 들여쓰기는 가독성이 아니라 문법이다(PEP 8 권장 공백 4칸). 조건은 if 조건: 콜론 뒤 들여쓰기로 블록을 만든다.
age = 25
if age < 13:
print("어린이") # 4칸 들여쓰기 = 같은 블록
elif age < 20:
print("청소년")
else:
print("성인") # age=25 → 성인
# 삼항 표현식 (한 줄 if)
status = "성인" if age >= 20 else "미성년" # 성인
# 비교·논리 연산자
a and b # C의 a && b
a or b # C의 a || b
not a # C의 !a
[표] Python vs C/Java 조건문
| Python | C/Java |
|---|---|
if 조건: (콜론) |
if (조건) { ... } |
| 들여쓰기로 블록 | 중괄호 { } |
elif |
else if |
| 세미콜론 X | 세미콜론 필수 |
🔑 암기 if 조건: 콜론 + 4칸 들여쓰기 + elif(else if 아님). 논리 연산은 단어 and·or·not.
⚠️ 함정 들여쓰기가 안 맞으면 IndentationError로 실행 자체가 안 된다. C·Java에서 들여쓰기는 권장이지만 Python에서는 문법.
🎯 빈출 elif 표기·삼항 표현식·들여쓰기 블록이 코드 추론과 짝짓기에 출제.
반복문 for · while — for-else 함정 ·제어문·
[정의] Python 반복문은 for x in 시퀀스 패턴이 압도적이다. enumerate·for-else가 Python 고유 기능이다.
for x in [10, 20, 30]:
print(x) # 10, 20, 30
for i in range(5):
print(i) # 0~4
for i, x in enumerate(['사과', '바나나']):
print(i, x) # 0 사과 / 1 바나나
i = 0
while i < 5:
print(i)
i += 1 # i++ 없음 — i += 1
# for-else — break 없이 정상 종료 시 else 실행
for i in range(5):
if i == 10:
break
else:
print("break 안 됨") # break가 일어나지 않아 실행됨
[표] 반복문 키워드
| 키워드 | 동작 | C/Java 대비 |
|---|---|---|
for x in seq |
시퀀스 순회 | for(int i=0;...) 와 다름 |
while 조건: |
조건 반복 | 동일 |
break/continue |
종료/건너뜀 | 동일 |
enumerate() |
인덱스 + 값 동시 | (없음) |
for-else |
break 없이 종료 시 else 실행 | (없음) |
🔑 암기 for x in seq + range() + i += 1(i++ 없음). enumerate는 인덱스와 값을 함께.
⚠️ 함정 for-else의 else는 break가 안 일어났을 때 실행. break로 빠지면 else는 건너뛴다.
🎯 빈출 enumerate 결과·for-else 동작이 신경향 코드 추론에 등장.
함수 — *args · **kwargs · 오버로딩 없음 ·함수·시험 1순위·
[정의] Python 함수는 def로 정의한다. 기본값 매개변수, 가변 인자(*args·**kwargs)를 지원하지만 메서드 오버로딩은 없다.
def power(base, exp=2): # 기본값 매개변수
return base ** exp
power(3) # 9 (exp 생략 → 2)
power(3, 4) # 81
def add(*nums): # *args = 튜플로 받음
return sum(nums)
add(1, 2) # 3
add(1, 2, 3, 4) # 10 — 한 함수로 모든 개수 처리
def info(**data): # **kwargs = 딕셔너리로 받음
for k, v in data.items():
print(k, v)
info(name="홍길동", age=25) # name 홍길동 / age 25
[표] 매개변수 형태
| 형태 | 의미 | 받는 자료형 |
|---|---|---|
def f(a, b) |
고정 인자 | — |
def f(a, b=10) |
기본값 | — |
def f(*args) |
가변 위치 인자 | 튜플 |
def f(**kwargs) |
가변 키워드 인자 | 딕셔너리 |
🔑 암기 *args = 튜플 / **kwargs = 딕셔너리. Python은 오버로딩 ❌(같은 이름 재정의 시 뒤가 앞을 덮어씀).
⚠️ 함정 Java는 메서드 오버로딩(같은 이름·다른 매개변수) 지원, Python은 미지원. return이 없으면 자동으로 None 반환.
🎯 빈출 *args(튜플)·**kwargs(딕셔너리)가 받는 자료형, 기본값 매개변수 동작이 매년 단골.
대단원 6 — Python 객체지향과 신경향
Python OOP — 덕 타이핑과 4대 특성 ·객체지향·시험 1순위·
[정의] Python도 객체지향을 지원하되, 정적 언어와 표현이 다르다. 핵심은 덕 타이핑(Duck Typing) — "오리처럼 행동하면 오리로 취급".
[표] 객체지향 4대 특성 — 정적 언어 vs Python
| 4대 특성 | Java·C++ 등 정적 언어 | Python |
|---|---|---|
| 캡슐화 | private 키워드 강제 |
관습 기반 — _x(보호) / __x(이름 맹글링) |
| 상속 | class Dog extends Animal |
class Dog(Animal): 괄호 안 부모 |
| 다형성 | Animal a = new Dog(); |
덕 타이핑 — 공통 부모 없어도 동작 |
| 추상화 | abstract class / interface |
abc 모듈 (Abstract Base Class) |
class Animal:
def cry(self): print("동물의 울음")
class Dog(Animal): # 상속 — 괄호로 부모 지정
def cry(self): # 오버라이딩
print("멍멍!")
class Cat: # 공통 부모 없음
def cry(self): print("야옹!")
for a in [Dog(), Cat()]:
a.cry() # 멍멍! / 야옹! — cry() 메서드만 있으면 동작(덕 타이핑)
[표] 정적 언어 vs Python — 핵심 3비교
| 핵심 | Java·C++ 등 정적 언어 | Python |
|---|---|---|
| 오버로딩 | ✅ 지원 | ❌ 미지원 (*args 대체) |
| 오버라이딩 | ✅ 지원 | ✅ 지원 |
| 다중 상속 | 클래스는 단일만(인터페이스 다중) | ✅ 클래스 다중 상속 가능 |
🔑 암기 Python OOP — 상속·다형성·오버라이딩 지원 / 오버로딩 미지원 / 다중 상속 가능. 캡슐화·추상화는 관습·라이브러리 기반. ⚠️ 함정 "Python은 다중 상속 불가" → 오답(Python은 클래스 다중 상속 가능, Java는 단일 상속 + 인터페이스 다중 구현). 🎯 빈출 덕 타이핑 정의, 오버로딩 미지원, 다중 상속 가능 여부가 시험 1순위.
신경향 — 컴프리헨션 · lambda · map/filter ·신경향·시험 1순위·
[정의] 최근 Python 문항은 한 줄로 압축한 코드의 반환값을 묻는다. 리스트/딕셔너리 컴프리헨션과 lambda·map·filter가 신경향 킬러다.
# 컴프리헨션 — [식 for 변수 in 반복 if 조건]
[x * 2 for x in [1, 2, 3] if x > 1] # [4, 6] ← 변환 + 필터
[x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
{x: x ** 2 for x in range(1, 4)} # {1: 1, 2: 4, 3: 9} 딕셔너리 컴프리헨션
{x % 3 for x in range(6)} # {0, 1, 2} 집합 컴프리헨션
# lambda — 이름 없는 한 줄 함수
(lambda x, y: x + y)(3, 4) # 7
sorted([3, 1, 2], key=lambda x: -x) # [3, 2, 1] 내림차순
# map / filter — lambda와 결합
list(map(lambda x: x * 2, [1, 2, 3])) # [2, 4, 6] 각 원소 변환
list(filter(lambda x: x > 2, [1, 2, 3, 4])) # [3, 4] 조건 통과만
[표] 신경향 한 줄 코드
| 표기 | 의미 | 결과 예 |
|---|---|---|
[식 for x in seq if 조건] |
리스트 컴프리헨션 | [x*2 for x in [1,2,3] if x>1] → [4,6] |
{k: v for ...} |
딕셔너리 컴프리헨션 | {x:x**2 for x in range(1,4)} → {1:1,2:4,3:9} |
lambda 인자: 식 |
이름 없는 함수 | (lambda x,y:x+y)(3,4) → 7 |
map(함수, seq) |
각 원소 변환 | map(lambda x:x*2, [1,2,3]) → 2,4,6 |
filter(함수, seq) |
조건 통과만 | filter(lambda x:x>2, [1,2,3,4]) → 3,4 |
🔑 암기 컴프리헨션 = [식 for 변수 in seq if 조건]. map은 변환, filter는 선별, lambda는 한 줄 함수.
⚠️ 함정 map·filter는 결과가 이터레이터라 값을 보려면 list()로 감싼다. 컴프리헨션의 if는 조건 필터(통과한 원소만 남김).
🎯 빈출 컴프리헨션 + lambda·map·filter를 혼합한 한 줄 코드의 반환값 추론이 신경향 킬러로 증가 추세.
💡 TIOBE 2025~2026 기준 Python이 사용률 1위 흐름으로 자주 언급되며, AI/ML·데이터 분석 영역에서 표준으로 쓰인다.
기출 다지기
[기출 1 출제] 다음 Python 코드의 실행 결과로 옳은 것은? (코드 실행 결과 예측)
a = [10, 20, 30, 40, 50, 60, 70, 80]
print(a[1:6:2])
- ① [20, 30, 40, 50, 60]
- ② [10, 30, 50, 70]
- ③ [20, 40, 60]
- ④ [30, 50, 70]
정답 및 해설 보기
정답: ③ [20, 40, 60]
a[1:6:2]는 start=1(포함)·end=6(미포함)·step=2. 인덱스 1 → 3 → 5, 값은 20 → 40 → 60.
| 보기 | 판정 | 이유 |
|---|---|---|
| ① [20,30,40,50,60] | 오답 | step을 1로 본 오답 |
| ② [10,30,50,70] | 오답 | start를 0으로 본 오답 |
| ③ [20,40,60] | 정답 | start 1 · end 6 미포함 · step 2 |
| ④ [30,50,70] | 오답 | start를 2로 본 오답 |
🔑 암기 ★시포끝미★ — end 6은 미포함(인덱스 5까지). step 2는 2씩 건너뜀.
[기출 2 출제] Python 자료형에 대한 설명으로 옳지 않은 것은? (옳지 않은 것 고르기)
- ① 리스트(list)는 가변 자료형이며, 원소를 변경할 수 있다
- ② 튜플(tuple)은 불변 자료형이며, 한 번 생성하면 원소를 변경할 수 없다
- ③ 딕셔너리(dict)는 키-값 쌍으로 구성되며, 키는 중복될 수 있다
- ④ 집합(set)은 중복을 허용하지 않으며, 순서가 없다
정답 및 해설 보기
정답: ③
딕셔너리 키는 중복 불가다. 값은 중복 가능하지만 키는 안 된다. {'a':1, 'a':2}처럼 같은 키를 두 번 쓰면 뒤가 앞을 덮어써 {'a': 2}가 된다.
| 보기 | 판정 | 자료형 핵심 |
|---|---|---|
| ① 리스트 가변 | 옳음 | 리스트 = 만능 = 가변 |
| ② 튜플 불변 | 옳음 | 튜플 = 잠금 = 불변 |
| ③ 딕셔너리 키 중복 가능 | 정답(틀림) | 딕셔너리 키 중복 불가 |
| ④ 집합 중복 X·순서 X | 옳음 | 집합 = 유일 |
🔑 암기 리스트 가변·튜플 불변·딕셔너리 키 중복 X·집합 중복+순서 X.
[기출 3 출제] 다음 Python 코드의 실행 결과로 옳은 것은? (코드 실행 결과 예측)
total = 0
for i in range(2, 11, 2):
total += i
print(total)
- ① 20
- ② 25
- ③ 30
- ④ 35
정답 및 해설 보기
정답: ③ 30
range(2, 11, 2)는 2·4·6·8·10 (11은 미포함). 합은 2+4+6+8+10 = 30.
| 보기 | 판정 | 이유 |
|---|---|---|
| ① 20 | 오답 | 10을 제외한 합 |
| ② 25 | 오답 | step을 잘못 본 오답 |
| ③ 30 | 정답 | 2+4+6+8+10, 11 미포함 |
| ④ 35 | 오답 | 12를 더한 오답 |
🔑 암기 range도 ★시포끝미★. 끝값 11 미포함이라 10까지 더한다.
[기출 4 출제] 다음 Python 코드의 실행 결과로 옳은 것은? (코드 실행 결과 예측)
d = {'a': 1, 'b': 2, 'c': 3}
d['d'] = 4
del d['a']
print(d.get('z', 0))
print(len(d))
- ① 4 / 3
- ② None / 3
- ③ 0 / 3
- ④ 0 / 4
정답 및 해설 보기
정답: ③ 0 / 3
d['d']=4로 키 4개 → del d['a']로 3개({'b':2, 'c':3, 'd':4}). d.get('z', 0)은 'z'가 없어 기본값 0 반환. len(d)는 3.
| 보기 | 판정 | 이유 |
|---|---|---|
| ① 4/3 | 오답 | 'z' 값이 4가 아님 |
| ② None/3 | 오답 | 기본값 0이 우선(get의 2번째 인자) |
| ③ 0/3 | 정답 | get('z',0)→0 / len→3 |
| ④ 0/4 | 오답 | 'a' 삭제를 빠뜨린 가정 |
🔑 암기 d.get(키, 기본값)은 키가 없으면 기본값을 반환(KeyError 없음).
[기출 5 출제] 다음 Python 코드의 실행 결과로 옳은 것은? (코드 실행 결과 예측)
A = {1, 2, 3, 4, 5}
B = {3, 4, 5, 6, 7}
print(A - B)
print(A & B)
print(A | B)
- ① {1,2} / {3,4,5} / {1,2,3,4,5,6,7}
- ② {6,7} / {3,4,5} / {1,2,3,4,5,6,7}
- ③ {1,2,6,7} / {3,4,5} / {1,2,3,4,5}
- ④ {1,2} / {1,2,6,7} / {3,4,5,6,7}
정답 및 해설 보기
정답: ①
A - B(A에만) = {1,2} / A & B(둘 다) = {3,4,5} / A | B(전체) = {1,2,3,4,5,6,7}.
| 보기 | 판정 | 이유 |
|---|---|---|
| ① {1,2}/{3,4,5}/{1,..,7} | 정답 | 차·교·합 모두 일치 |
| ② {6,7}/... | 오답 | A-B를 B-A로 봄 |
| ③ {1,2,6,7}/... | 오답 | 차집합을 대칭차로 봄 |
| ④ .../... | 오답 | 교·합 모두 잘못 |
🔑 암기 - 차 / & 교 / | 합 / ^ 대칭차. 종이에 두 원을 그리면 즉답.
[기출 6 출제] Python 언어의 특징에 대한 설명으로 옳지 않은 것은? (옳지 않은 것 고르기)
- ① 인터프리터 방식으로 동작하는 언어이다
- ② 변수 선언 시 자료형을 명시하지 않는 동적 타이핑 언어이다
- ③ 코드 블록을 중괄호({})로 구분한다
- ④ 객체지향 프로그래밍을 지원하며, 다중 상속도 가능하다
정답 및 해설 보기
정답: ③
Python은 들여쓰기로 블록을 구분한다. 중괄호 {}는 C·Java 방식이다.
| 보기 | 판정 | ★인동들★ |
|---|---|---|
| ① 인터프리터 | 옳음 | 인 |
| ② 동적 타이핑 | 옳음 | 동 |
| ③ 중괄호 블록 | 정답(틀림) | 들 = 들여쓰기 |
| ④ 객체지향 + 다중 상속 | 옳음 | Python은 클래스 다중 상속 가능 |
🔑 암기 ★인동들★ — 인터프리터·동적·들여쓰기. 보기 중 인·동·들에 어긋난 것이 정답.
[기출 7 출제] 다음 Python 코드의 실행 결과로 옳은 것은? (신경향 — 리스트 컴프리헨션)
print([x * 2 for x in [1, 2, 3] if x > 1])
- ① [2, 4, 6]
- ② [4, 6]
- ③ [2, 6]
- ④ [4]
정답 및 해설 보기
정답: ② [4, 6]
if x > 1로 1을 걸러 2·3만 남고, 각각 * 2 하면 4·6. [식 for 변수 in seq if 조건] 순서로 읽는다.
| 보기 | 판정 | 이유 |
|---|---|---|
| ① [2,4,6] | 오답 | if 필터를 빠뜨린 오답 |
| ② [4,6] | 정답 | 2·3 통과 → ×2 → 4·6 |
| ③ [2,6] | 오답 | 조건을 잘못 적용 |
| ④ [4] | 오답 | 3을 빠뜨린 오답 |
🔑 암기 컴프리헨션은 "if로 거른 뒤 식으로 변환". 필터 → 변환 순서.
[기출 8 출제] 다음 Python 코드의 실행 결과로 옳은 것은? (신경향 — lambda + map/filter)
result = list(map(lambda x: x + 1, filter(lambda x: x % 2 == 0, range(6))))
print(result)
- ① [1, 3, 5]
- ② [0, 2, 4]
- ③ [2, 4, 6]
- ④ [1, 2, 3, 4, 5]
정답 및 해설 보기
정답: ① [1, 3, 5]
range(6) = 0~5 → filter로 짝수만(0·2·4) → map으로 각 +1 → 1·3·5.
| 보기 | 판정 | 이유 |
|---|---|---|
| ① [1,3,5] | 정답 | 짝수 0·2·4 → +1 |
| ② [0,2,4] | 오답 | map(+1)을 빠뜨림 |
| ③ [2,4,6] | 오답 | 홀수에 +1로 본 오답 |
| ④ [1,2,3,4,5] | 오답 | filter를 빠뜨림 |
🔑 암기 안쪽 filter(선별) 먼저, 바깥 map(변환) 나중. 결과를 보려면 list()로 감싼다.
한 장 요약
핵심 7공식 (시험장 30초 카드)
| # | 공식 | 한 줄 |
|---|---|---|
| ① | ★인동들★ | Python = 인터프리터 · 동적 타이핑 · 들여쓰기 |
| ② | ★시포끝미★ | 슬라이싱·range — 시작 포함 · 끝 미포함 |
| ③ | 자료형 4종 | 리스트(가변) · 튜플(불변) · 딕셔너리(키:값) · 집합(중복 X) |
| ④ | 불변 3종 | 숫자 · 문자열 · 튜플 (대입 시 TypeError) |
| ⑤ | input() = str | 숫자 계산은 int()·float() 필수 |
| ⑥ | d.get vs d[ ] | get = None/기본값(안전) · [] = KeyError |
| ⑦ | pop(2) = 인덱스 | 인덱스 2 제거(값 2 아님) · remove(20) = 값 제거 |
자료형 분별표
| 자료형 | 표기 | 변경 | 순서 | 중복 |
|---|---|---|---|---|
| 리스트 | [ ] |
가변 | O | O |
| 튜플 | ( ) |
불변 | O | O |
| 딕셔너리 | {키:값} |
가변 | O(3.7+) | 키 X |
| 집합 | { }(값) |
가변 | X | X |
연산·코드 추론
| 항목 | 결과 |
|---|---|
7/2 · 7//2 · 7%2 |
3.5 · 3 · 1 |
"3"+"5" · "ab"*3 |
"35" · "ababab" |
s[2:5] (PYTHON) |
"THO" (인덱스 2·3·4) |
a[::-1] |
역순 전체 |
집합 | & - ^ |
합 · 교 · 차 · 대칭차 |
*args / **kwargs |
튜플 / 딕셔너리 |
[식 for x in seq if 조건] |
컴프리헨션 (필터 → 변환) |
OOP 상속 class Dog(Animal): · 다형성 = 덕 타이핑 · 오버라이딩 O / 오버로딩 X · 클래스 다중 상속 O.
