[Python] 파이썬 기초 완전 정리 1단계
파이썬 완벽 가이드: 3단계로 마스터하기
파이썬은 배우기 쉽고 강력하며 다양한 분야에서 활용되는 인기 있는 프로그래밍 언어입니다. 이 가이드에서는 파이썬의 핵심 개념들을 3단계로 나누어 자세하고 상세하게 설명하여, 프로그래밍 초보자부터 숙련된 개발자까지 모두에게 유익한 정보를 제공하고자 합니다.
1단계: 파이썬의 기초 다지기 (Fundamentals)
이 단계에서는 파이썬을 처음 접하는 분들을 위해 가장 기본적인 개념들을 다룹니다. 프로그래밍의 핵심 원리를 이해하고 파이썬 코드 작성에 필요한 기본적인 도구와 문법을 익히는 데 중점을 둡니다.
1.1. 파이썬이란 무엇인가?
- 정의: 파이썬은 범용 프로그래밍 언어로, 다양한 종류의 소프트웨어를 개발하는 데 사용됩니다. 1991년 귀도 반 로섬(Guido van Rossum)에 의해 개발되었습니다.
- 특징:
- 간결하고 읽기 쉬운 문법: 영어와 유사한 문법을 사용하여 코드를 이해하고 작성하기 쉽습니다. 들여쓰기를 통해 코드 블록을 구분하는 것이 특징입니다.
- 인터프리터 언어: 코드를 컴파일하지 않고 즉시 실행할 수 있어 개발 및 디버깅 속도가 빠릅니다.
- 객체 지향 언어: 객체(Object)를 중심으로 프로그램을 설계하는 방식을 지원하여 코드의 재사용성과 유지보수성을 높입니다.
- 다양한 플랫폼 지원: Windows, macOS, Linux 등 다양한 운영체제에서 실행됩니다.
- 풍부한 라이브러리: 수많은 내장 모듈과 외부 라이브러리를 통해 다양한 기능을 쉽게 구현할 수 있습니다. (예: 데이터 과학, 웹 개발, 인공지능 등)
- 활발한 커뮤니티: 방대한 사용자 커뮤니티가 존재하여 문제 해결 및 정보 공유가 용이하며, 끊임없이 새로운 자료와 지원을 얻을 수 있습니다.
1.2. 개발 환경 설정
파이썬 코드를 작성하고 실행하기 위해서는 개발 환경을 설정해야 합니다.
- 파이썬 설치:
- 공식 웹사이트 (python.org)에서 최신 버전의 파이썬을 다운로드하여 설치합니다.
- 설치 시 "Add Python to PATH" 옵션을 반드시 선택하여 명령 프롬프트나 터미널에서 파이썬을 쉽게 실행할 수 있도록 설정하는 것이 중요합니다.
- 통합 개발 환경 (IDE) 또는 코드 편집기 선택:
- IDLE (기본 제공): 파이썬 설치 시 함께 제공되는 간단한 IDE입니다. 기본적인 코드 작성 및 실행에 적합합니다.
- VS Code (Visual Studio Code): Microsoft에서 개발한 무료 오픈소스 코드 편집기입니다. 다양한 언어를 지원하며 강력한 확장 기능을 제공하여 파이썬 개발에 널리 사용됩니다. 파이썬 확장을 설치하면 편리하게 사용할 수 있습니다.
- PyCharm: JetBrains에서 개발한 파이썬 전문 IDE입니다. 강력한 코드 자동 완성, 디버깅, 테스트 도구 등을 제공하여 전문적인 개발에 최적화되어 있습니다. (유료 버전과 무료 커뮤니티 버전이 있습니다.)
- Jupyter Notebook/Lab: 데이터 과학 및 머신러닝 분야에서 대화식으로 코드를 실행하고 결과를 시각화하는 데 유용합니다. 웹 브라우저에서 실행되며 셀 단위로 코드를 실행할 수 있습니다.
1.3. 기본 문법 및 데이터 타입
파이썬 코드를 이해하고 작성하기 위한 가장 기본적인 문법 요소들을 학습합니다.
변수 (Variables)
데이터를 저장하는 메모리 공간의 이름입니다. 파이썬은 변수의 데이터 타입을 명시적으로 선언할 필요가 없습니다. 할당되는 값에 따라 타입이 자동으로 결정됩니다.
# 변수 선언 및 값 할당
name = "Alice"
age = 30
pi = 3.14159
is_student = True
# 변수 값 출력
print(name)
print(age)
print(pi)
print(is_student)
주석 (Comments)
코드에 설명을 추가하여 가독성을 높이는 데 사용됩니다. `#`으로 시작하거나 """ """
또는 ''' '''
으로 여러 줄 주석을 작성할 수 있습니다.
# 이것은 한 줄 주석입니다. 코드의 특정 부분에 대한 설명을 달 때 유용합니다.
"""
이것은 여러 줄 주석입니다.
함수나 클래스처럼 복잡한 코드 블록에 대한
전반적인 설명을 추가할 때 자주 사용됩니다.
"""
'''
작은 따옴표 세 개로도
여러 줄 주석을 만들 수 있습니다.
'''
기본 데이터 타입
- 정수 (
int
): 양수, 음수, 0을 포함하는 정수 (예:10
,-5
,0
) - 실수 (
float
): 소수점을 포함하는 숫자 (예:3.14
,-0.5
) - 문자열 (
str
): 문자들의 나열 (예:"Hello, World!"
,'파이썬'
)- 따옴표(
''
또는""
)로 감싸서 표현합니다. - 문자열 연결:
+
연산자 사용 (예:"Hello" + " World"
) - 문자열 반복:
*
연산자 사용 (예:"Ha" * 3
) - 문자열 인덱싱 및 슬라이싱: 특정 위치의 문자 또는 부분 문자열 추출 (예:
"Python"[0]
→'P'
,"Python"[1:4]
→'yth'
)
- 따옴표(
- 불리언 (
bool
): 참(True
) 또는 거짓(False
)을 나타내는 논리 값. 조건문에서 주로 사용됩니다.
# 데이터 타입 예시
num_int = 10
num_float = 3.14
str_hello = "Hello"
str_world = 'World!'
bool_true = True
bool_false = False
print(f"정수: {num_int}, 타입: {type(num_int)}")
print(f"실수: {num_float}, 타입: {type(num_float)}")
print(f"문자열: {str_hello + ' ' + str_world}, 타입: {type(str_hello)}")
print(f"불리언: {bool_true}, 타입: {type(bool_true)}")
# 문자열 인덱싱 및 슬라이싱
my_string = "Python is fun!"
print(f"첫 번째 문자: {my_string[0]}") # P
print(f"3번째부터 7번째까지: {my_string[2:7]}") # thon
print(f"마지막 문자: {my_string[-1]}") # !
연산자 (Operators)
값들을 조작하고 계산하는 데 사용됩니다.
- 산술 연산자:
+
(덧셈),-
(뺄셈),*
(곱셈),/
(나눗셈),//
(몫),%
(나머지),**
(거듭제곱) - 할당 연산자:
=
(할당),+=
(더한 후 할당),-=
(뺀 후 할당),*=
(곱한 후 할당) 등 - 비교 연산자:
==
(같다),!=
(같지 않다),>
(크다),<
(작다),>=
(크거나 같다),<=
(작거나 같다). 논리 연산의 결과는 True/False입니다. - 논리 연산자:
and
(논리곱),or
(논리합),not
(논리 부정). 불리언 값을 조작합니다.
# 산술 연산자
print(f"10 + 3 = {10 + 3}") # 13
print(f"10 / 3 = {10 / 3}") # 3.333...
print(f"10 // 3 = {10 // 3}") # 3 (몫)
print(f"10 % 3 = {10 % 3}") # 1 (나머지)
print(f"2 ** 3 = {2 ** 3}") # 8 (2의 3승)
# 할당 연산자
x = 10
x += 5 # x = x + 5 와 동일
print(f"x = {x}") # 15
# 비교 연산자
print(f"10 == 5: {10 == 5}") # False
print(f"10 >= 5: {10 >= 5}") # True
# 논리 연산자
print(f"True and False: {True and False}") # False
print(f"True or False: {True or False}") # True
print(f"not True: {not True}") # False
1.4. 제어문 (Control Flow)
코드의 실행 흐름을 제어하는 문법입니다. 프로그램의 로직을 구성하는 데 필수적입니다.
조건문 (Conditional Statements)
특정 조건에 따라 다른 코드를 실행합니다.
if
: 조건이 참일 때 코드 블록 실행elif
: 이전if
또는elif
조건이 거짓이고 현재 조건이 참일 때 코드 블록 실행else
: 모든if
및elif
조건이 거짓일 때 코드 블록 실행
score = 85
if score >= 90:
print("A 학점입니다!")
elif score >= 80:
print("B 학점입니다.")
elif score >= 70:
print("C 학점입니다.")
else:
print("F 학점입니다.")
반복문 (Loop Statements)
특정 코드 블록을 여러 번 반복하여 실행합니다.
for
루프: 시퀀스(리스트, 튜플, 문자열 등)의 각 요소에 대해 반복하거나 특정 횟수만큼 반복합니다.range()
함수: 숫자 시퀀스를 생성하여for
루프에서 많이 사용됩니다.
while
루프: 특정 조건이 참인 동안 코드 블록을 반복 실행합니다.break
및continue
문:break
: 반복문을 즉시 종료합니다.continue
: 현재 반복을 건너뛰고 다음 반복으로 넘어갑니다.
# for 루프 예시
for i in range(5): # 0부터 4까지 반복
print(f"for 루프 반복 {i}")
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(f"내가 좋아하는 과일: {fruit}")
# while 루프 예시
count = 0
while count < 3:
print(f"while 루프 반복 {count}")
count += 1
# break와 continue 예시
for i in range(10):
if i == 3:
continue # 3일 때는 건너뛰고 다음 반복으로
if i == 7:
break # 7일 때는 루프 종료
print(i)
1.5. 함수 (Functions)
특정 작업을 수행하는 코드 블록을 정의하고 재사용할 수 있도록 합니다. 코드의 모듈성과 가독성을 높여줍니다.
- 함수 정의:
def
키워드를 사용하여 함수를 정의합니다. - 매개변수 (Parameters) 및 인자 (Arguments): 함수에 전달되는 값입니다.
- 반환 값 (Return Values): 함수가 작업을 수행한 후 결과를 반환할 수 있습니다.
return
키워드를 사용합니다. - 내장 함수: 파이썬이 기본적으로 제공하는 함수들 (예:
print()
,input()
,len()
,type()
,int()
,str()
,float()
등)
# 간단한 함수 정의 및 호출
def greet(name):
"""이 함수는 이름을 받아 환영 메시지를 출력합니다."""
print(f"안녕하세요, {name}님! 파이썬의 세계에 오신 것을 환영합니다.")
greet("김철수") # 함수 호출
greet("이영희")
# 반환 값이 있는 함수
def add(a, b):
"""두 숫자를 더한 결과를 반환합니다."""
return a + b
result = add(10, 20)
print(f"10 + 20 = {result}")
# 기본 매개변수 값 (Default Parameter Values)
def show_info(name, age=0): # age에 기본값 0을 설정
print(f"이름: {name}, 나이: {age}")
show_info("박민수") # 나이 지정 안 함
show_info("최지영", 25) # 나이 지정
docstring
(함수 정의 바로 아래 세 개의 따옴표로 묶인 문자열)을 사용하여 함수 설명을 추가하는 습관을 들이세요.1.6. 자료구조 (Data Structures)
데이터를 효율적으로 저장하고 관리하기 위한 구조입니다. 파이썬의 강력한 내장 자료구조들을 이해하는 것은 매우 중요합니다.
리스트 (List)
순서가 있고 변경 가능한(mutable) 데이터들의 집합입니다. []
를 사용하여 생성합니다.
- 다양한 타입의 데이터를 저장할 수 있습니다.
- 인덱싱, 슬라이싱, 요소 추가/삭제/변경 등의 작업을 할 수 있습니다.
my_list = [1, "hello", 3.14, True, 5]
print(f"초기 리스트: {my_list}")
# 요소 접근
print(f"첫 번째 요소: {my_list[0]}") # 1
print(f"세 번째 요소: {my_list[2]}") # 3.14
# 요소 변경
my_list[1] = "world"
print(f"변경된 리스트: {my_list}") # [1, 'world', 3.14, True, 5]
# 요소 추가
my_list.append(10) # 리스트 끝에 추가
my_list.insert(1, "new_item") # 특정 위치에 삽입
print(f"추가 후 리스트: {my_list}") # [1, 'new_item', 'world', 3.14, True, 5, 10]
# 요소 삭제
my_list.pop() # 마지막 요소 제거 (반환)
my_list.remove("world") # 값으로 제거
print(f"삭제 후 리스트: {my_list}") # [1, 'new_item', 3.14, True, 5]
# 리스트 길이
print(f"리스트 길이: {len(my_list)}")
튜플 (Tuple)
순서가 있고 변경 불가능한(immutable) 데이터들의 집합입니다. ()
를 사용하여 생성합니다.
- 한 번 생성되면 요소를 변경할 수 없습니다.
- 주로 여러 값을 묶어서 전달하거나, 데이터의 무결성을 보장해야 할 때 사용됩니다.
my_tuple = (1, 2, "three", 4.0)
print(f"초기 튜플: {my_tuple}")
# 요소 접근은 가능
print(f"튜플의 첫 번째 요소: {my_tuple[0]}") # 1
# 요소 변경 시도 (오류 발생)
# my_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment
# 튜플 언패킹 (unpacking)
a, b, c, d = my_tuple
print(f"언패킹된 값: {a}, {b}, {c}, {d}")
딕셔너리 (Dictionary)
키(key)와 값(value)의 쌍으로 이루어진 변경 가능한 데이터들의 집합입니다. {}
를 사용하여 생성합니다.
- 키는 고유해야 하며, 값을 조회하는 데 사용됩니다.
- 순서가 없습니다 (파이썬 3.7+ 버전부터는 삽입 순서가 유지됩니다).
my_dict = {"name": "Alice", "age": 30, "city": "New York"}
print(f"초기 딕셔너리: {my_dict}")
# 값 접근
print(f"이름: {my_dict['name']}") # Alice
print(f"도시: {my_dict.get('city')}") # get() 메서드는 키가 없을 경우 오류 대신 None을 반환
# 값 변경
my_dict["age"] = 31
print(f"변경된 딕셔너리: {my_dict}")
# 새로운 키-값 쌍 추가
my_dict["country"] = "USA"
print(f"추가 후 딕셔너리: {my_dict}")
# 키-값 쌍 삭제
del my_dict["city"]
print(f"삭제 후 딕셔너리: {my_dict}")
# 모든 키, 모든 값, 모든 아이템 얻기
print(f"모든 키: {my_dict.keys()}")
print(f"모든 값: {my_dict.values()}")
print(f"모든 아이템: {my_dict.items()}")
집합 (Set)
순서가 없고 중복을 허용하지 않는 데이터들의 집합입니다. {}
또는 set()
함수를 사용하여 생성합니다.
- 주로 중복 제거, 교집합, 합집합, 차집합 등의 집합 연산에 사용됩니다.
my_set = {1, 2, 3, 2, 1, 4} # 생성 시 중복 자동 제거
print(f"초기 집합 (중복 제거됨): {my_set}") # {1, 2, 3, 4}
# 요소 추가
my_set.add(5)
print(f"요소 추가 후 집합: {my_set}")
# 요소 제거
my_set.remove(2) # 2 제거
print(f"요소 제거 후 집합: {my_set}")
# 집합 연산
set_a = {1, 2, 3, 4}
set_b = {3, 4, 5, 6}
print(f"합집합 (Union): {set_a.union(set_b)}") # {1, 2, 3, 4, 5, 6}
print(f"교집합 (Intersection): {set_a.intersection(set_b)}") # {3, 4}
print(f"차집합 (Difference): {set_a.difference(set_b)}") # {1, 2}
- 리스트: 순서가 중요하고, 요소의 추가/삭제/변경이 빈번할 때.
- 튜플: 한 번 정의된 데이터가 변경되지 않아야 할 때 (예: 좌표, 색상 코드).
- 딕셔너리: 키를 통해 빠르게 값을 찾고 싶을 때 (예: 사용자 정보, 설정 값).
- 집합: 중복을 제거하거나, 집합 연산이 필요할 때.
1.7. 모듈과 패키지
파이썬은 모듈과 패키지 시스템을 통해 코드의 재사용성과 관리 효율성을 높입니다.
모듈 (Module)
파이썬 코드(.py
파일)가 저장되어 있는 파일입니다. 관련된 함수, 클래스, 변수 등을 한 파일에 묶어 놓은 단위입니다.
import
문을 사용하여 다른 파일에서 모듈의 내용을 가져와 사용할 수 있습니다.
# --- my_module.py 파일 내용 ---
# def hello():
# print("Hello from my_module!")
#
# my_variable = "모듈 변수입니다."
# --- main.py 파일 내용 (위의 my_module.py가 같은 디렉토리에 있다고 가정) ---
import my_module
my_module.hello()
print(my_module.my_variable)
# 특정 함수/변수만 가져오기
from my_module import hello
hello()
# print(my_variable) # 이 경우 my_variable은 직접 가져오지 않아 오류 발생
패키지 (Package)
여러 모듈들을 묶어놓은 디렉토리입니다. __init__.py
파일을 포함하는 디렉토리가 패키지로 인식됩니다 (파이썬 3.3부터는 __init__.py
파일이 없어도 패키지로 인식되지만, 호환성과 명시성을 위해 포함하는 것이 좋습니다).
- 모듈을 계층적으로 관리하고 이름 충돌을 방지하는 데 사용됩니다.
# 예시 패키지 구조
my_package/
__init__.py
module_a.py
sub_package/
__init__.py
module_b.py
# --- module_a.py 내용 ---
# def func_a():
# print("func_a from module_a")
# --- module_b.py 내용 ---
# def func_b():
# print("func_b from module_b")
# --- main.py 파일 내용 (my_package가 같은 디렉토리에 있다고 가정) ---
# 패키지 내의 모듈 import
import my_package.module_a
my_package.module_a.func_a()
# from ... import ... 형태로 사용
from my_package.sub_package import module_b
module_b.func_b()
# 특정 함수만 가져오기 (권장)
from my_package.module_a import func_a
func_a()
import os
: 운영체제와 상호작용하는 기능을 제공합니다. (예: 파일 경로 조작)import sys
: 파이썬 인터프리터 관련 기능을 제공합니다.import math
: 수학 관련 함수를 제공합니다.pip
를 사용하여 외부 패키지를 설치할 수 있습니다. (예:pip install numpy
)