Python Programming
  • Home
  • Intro
    • History & Background
    • Python Setup
  • QPB
    • Part I: Chapter 1-3
    • Part II
    • 5. Lists, Tuples, Sets
  • Exercises
    • Chapter 5: Lists, Tuples, Sets
  • References
    • QPB Part 1
    • QPB Part 2
    • QPB Part 3
    • QPB Part 4

On this page

  • 1장: Python에 대하여
  • 2장: 시작하기
  • 3장: Python 빠른 개요
    • Python Objects
    • 내장 데이터 타입
    • 제어 흐름 구조
    • 모듈 생성
    • 객체 지향 프로그래밍 (OOP)

Part I: Introduction

Chapter 1-3

1장: Python에 대하여

  • Python을 사용해야 하는 이유
    • 주요 이점:
      • 크로스 플랫폼 언어: Windows, Linux/UNIX, iOS 등 다양한 플랫폼에서 잘 작동하며, 슈퍼컴퓨터부터 모바일 기기까지 광범위하게 사용
      • 확장성: 작은 애플리케이션 및 빠른 프로토타입 개발에 사용될 수 있으며, 대규모 프로그램 개발에도 잘 확장
      • 다양한 라이브러리: 강력하고 사용하기 쉬운 GUI 툴킷, 웹 프로그래밍 라이브러리 등이 함께 제공
      • 주요 응용 분야: 과학 계산, 데이터 과학, 기계 학습, AI 작업에 필수적인 도구
      • 무료: Python은 오픈 소스 모델로 개발되어 상업적 또는 개인적 용도로 자유롭게 사용
  • Python의 강점
    • 사용 용이성:
      • 변수와 객체 간의 유연한 타입 지정: 타입은 변수가 아닌 객체와 연결되어 있어, 변수가 어떤 타입의 값이든 가질 수 있음. 이는 타입 캐스팅이 불필요하고 코드가 미리 선언된 타입에 얽매이지 않음.
      • 높은 추상화 수준: 언어 자체의 구성 방식과 방대한 표준 라이브러리 덕분에 웹 페이지 다운로드 같은 작업도 두세 줄의 코드로 작성 가능.
      • 간단한 구문 규칙: 초보자도 유용한 코드를 빠르게 작성할 수 있음.
      • 빠른 애플리케이션 개발(RAD): C나 Java에 비해 1/5의 시간과 코드 라인으로 애플리케이션 개발이 가능하며, 생산성 향상이 상당함.
    • 표현력:
      • 한 줄의 Python 코드가 다른 언어의 여러 줄 코드보다 많은 작업을 수행할 수 있음. 이는 프로젝트를 더 빠르게 완료하고 유지 관리 및 디버깅을 더 쉽게 만듦.
      • 예시: 두 변수의 값 교환 (var2, var1 = var1, var2).
    • 가독성:
      • 코드 블록을 강제적으로 들여쓰기하여 항상 읽기 쉬운 스타일로 코드가 서식화됨.
      • Perl과 Python의 pairwise_sum 함수 비교를 통해 Python 코드의 시각적 명확성과 간결성을 강조함.
    • 완전성 (“Batteries included”):
      • Python을 설치하면 추가 라이브러리 설치 없이 실제 작업을 수행하는 데 필요한 모든 것이 제공됨 (예: 이메일, 웹 페이지, 데이터베이스, GUI 개발 등).
      • 단 두 줄의 코드로 웹 서버를 작성할 수 있음.
    • 풍부한 서드파티 라이브러리 생태계: 웹 애플리케이션, 데이터 처리, 시각화, 기계 학습, 데이터 과학 등 다양한 분야에서 Python은 가장 풍부한 패키지, 라이브러리, 프레임워크 생태계 중 하나를 가지고 있음.
    • 크로스 플랫폼: Python 코드는 인터프리터가 있는 모든 플랫폼에서 실행됩니다. Jython (Java), IronPython (.NET), MicroPython (마이크로컨트롤러) 같은 버전도 있음.
    • 무료 및 오픈 소스:
      • Python의 소스 코드는 자유롭게 사용할 수 있으며, 수정, 개선, 확장이 가능함.
      • 활발하고 지식이 풍부한 사용자 커뮤니티가 강력한 지원을 제공함.
      • Python Software Foundation에 기여하는 것이 장려됨.
    • The Zen of Python (PEP 20): “아름다운 것이 추한 것보다 낫다. 명시적인 것이 암시적인 것보다 낫다. 간단한 것이 복잡한 것보다 낫다. 복잡한 것이 난해한 것보다 낫다. 평평한 것이 중첩된 것보다 낫다. 성긴 것이 밀집된 것보다 낫다. 가독성이 중요하다…” 등 Python 철학을 반영
  • Python의 개선 중인 점
    • 점점 더 빨라지고 있음:

      • Python은 완전히 컴파일된 언어가 아니므로 C와 같은 언어보다 느릴 수 있음.
      • 그러나 최신 컴퓨터의 컴퓨팅 능력 덕분에 대부분의 애플리케이션에서 개발 속도가 실행 속도보다 더 중요함. Python은 훨씬 빠르게 프로그램을 작성할 수 있음.
      • CPU 집약적인 부분은 C 또는 C++로 작성된 모듈로 확장할 수 있음.
      • Python 개발팀은 더 효율적이고 빠른 새 버전을 개발하고 있으며, 이는 성능 개선을 가져왔음.
      Python 코드의 실행 과정

      Python은 인터프리터 언어로, 사용자가 작성한 Python 코드는 다음과 같은 단계를 거쳐 실행됨.

      • 소스 코드: 사용자가 작성한 .py 파일(예: print(“Hello”)).
      • 바이트코드로 변환: CPython 인터프리터는 소스 코드를 바이트코드라는 중간 표현으로 변환.
        • 바이트코드는 Python 가상 머신(PVM)이 이해할 수 있는 저수준 명령어 집합
        • 예: print(“Hello”)는 LOAD_NAME, LOAD_CONST, CALL_FUNCTION 같은 바이트코드 명령어로 변환
      • Python 가상 머신(PVM): PVM은 바이트코드를 실행하여 실제 작업(예: 화면에 “Hello” 출력)을 수행함. 이 과정은 C로 작성된 CPython의 실행 엔진에서 이루어짐.
      • 사용자가 작성한 Python 코드는 C로 직접 변환되는 것이 아니고, 바이트코드로 변환되어 인터프리터에 의해 실행됨.
      • Python의 모든 객체는 C 구조체(예: PyObject, PyUnicodeObject)로 표현되며 C로 관리됨.

      내장 타입의 C 구현

      • Python의 내장 타입(str, int, list 등)은 CPython에서 C로 구현되어 있음.
      • 내장 타입의 동작(예: str.upper(), list.append())은 CPython 소스 코드의 C 함수로 정의됨.
      • 예: str 타입은 Objects/unicodeobject.c에, list는 Objects/listobject.c에 구현되어 있습니다.
    • 컴파일 시 변수 타입 강제 없음 (타입 힌트 사용 가능):

      • Python 변수는 컨테이너라기보다는 객체(정수, 문자열, 클래스 인스턴스 등)를 참조하는 ’레이블’과 같습니다. 이는 변수가 특정 타입에 묶이지 않는다는 것을 의미함.
      • 타입 불일치는 런타임 예외를 발생시키지만 컴파일 시에는 오류가 발생하지 않음.
      • 이를 보완하기 위해 Python은 타입 힌트를 추가하여 개발자가 객체 타입의 일관성을 확인할 수 있도록 함. 이는 런타임 전에 타입 불일치를 플래그할 수 있음.
      // C언어에서 - 컴파일 에러 발생
      int x = 5;
      x = "hello";  // 에러: 문자열을 int 변수에 할당할 수 없음
      # Python에서 - 완전히 유효함
      x = 5
      x = "hello"  # 전혀 문제없음

      이런 유연성은 변수가 어떤 타입의 객체든 참조할 수 있기 때문에 다음과 같은 예시도 가능

      mixed_data = [42, "hello", 3.14, [1, 2, 3], {"key": "value"}]
      
      for item in mixed_data:
          print(f"Value: {item}")
    • 모바일 지원 개선 중:

      • 과거에는 모바일 공간에서 Python의 역할이 미미했지만, iOS 및 Android 플랫폼용 앱 작성 툴킷과 프레임워크가 개발 중입니다. 상용 모바일 앱 개발은 아직 어려운 편임.
    • 멀티 프로세서 지원 개선 중:

      • 표준 Python 구현은 Global Interpreter Lock (GIL) 때문에 멀티 코어를 활용하도록 설계되지 않았음.
      • Python 개발팀은 멀티 코어 환경에서 Python이 더 원활하고 효율적으로 작동하도록 노력하고 있으며, 이는 앞으로 몇 년간 계속될 것임.

2장: 시작하기

  • Python 사용 옵션
    • Python 버전: Python은 3.9 버전부터 연간 릴리스 주기로 변경되었음(현재 최신 버전은 Python 3.13). 대부분의 경우 최신 버전을 사용하는 것이 좋지만, 3.9 이상이면 이 책을 사용하기에 충분함.
    • Python 소스: Python Software Foundation 웹사이트 (python.org), Anaconda 배포판, 운영 체제의 앱 스토어 또는 패키지 관리자를 통해 얻을 수 있음.
    • 디바이스 및 플랫폼: 서버, 데스크톱, 임베디드 장치, 휴대폰, 태블릿, 크롬북, 가상 머신 등 광범위한 장치 및 운영 체제에서 실행됨.
    • 환경 및 도구:
      • 명령줄에서 Python 인터프리터 실행 (내장 셸 또는 IPython).
      • 텍스트 편집기.
      • 교육용 IDE (IDLE, Mu, Thonny) 또는 고급 IDE (VSCode, Wingware, PyCharm).
      • Jupyter Notebooks: IPython 셸과 웹 인터페이스를 결합한 형태로, 텍스트와 코드 셀을 통합하여 사용함. 교육, 데이터 탐색, 데이터 과학, AI 실험 등에 인기가 많음.
  • Colaboratory (클라우드 기반 Jupyter Notebook)
    • 추천 솔루션: Python 설치 또는 업데이트에 대한 걱정 없이 Jupyter의 친숙한 인터페이스를 활용할 수 있음.
    • 접근성: 이 책의 GitHub 저장소에 있는 코드 노트북을 클릭 한 번으로 시작할 수 있으며, 최신 웹 브라우저가 있는 거의 모든 장치에서 접근 가능함.
    • Google 계정 로그인이 필요하지만, 계정 없이도 접근 가능함.
    • Colaboratory의 Python 버전은 최신 버전보다 약간 늦을 수 있지만, 접근성과 사용 편의성이 이 단점을 상회함.
  • Colaboratory에서 코드 작성 및 실행
    • Jupyter Notebook 셀 유형:
      • 텍스트 셀: Markdown으로 서식 지정 가능한 텍스트를 포함합니다. 더블 클릭 또는 우클릭하여 편집할 수 있음.
      • 코드 셀: 실행 가능한 코드를 포함합니다. 항상 편집 모드임.
    • 코드 실행: Ctrl-Enter를 사용하거나 셀 왼쪽의 작은 삼각형 아이콘을 클릭합니다. 코드를 실행하면 결과는 셀 아래에 나타남.
    • “Hello, World” 예시: print("Hello, World").
    • 오류 처리: 오류가 발생하면 Jupyter는 Python의 오류 메시지를 코드 셀 아래에 출력합니다. Colaboratory는 Fix Error 버튼을 통해 자동 수정 옵션을 제공하기도 함. 제안된 수정 사항은 신중하게 검토해야 함.
  • help() 및 dir() 함수를 사용하여 Python 탐색
    • help() 함수:
      • help()를 실행하여 도움말 시스템으로 진입하여 모듈, 키워드, 토픽에 대한 문서를 읽을 수 있음.
      • help(객체)와 같이 특정 객체를 매개변수로 지정하여 해당 객체의 문서를 즉시 볼 수 있음.
      • Python 설치에는 완전한 문서가 포함되어 있어 오프라인 상태에서도 접근 가능함.
    • dir() 함수:
      • 특정 네임스페이스의 객체 목록을 보여줌.
      • 매개변수 없이 사용하면 현재 전역 네임스페이스를 나열하고, 모듈 또는 타입과 함께 사용하면 해당 멤버를 나열함.
      • 디버깅에 유용하며 객체나 모듈에 속한 모든 멤버를 한눈에 확인할 수 있음.
  • AI 도구를 사용하여 Python 코드 작성
    • ChatGPT, Copilot과 같은 대규모 언어 모델(LLM) 기반 도구는 텍스트 프롬프트에 대한 응답으로 코드를 생성할 수 있음.
    • 장점:
      • 속도: 짧은 시간에 많은 양의 코드를 생성할 수 있습니다.
      • 정확성: 타이핑 오류가 적고 구두점 등을 정확히 사용합니다.
    • 단점:
      • 자원 소모: AI 봇은 많은 컴퓨팅 자원을 사용함.
      • 개인 정보 및 지적 재산 보호: 코드 공유 및 타인의 코드가 잘 보호되지 않을 수 있음.
      • 비용: 일부 AI 코드 생성기는 무료가 아닐 수 있음.
      • 완벽하지 않음: AI 생성 코드는 버그나 비효율성을 포함할 수 있으며, 이를 식별하기 위해 숙련된 검토가 필요함.
    • AI 옵션: Colaboratory에 내장된 AI 코드 생성기, GitHub Copilot (VSCode 및 로컬 Python 필요, 유료), Cursor, Windsurf, JetBrains의 PyCharm등이 있음.

3장: Python 빠른 개요

  • Python의 개요: Python에는 정수, 부동 소수점, 복소수, 문자열, 리스트, 튜플, 딕셔너리, 파일 객체와 같은 여러 내장 데이터 타입이 있음. 프로그래머는 자신만의 클래스를 정의하고 인스턴스를 생성할 수 있음.

Python Objects

  • 파이썬의 모든 것은 객체(object)이며, 특정 클래스(class)의 인스턴스(instance)임
    • 보통, 클래스를 “빵의 틀” 혹은 설계도로 비유
    • 인스턴스를 “구워낸 빵” 혹은 설계도로 지어진 사물에 비유
  • 인스턴스는 클래스에서 정의된 속성(attribute)과 메서드(method)를 전달 받음(inherited)

Class의 예

동국대 구성원의 기록을 관리하는 클래스를 생각해보면,

class dgu_member:

    def __init__(self, first, last):  # 인스턴스를 생성할 때 호출되는 메서드
        self.first = first  # 속성
        self.last = last 
        self.email = first.lower() + "." + last.lower() + "@dgu.ac.kr"

    def full_name(self):  # 메서드
        return f"{self.first} {self.last}"

    def __str__(self):  # 특수 메서드
        return f"{self.first} {self.last} <{self.email}>"

dgu_1과 dgu_2는 dgu_member 클래스의 인스턴스임.

dgu_1 = dgu_member('Gildong', 'Hong')
dgu_2 = dgu_member('Yonghee', 'Kang')

dgu_member 클래스에서 정의된 함수를 .을 사용하여 호출할 수 있음; 메서드(method)라고 함

dgu_1.full_name()
'Gildong Hong'

다음과 같이 클래스로부터 함수를 직접 호출할 수 있음. 이 경우, 인스턴스를 첫 번째 인자로 전달해야 함.

dgu_member.full_name(dgu_1)
'Gildong Hong'

email은 dgu_member 클래스에서 정의된 속성(attribute)임; ()없이 사용

dgu_1.email
'gildong.hong@dgu.ac.kr'

특수 메서드는 __로 시작하고 __로 끝나는 메서드이고, 내부적으로 호출되는 메서드임.

print(dgu_1)  # __str__ 메서드가 호출됨
Gildong Hong <gildong.hong@dgu.ac.kr>

객체(object)

“객체”라는 용어를 다른 많은 언어에서 “클래스 인스턴스”라고 부르는 것뿐만 아니라 모든 Python 데이터 유형의 인스턴스를 지칭하는 데 사용됨. Python에서 모든 Python 객체는 특정 클래스의 인스턴스이기 때문임.

  1. 모든 값(정수, 문자열, 리스트, 함수 등)은 메모리에 존재하는 객체(object)
x = 10       # 정수
y = "hello"  # 문자열
z = [1, 2]   # 리스트

이때 10은 int 클래스의 인스턴스, “hello”는 str 클래스의 인스턴스, [1, 2, 3]는 list 클래스의 인스턴스임.

isinstance(10, int)
True
  1. 타입(type) 자체도 클래스
print(type(10))
<class 'int'>
print(type("hello"))
<class 'str'>
print(type([1,2,3]))
<class 'list'>

함수도 객체

def f(): pass
print(type(f))
<class 'function'>
  1. 클래스 자체도 객체: 클래스는 type 클래스의 인스턴스임.
print(type(int))
<class 'type'>
print(type(str))
<class 'type'>

커스텀 클래스도 마찬가지

class Abc: pass
print(type(Abc))
<class 'type'>

예시: 문자열(string) 객체

x = "Love me tender"  # x: string object

x는 str 클래스(빵의 틀 혹은 청사진)의 인스턴스(빵)가 되면서, str 클래스의 속성과 함수를 사용할 수 있게 됨

x.upper()  # upper()라는 함수를 호출
'LOVE ME TENDER'

이는 다음과 같이 원래 str 클래스의 메서드를 사용하는 것과 동일함

str.upper(x)
'LOVE ME TENDER'

마찬가지로,

x.count('e')  # 함수에 인자(argument)가 포함된 경우
4
str.count(x, "e")
4
  • 이렇게, 각 인스턴스가 가지는 함수를 호출해서 적용할 수 있는데
  • 이 때 그 함수를 메서드(method)라고 함
  • 이는 각 클레스에서 고유하게 정의된 함수들을 사용할 수 있게 함
  • 이 경우 str이라는 클래스에서 정의된 함수들을 사용할 수 있음

파이썬의 고유한 함수들, 예를 들어

type(x)
str
len(x)  # 문자열의 길이
14

str의 메서드(method)를 확인하려면,

dir(str) # 또는 dir(x)
# ['__add__',
#  '__class__',
#  '__contains__',
#  '__delattr__',
# ...
참고: dunder(double underscore) method

__로 시작하는 메서드는 필요에 따라 내부적으로 호출되는 메서드임.
예를 들어, __add__는 + 연산자가 호출하는 메서드임: magic method 혹은 dunder(double underscore) method라고 함.

str1 = "Hello"
str2 = "World"

str1 + str2
'HelloWorld'

두 문자열을 더하는 + 연산자는 내부적으로 __add__ 메서드를 호출함. 즉, 다음과 같음.

str1.__add__(str2)
'HelloWorld'

pandas 패키지의 한 클래스를 살펴보면,

import pandas as pd

pd.DataFrame?
pd.DataFrame
pandas.core.frame.DataFrame

DataFrame이라는 클래스가 정의되는데, 이는 사실 다음과 같은 폴더 위치에 있는 frame.py 마듈에서 정의된 클래스임
pd.core.frame.DataFrame

df = pd.DataFrame({'mango': [1, 2, 3], 'apple': [4, 5, 6]})
df
mango apple
0 1 4
1 2 5
2 3 6
  • 이 때, df는 DataFrame 클래스의 인스턴스(instance)가 되면서, DataFrame 클래스(class)에서 정의된 속성(attribute)과 함수를 사용할 수 있게 됨.
  • 이 함수를 메서드(method)라고 함
df.columns  # columns라는 속성을 추출
Index(['mango', 'apple'], dtype='object')
df.head(2)  # head()라는 함수를 호출
mango apple
0 1 4
1 2 5
df.columns.sort_values()  # df.columns는 Index object이고, 이에 대한 sort_values()라는 함수를 호출
Index(['apple', 'mango'], dtype='object')

내장 데이터 타입

  • 숫자 (Numbers):
    • 정수 (Integers): 크기 제한이 메모리에 의해서만 결정됨.
      • 1, –3, 42, 355, 888888888888888, –7777777777
    • 부동 소수점 (Floats, Floating-point numbers): C의 doubles를 기반으로 함.
      • 3.0, 31e12, –6e-4
    • 복소수 (Complex numbers): j 접미사를 사용하여 실수와 허수 요소를 가짐.
      • 3 + 2j, –4 2j, 4.2 + 6.3j
    • 불리언 (Booleans): True (1) 또는 False (0).
    • 산술 연산자 (Arithmetic operators): +, -, *, /, // (정수 나눗셈), ** (거듭제곱), % (모듈러).
    • 내장 함수 (Built-in functions): round(), cmath (복소수), math (다른 숫자 타입).
  • 리스트 (Lists):
    • 가변(mutable)이며, 다른 타입의 요소를 혼합하여 포함할 수 있음.
    • 양수 또는 음수 인덱스로 접근 가능하며, 슬라이스([m:n])를 사용하여 부분 리스트를 얻을 수 있음.
    • 요소 추가, 제거, 교체 가능.
    • 내장 함수: len, max, min.
    • 연산자: in, +, * (새 리스트 생성).
    • 메서드: append, count, extend, index, insert, pop, remove, reverse, sort.
  • 튜플 (Tuples):
    • 불변(immutable)하며, 생성 후 수정할 수 없음.
    • 리스트와 유사하게 in, +, * 연산자와 len, max, min 함수가 작동함.
    • 인덱스 및 슬라이스 표기법은 요소나 슬라이스를 얻는 데 사용되지만, 추가, 제거, 교체에는 사용할 수 없음.
    • 주요 용도: 딕셔너리의 키로 사용.
    • tuple() 함수로 리스트를 튜플로, list() 함수로 튜플을 리스트로 변환 가능함.
    튜플(Tuple)과 리스트(List)의 차이

    LLM: “튜플이 자주 사용되는 방식과 리스트로 대체할 수 없는 이유”

  • 문자열 (Strings):
    • 불변(immutable)하며, 다양한 따옴표(', ", ''', """)로 구분됨.
    • \t (탭), \n (개행) 문자를 포함할 수 있음.
    • 리스트 및 튜플과 유사하게 in, +, * 연산자와 len, max, min 함수가 작동함.
    • 메서드: split(), replace() 등.
    • re 모듈은 정규 표현식 기능을 제공함.
    • print() 함수는 객체를 문자열로 자동 변환하여 출력함.
    • f-strings: f"..." 형식을 사용하여 문자열 내에 변수 값을 포함할 수 있음.
  • 딕셔너리 (Dictionaries):
    • 해시 테이블을 사용하여 구현된 연관 배열(associative array) 기능을 제공함.
    • 키는 숫자, 문자열, 튜플과 같은 불변(immutable) 타입이어야 함. 값은 리스트나 딕셔너리와 같은 가변(mutable) 타입을 포함한 모든 객체일 수 있음.
    • 내장 함수: len.
    • del 문을 사용하여 키-값 쌍을 삭제할 수 있음.
    • 메서드: clear, copy, get (키가 없을 때 기본값 반환), items, keys, update, values.
    • 없는 키에 접근 시 KeyError 예외 발생.
  • 세트 (Sets) 및 프로즌세트 (Frozensets):
    • 세트는 객체의 정렬되지 않은 컬렉션으로, 멤버십과 유일성이 주요 관심사일 때 사용됨.
    • 시퀀스를 세트로 변환할 때 중복이 제거됨.
    • in 키워드를 사용하여 객체가 세트의 멤버인지 확인할 수 있음.
    • frozenset: 불변(immutable) 세트입니다. 생성 후 요소 추가/제거가 불가능함.
  • 파일 객체 (File objects):
    • open() 문은 파일 객체를 생성함 ("w" 쓰기 모드, "r" 읽기 모드).
    • write(), readline() 등의 메서드.
    • os 모듈은 파일 시스템 탐색 및 경로 이름 작업에 유용함.
    • 다른 입출력 기능: input() (사용자 입력), sys (stdin, stdout, stderr 접근), struct (C 프로그램과 호환되는 파일 읽기/쓰기), pickle (Python 데이터 타입의 직렬화).
  • Python의 타입 힌트
    • Python은 설계상 변수 및 반환 값에 강제적인 타입 지정을 사용하지 않음. 이는 유연성과 가독성을 높이지만, 객체의 타입이 항상 명확하지 않을 수 있음.
    • 타입 힌트(: 기호 사용)는 코드의 가독성을 높이고 mypy, pyright와 같은 타입 검사 도구 및 IDE가 호환되지 않거나 예상치 못한 타입 사용을 플래그하도록 함.
    • 중요: Python 자체는 타입 힌트가 따르지 않아도 런타임 오류를 발생시키지 않음.

제어 흐름 구조

  • 불리언 값과 표현식: False, 0, None, 빈 값 (예: [], "")은 False로 간주됨. True와 그 외 모든 것은 True로 간주됨.
  • 비교 연산자 (<, <=, ==, >, >=, !=, is, is not, in, not in) 및 논리 연산자 (and, not, or)가 사용됨.
  • if-elif-else 문: 첫 번째 True 조건 후의 코드 블록이 실행됩니다. 모든 조건이 False이면 else 블록이 실행됩니다. 들여쓰기를 사용하여 코드 블록을 구분함.
  • match 문 (구조적 패턴 매칭): Python 3.10부터 도입되었으며, C++나 Java의 switch 문과 유사하지만 더 복잡하고 미묘한 옵션을 제공하는 유연하고 강력한 패턴 매칭을 허용함.
  • while 루프: 조건이 True인 동안 실행됩니다. break (루프 종료), continue (현재 반복 중단 및 루프 시작으로 돌아감), else 블록 (루프가 break 없이 완료될 때 실행)을 포함할 수 있음.
  • for 루프: 리스트나 튜플과 같은 모든 이터러블 타입에 대해 반복할 수 있습니다. 시퀀스의 각 항목을 반복합니다 (foreach 루프와 유사). break, continue, else 블록을 포함할 수 있음.
  • 함수 정의:
    • def 문을 사용하여 정의하며, return 문으로 값을 반환함.
    • 위치 또는 이름(키워드)으로 인수를 전달할 수 있음.
    • * 매개변수는 모든 추가 위치 인수를 튜플로 수집함.
    • ** 매개변수는 모든 추가 키워드 인수를 딕셔너리로 수집함.
  • 예외 (Exceptions):
    • try-except-else-finally 복합 문을 사용하여 예외를 포착하고 처리할 수 있음.
    • raise 문을 사용하여 사용자 정의 예외를 발생시킬 수 있음.
    • else 절은 try 블록에서 예외가 발생하지 않을 때 실행됨.
    • finally 절은 예외 발생 여부와 관계없이 항상 실행됨.
  • with 키워드를 사용한 컨텍스트 처리:
    • try-except-finally 패턴을 더 간결하게 캡슐화하는 방법임.
    • open() 함수와 같은 파일 접근에 대한 컨텍스트 관리자가 정의되어 있으며, 개발자는 사용자 정의 컨텍스트 관리자를 정의할 수 있음.
    • 예외 발생 여부와 관계없이 기본 정리 동작(예: 파일 닫기)이 항상 실행됨.

모듈 생성

  • Python 파일(.py 확장자)은 모듈로 작동하며 import 문을 사용하여 다른 모듈처럼 가져올 수 있음.
  • Docstrings (문서 문자열): 모듈, 함수, 메서드, 클래스를 문서화하는 표준 방법임.
  • 주석 (#로 시작)은 코드에 대한 특정 설명을 제공함.
  • __name__ == '__main__' 조건문은 파일이 스크립트로 직접 실행될 때만 특정 코드를 실행하도록 함.
  • 변경 사항을 적용하려면 importlib.reload()를 사용함.
  • 패키지: 모듈 개념의 일반화로, 디렉터리 또는 디렉터리 서브트리 내에 모듈을 그룹화하고 package.subpackage.module 구문을 사용하여 계층적으로 참조할 수 있도록 함.

객체 지향 프로그래밍 (OOP)

  • Python은 객체 지향 프로그래밍을 완벽하게 지원함.
  • 클래스 정의: class 키워드를 사용함.
  • 인스턴스 초기화 메서드 (__init__): 클래스의 생성자 역할을 하며, 인스턴스 변수를 생성하고 초기화함.
  • 메서드: 함수와 마찬가지로 def 키워드를 사용하여 정의합니다. 첫 번째 인수는 관례적으로 self이며, 이는 메서드를 호출한 인스턴스를 나타냄.
  • 상속: class Square(Shape):와 같이 클래스가 다른 클래스로부터 상속받을 수 있습니다. 하위 클래스는 초기화자에서 명시적으로 기본 클래스의 초기화자를 호출해야 함.
  • __str__ 메서드: 클래스의 문자열 버전을 반환하며 print() 함수에서 사용됨.
  • 다른 특수 메서드 속성은 연산자 오버로딩을 허용함.
  • 메서드는 객체.메서드()와 같은 속성 구문을 사용하여 호출됨.
5. Lists, Tuples, Sets

This work © 2025 by Sungkyun Cho is licensed under CC BY-NC-SA 4.0