파이썬의 내장 함수

파이썬은 개발자를 위해 풍부한 내장 함수를 제공합니다. 이 함수들은 일반적인 프로그래밍 작업을 간편하게 수행할 수 있도록 도와줍니다. 이번 글에서는 이러한 내장 함수들에 대해 자세히 알아보고, 각 함수의 사용법과 그 용례를 살펴보겠습니다.

1. print() 함수

print() 함수는 가장 많이 사용되는 함수 중 하나로, 콘솔에 출력을 표시하는 데 사용됩니다. 여러 개의 인수를 받아 하나의 문자열로 연결하여 출력할 수 있으며, 기본적으로 문자열 사이에 공백을 추가합니다.

print("Hello, World!")
print("Python", "is", "fun")

결과:

Hello, World!
Python is fun

2. len() 함수

len() 함수는 객체의 길이를 반환합니다. 문자열, 리스트, 튜플, 딕셔너리 등 시퀀스 자료형에 주로 사용됩니다.

string = "Python"
print(len(string))

numbers = [1, 2, 3, 4, 5]
print(len(numbers))

결과:

6
5

3. type() 함수

type() 함수는 객체의 자료형을 반환합니다. 이 함수는 변수가 예상한 타입인지 확인하는 데 유용합니다.

print(type(3))
print(type(3.0))
print(type("Hello"))

결과:

<class 'int'>
<class 'float'>
<class 'str'>

4. input() 함수

input() 함수는 사용자로부터 문자열 입력을 받을 때 사용됩니다. 파이썬 3.x에서는 항상 문자열 형태로 입력을 받습니다.

name = input("Enter your name: ")
print("Hello, " + name + "!")

5. sum() 함수

sum() 함수는 숫자 시퀀스의 합계를 계산합니다. 이 함수는 주로 리스트나 튜플의 합계를 구하는 데 사용됩니다.

numbers = [1, 2, 3, 4, 5]
print(sum(numbers))

결과:

15

6. min()와 max() 함수

min() 함수는 시퀀스에서 최소값을, max() 함수는 최대값을 반환합니다. 이 함수들은 숫자 시퀀스의 최솟값과 최댓값을 찾는 데 유용합니다.

numbers = [3, 1, 4, 1, 5, 9]
print(min(numbers))
print(max(numbers))

결과:

1
9

7. sorted() 함수

sorted() 함수는 주어진 시퀀스를 정렬한 결과를 반환합니다. 이 함수는 원래의 리스트를 변경하지 않고 새로운 정렬된 리스트를 생성합니다. 기본적으로 오름차순으로 정렬되며, reverse=True를 사용하면 내림차순으로 정렬됩니다.

numbers = [3, 1, 4, 1, 5, 9]
print(sorted(numbers))
print(sorted(numbers, reverse=True))

결과:

[1, 1, 3, 4, 5, 9]
[9, 5, 4, 3, 1, 1]

8. any()와 all() 함수

any() 함수는 시퀀스 내에서 하나 이상의 요소가 True일 경우 True를 반환하고, 그렇지 않으면 False를 반환합니다. all() 함수는 모든 요소가 True일 경우 True를 반환합니다.

bool_list = [True, False, True]
print(any(bool_list))
print(all(bool_list))

결과:

True
False

9. zip() 함수

zip() 함수는 여러 시퀀스를 병렬로 묶어줍니다. 각 시퀀스의 요소를 튜플로 묶어 나열하며, 시퀀스 중 가장 짧은 것의 길이에 맞춥니다.

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
print(list(zipped))

결과:

[(1, 'a'), (2, 'b'), (3, 'c')]

10. enumerate() 함수

enumerate() 함수는 시퀀스의 요소를 인덱스와 함께 튜플로 반환합니다. 기본적으로 인덱스는 0에서 시작하며, 시작을 다른 숫자로 변경할 수 있습니다.

letters = ['a', 'b', 'c']
for index, letter in enumerate(letters):
    print(index, letter)

결과:

0 a
1 b
2 c

11. range() 함수

range() 함수는 정수 시퀀스를 생성합니다. 이 시퀀스는 주로 반복문에서 사용됩니다. range()는 세 개의 인수를 받을 수 있으며, 각각 시작값, 종료값, 증감값을 의미합니다.

for i in range(5):
    print(i)

for i in range(1, 10, 2):
    print(i)

결과:

0
1
2
3
4
1
3
5
7
9

12. filter() 함수

filter() 함수는 주어진 함수와 시퀀스를 받아서, 함수의 조건을 만족하는 요소를 걸러낸다. 결과값은 필터 객체이며, list()를 통해 리스트로 변환할 수 있다.

def is_even(n):
    return n % 2 == 0

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(is_even, numbers)
print(list(even_numbers))

결과:

[2, 4, 6]

13. map() 함수

map() 함수는 주어진 함수와 시퀀스를 받아서, 함수가 적용된 결과를 돌려준다. 이는 주어진 모든 요소에 함수를 적용할 때 유용하다.

def square(n):
    return n * n

numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
print(list(squared_numbers))

결과:

[1, 4, 9, 16, 25]

14. reduce() 함수

reduce() 함수는 누적 계산을 수행하여 하나의 결과를 반환하는 함수입니다. reduce() 함수는 functools 모듈에서 가져와야 합니다. 주요 사용 케이스는 시퀀스를 누적하여 값을 계산할 때입니다.

from functools import reduce

def add(x, y):
    return x + y

numbers = [1, 2, 3, 4, 5]
total = reduce(add, numbers)
print(total)

결과:

15

위의 예시는 파이썬 내장 함수의 몇 가지 예제이며, 각 함수의 특성과 사용법에 대해 알아보았습니다. 이 외에도 파이썬은 다양한 내장 함수를 제공하며, 각 함수는 특정한 작업을 더 쉽고 빠르게 해결할 수 있도록 도와줍니다.

함수의 사용법을 숙지하고 적절히 활용하면, 더 효율적이고 가독성 있는 코드를 작성할 수 있습니다. 내장 함수들은 이러한 목표를 이루기 위한 기본적인 도구가 될 것입니다.

파이썬의 예외 처리 (Exception Handling in Python)

프로그래밍을 하다 보면 런타임 중 예기치 않은 상황이 발생할 수 있습니다. 이러한 상황을 예외(exception)라고 하며, 파이썬에서는 이러한 예외를 우아하게 처리할 수 있는 다양한 방법을 제공합니다. 이 글에서는 예외의 개념, 파이썬에서 예외를 처리하는 방법, 사용자 정의 예외 생성, 그리고 예외가 발생한 후의 흐름 제어에 대해 상세히 설명합니다.

예외란 무엇인가?

예외란 프로그램의 정상적인 흐름을 방해하는 런타임 오류입니다. 예를 들어, 숫자를 0으로 나누려고 할 때, 존재하지 않는 파일을 열려고 할 때 또는 네트워크가 불안정하여 연결이 끊어질 때 예외가 발생할 수 있습니다. 이러한 오류는 예외로 처리되어야 프로그램이 예기치 않게 종료되는 것을 방지하고, 개발자가 그에 맞는 대응을 할 수 있게 해줍니다.

파이썬의 내장 예외(Exception Classes)

파이썬은 많은 내장(built-in) 예외 클래스들을 제공합니다. 기본적인 예외 클래스는 Exception이며, 모든 내장 예외는 이 클래스에서 파생됩니다. 몇 가지 주요 내장 예외 클래스는 다음과 같습니다:

  • IndexError : 시퀀스 인덱스가 범위를 벗어났을 때 발생합니다.
  • KeyError : 딕셔너너리에서 존재하지 않는 키를 참조할 때 발생합니다.
  • ValueError : 부적절한 값을 연산이나 함수에 제공할 때 발생합니다.
  • TypeError : 부적절한 유형의 인자를 함수에 제공할 때 발생합니다.
  • ZeroDivisionError : 0으로 나누려고 할 때 발생합니다.

파이썬에서 예외 처리하기

파이썬에서는 try-except 블록을 사용하여 예외를 처리합니다. 이 블록은 코드에서 예외가 발생할 수 있는 부분을 감싸고, 예외가 발생했을 때 대처할 로직을 제공합니다.

기본 try-except 구조

try:
    # 잠재적으로 예외가 발생할 수 있는 코드
except SomeException:
    # 예외가 발생했을 때 실행할 코드

이 구조에서는 try 블록 내의 코드가 실행됩니다. 만약 예외가 발생하면, try 블록의 나머지 코드는 무시되고 except 블록으로 넘어갑니다. 예외가 발생하지 않으면 except 블록은 무시됩니다.

여러 개의 except 블록 처리하기

여러 유형의 예외를 각각 다르게 처리하기 위해, 여러 개의 except 블록을 사용할 수 있습니다. 가장 일반적인 사용 예는 다음과 같습니다:

try:
    # 예외가 발생할 수 있는 코드
except FirstException:
    # FirstException을 처리하는 코드
except SecondException:
    # SecondException을 처리하는 코드
except Exception as e:
    # 모든 예외를 포괄하여 처리

이 구조에서는 발생한 예외의 유형에 따라 적합한 except 블록이 선택되어 실행됩니다.

else 블록 사용

try 블록의 코드가 예외 없이 성공적으로 실행되었을 때, else 블록이 실행됩니다. 이는 예외가 발생하지 않을 경우에만 실행되고자 하는 코드를 else 블록에 넣는 데 유용합니다. 예제:

try:
    result = x / y
except ZeroDivisionError:
    print("Cannot divide by zero!")
else:
    print("Division successful, result:", result)

finally 블록 사용

finally 블록은 예외 발생 여부와 상관없이 try 문이 종료될 때 항상 실행됩니다. 보통 정리 작업(Cleanup)을 수행하는 데 사용됩니다.

try:
    file = open('data.txt')
    # 파일에서 작업을 수행
except FileNotFoundError:
    print("File not found!")
finally:
    file.close()

위 코드는 예외 발생 여부와 상관없이 파일을 닫습니다.

사용자 정의 예외

개발자는 필요에 따라 사용자 정의 예외를 만들 수 있습니다. 이는 표준 예외 클래스인 Exception을 상속받아 새로운 예외 클래스를 정의하는 방식으로 수행됩니다.

사용자 정의 예외 클래스 만들기

class CustomException(Exception):
    pass

def some_function(x):
    if x < 0:
        raise CustomException("Negative value not allowed!")

이 예제에서는 CustomException이라는 사용자 정의 예외를 만들고, 특정 조건에서 이 예외가 발생하도록 설정하였습니다.

사용자 정의 예외의 고급 사용

사용자 정의 예외 클래스에 추가적인 정보를 제공하기 위해 생성자를 재정의하곤 합니다.

class DetailedException(Exception):
    def __init__(self, message, value):
        super().__init__(message)
        self.value = value

이 클래스는 예외 메시지와 추가적인 값을 포함하여 예외 처리를 더욱 유연하게 만듭니다.

결론

파이썬의 예외 처리는 프로그램의 안정성을 높이고, 예기치 않은 상황에서도 프로그램이 의도한 대로 동작할 수 있도록 도와줍니다. 예외 처리는 단순히 오류를 감지하는 것에 그치지 않고, 적절히 예외를 다루고 복구하는 방법을 제공하여, 소프트웨어의 유연성과 신뢰성을 개선하는 데 중요한 요소입니다. 본 글을 통해 파이썬에서의 예외 처리 방법 및 사용자 정의 예외 생성에 대한 이해가 깊어지길 바랍니다.

05-3 파이썬의 패키지

패키지란 무엇인가?

파이썬에서 패키지는 모듈을 체계적으로 관리하기 위한 도구입니다. 모듈은 하나의 파이썬 파일로, 관련된 함수와 클래스들을 포함할 수 있습니다. 패키지는 이러한 모듈들을 디렉토리 구조로 묶어서 구성, 관리하며, 대규모 프로젝트에서 코드의 가독성과 재사용성을 높이는 데 큰 도움을 줍니다.

패키지를 사용하면 네임스페이스를 분리하여 동일한 모듈 이름을 각기 다른 패키지에서 사용할 수 있습니다. 이는 코드 충돌을 방지하고, 유지 보수성 및 모듈의 재사용성을 극대화합니다. 패키지를 이해하고 사용하는 것은 파이썬 프로그래머에게 필수적입니다.

패키지의 생성과 구성요소

패키지 생성 방법

파이썬 패키지를 생성하기 위해서는 특정 디렉토리 구조를 따라야 합니다. 일반적으로 패키지 디렉토리는 하나 이상의 파이썬 모듈을 포함하며, __init__.py라는 특별한 파일이 존재해야 합니다. __init__.py 파일은 패키지를 초기화하는 역할을 하며, 해당 디렉토리를 파이썬에 패키지로 인식시킵니다.

다음은 패키지 생성의 기본 예제입니다:


my_package/
   ├── __init__.py
   ├── module1.py
   └── module2.py
        

__init__.py 파일의 역할

__init__.py 파일은 패키지가 초기화될 때 실행되는 코드 모음입니다. 이 파일은 비어 있을 수도 있고, 모듈, 클래스 또는 함수의 초기화 코드를 포함할 수도 있습니다. 이를 통해 패키지를 사용할 때 자동으로 특정 모듈을 임포트하거나 초기화할 수 있습니다.

패키지 설치 및 관리

PyPI와 pip

PyPI(The Python Package Index)는 수천 개의 사용자 생성 패키지가 호스팅된 공식 저장소입니다. pip는 PyPI에 접속하여 패키지를 설치, 업그레이드 및 제거할 수 있는 패키지 관리 도구입니다. pip를 사용하면 복잡한 의존성 문제를 자동으로 해결할 수 있으며, 명령어 하나로 수많은 패키지를 손쉽게 관리할 수 있습니다.

패키지 설치하기

패키지를 설치하기 위해서는 명령 프롬프트나 터미널에서 pip 명령어를 실행합니다. 다음은 패키지를 설치하는 기본 명령어입니다:

pip install package_name

예를 들어, NumPy라는 과학 계산 패키지를 설치하고자 한다면 다음과 같이 실행합니다:

pip install numpy

자주 사용하는 파이썬 패키지

NumPy

NumPy는 수치 계산을 위한 핵심 패키지로, 고성능 다차원 배열 객체와 다양한 수학 함수들을 제공합니다. 대규모 데이터 분석, 머신러닝, 시뮬레이션 등에 널리 사용됩니다. 특히 벡터화 연산을 지원하여 반복문 없이도 데이터를 효율적으로 처리할 수 있습니다.

Pandas

Pandas는 데이터를 조작하고 분석하기 위한 강력한 도구입니다. 데이터 프레임이라는 구조를 도입하여 엑셀과 비슷한 방식의 데이터 처리를 가능하게 합니다. 데이터를 필터링하고, 집계하며, 다양한 형식으로 입력과 출력을 제공하는 데 있어 필수적인 패키지입니다.

Matplotlib

Matplotlib는 데이터를 시각화하는 데 사용되는 패키지로, 간단히 선 그래프, 막대 그래프, 히스토그램 등을 생성할 수 있습니다. 다양한 시각화 옵션을 지원하며, 데이터 분석 결과를 효과적으로 전달할 수 있는 도구입니다.

TensorFlow

TensorFlow는 Google에서 개발한 오픈소스 머신러닝 플랫폼으로, 다양한 유형의 딥러닝 모델을 구축하고 훈련하는 데 사용됩니다. 텐서 및 그래프 계산을 지원하여 대규모 머신러닝 작업을 수행할 수 있는 고성능 라이브러리입니다.

결론

파이썬에서 패키지는 복잡한 코드를 체계적으로 관리하는 데 있어 필수적인 도구입니다. 패키지는 코드의 가독성을 향상시키고, 네임스페이스를 관리하며, 모듈의 재사용 가능성을 높입니다. 패키지의 설치 및 관리는 PyPI와 pip를 통해 손쉽게 이루어지며, 다양한 패키지가 제공하는 기능들을 통해 파이썬의 전력을 극대화할 수 있습니다. 이러한 이유로, 효과적인 패키지 관리와 활용 능력은 현대 파이썬 프로그래밍의 필수적인 요소로 자리 잡고 있습니다.

파이썬의 모듈: 프로그래밍의 강력한 도구

파이썬은 놀라운 기능성과 유연성을 자랑하는 프로그래밍 언어입니다. 이 언어의 강력함은 다양한 모듈을 통해 발휘되며, 모듈은 코드의 재사용성을 높이고 프로그램의 복잡성을 줄이는 데 중요한 역할을 합니다. 이번 포스트에서는 파이썬의 모듈에 대해 깊이 있게 탐구해보겠습니다.

1. 모듈의 정의와 목적

파이썬에서 모듈은 관련 있는 함수, 클래스, 변수들을 모아놓은 파일입니다. 모듈은 코드의 재사용성을 극대화하며, 여러 프로그램 간에 쉽게 코드를 공유할 수 있도록 합니다. 특히 모듈을 활용하면 다음과 같은 이점을 누릴 수 있습니다:

  • 다른 프로그램에서 쉽게 사용할 수 있는 기능 반복.
  • 코드의 가독성과 유지보수성 향상.
  • 실행 파일의 크기 축소.
  • 컴파일 과정을 통해 성능 개선 및 에러 감소.

1.1 모듈의 예시

파이썬 표준 라이브러리에는 수많은 내장 모듈이 포함되어 있습니다. 예를 들어, math 모듈은 삼각 함수, 로그 함수 등 다양한 수학 함수를 제공합니다. 다음은 math 모듈을 사용하는 간단한 예제입니다:


import math

print(math.sqrt(16))  # 4.0 출력
print(math.factorial(5))  # 120 출력

2. 내장 모듈 활용법

파이썬의 내장 모듈은 우리가 자주 사용하는 기능들을 이미 구현해 두었습니다. 이러한 모듈들은 Python 설치 시 기본적으로 포함되어 있어 추가 설치가 필요 없습니다. 이제 주로 사용되는 내장 모듈 몇 가지를 알아보겠습니다.

2.1 os 모듈

os 모듈은 운영 체제와 상호 작용하기 위한 다양한 함수들을 제공합니다. 파일 경로 관련 작업이나 환경 변수 접근 등이 가능합니다.


import os

# 현재 디렉터리 알아내기
current_directory = os.getcwd()
print("현재 디렉터리:", current_directory)

# 새로운 디렉터리 생성
os.mkdir("new_directory")

2.2 sys 모듈

sys 모듈은 파이썬 인터프리터와 관련된 정보를 제공합니다. 주로 커맨드 라인 인수 처리에 유용하게 사용됩니다.


import sys

# 전달받은 인수 출력
print("전달받은 인수 목록:", sys.argv)

# Python 인터프리터의 버전 정보
print("Python 버전:", sys.version)

2.3 datetime 모듈

datetime 모듈은 날짜와 시간 조작을 쉽게 할 수 있도록 다양한 클래스를 제공합니다.


import datetime

# 현재 날짜와 시간 출력
now = datetime.datetime.now()
print("현재 날짜와 시간:", now)

# 특정 날짜 생성
new_year = datetime.datetime(2023, 1, 1)
print("새해 첫날:", new_year)

3. 사용자 정의 모듈 생성 및 사용

사용자 정의 모듈을 생성하는 것은 매우 간단합니다. 파이썬 파일(.py)을 만들고, 그 안에 필요한 함수나 변수를 정의하면 됩니다. 그런 다음 다른 파이썬 파일에서 import를 통해 이 모듈을 사용할 수 있습니다.

3.1 사용자 정의 모듈 예제

다음은 간단한 사용자 정의 모듈 예제입니다:


# 파일명: my_module.py

def greet(name):
    return f"Hello, {name}!"

def add(a, b):
    return a + b

위의 my_module.py 파일을 같은 디렉터리에 저장한 다음 다른 스크립트에서 사용해 봅니다:


# 파일명: main.py

import my_module

print(my_module.greet("Alice"))
print(my_module.add(3, 4))

이러한 방식으로 사용자 정의 모듈을 통해 코드를 모듈화하고 재사용할 수 있습니다.

4. 서드파티 모듈 설치와 사용

파이썬 커뮤니티는 수많은 서드파티 모듈을 제공합니다. 이러한 모듈은 일반적으로 파이썬 패키지 인덱스(PyPI)를 통해 설치할 수 있습니다. pip 명령어를 사용하여 설치할 수 있습니다.

4.1 서드파티 모듈 설치

예를 들어, requests 모듈을 설치하려면 다음 명령어를 사용합니다:

pip install requests

python 코드에서 요청 모듈을 사용하면 네트워크 요청을 쉽게 보낼 수 있습니다:


import requests

response = requests.get('https://api.github.com')
print(response.status_code)

이러한 서드파티 모듈을 사용하면 파이썬의 기능을 크게 확장할 수 있습니다.

5. 모듈의 관리와 최선의 실전 사례

모듈을 사용할 때의 최선 실전 사례들은 보다 유지보수성이 뛰어난 코드를 만들고, 나중에 발생할 수 있는 문제를 미리 방지할 수 있도록 합니다.

5.1 일관된 네이밍 컨벤션 사용하기

일관성 있는 네이밍 컨벤션을 사용하여 모듈의 가독성을 높이고, 모듈이 제공하는 기능을 명확히 알 수 있도록 합니다. PEP 8은 파이썬의 스타일 가이드로, 모듈은 소문자로 작성하고 밑줄로 단어를 구분할 것을 권장합니다.

5.2 문서화 중요성

모듈 및 함수의 용도와 사용 방법을 설명하는 문서화를 철저하게 작성하십시오. 이는 특히 다른 개발자 또는 미래의 자신이 모듈을 쉽게 이해하고 사용할 수 있도록 합니다.

5.3 예외 처리

모듈 내부에서 발생할 수 있는 예외를 적절하게 처리하여 모듈 사용 시 발생할 수 있는 잠재적 오류를 최소화합니다. 이를 위해 예외 처리를 적극 활용합니다.

5.4 테스트의 필요성

모듈에 대한 테스트를 작성하여 모듈의 기능이 예상대로 동작하는지 확인하십시오. 테스트는 코드를 변경한 후에도 모듈이 제대로 작동할지를 확인하는 데 유용합니다.

이렇듯 파이썬 모듈은 개발자의 생산성을 높이고 코드의 품질을 향상시키는 데 중요한 역할을 합니다. 모듈을 제대로 이해하고 사용하면 더욱 효율적이고 깔끔한 코드를 작성할 수 있습니다.

05-1 파이썬의 클래스

1. 클래스란 무엇인가?

클래스는 프로그래밍 언어에서 객체 지향 프로그래밍(OOP)을 지원하는데 필요한 기본 단위 중 하나입니다. 클래스는 데이터(속성)와 데이터 조작을 위한 메소드(함수)를 하나로 묶는 데 사용됩니다. 클래스를 사용하면 코드의 구조를 잘 정리하고, 더 재사용 가능하게 만들 수 있습니다.

2. 클래스와 객체의 차이

클래스는 객체를 생성하기 위한 청사진(설계도)입니다. 객체는 클래스를 기반으로 생성된 실체이며, 런타임에 메모리를 점유하고 행동할 수 있는 상태를 가집니다.

3. 클래스 정의하기

클래스는 class 키워드를 사용하여 정의합니다. 클래스 이름은 보통 대문자로 시작되며, 클래스 본문은 들여쓰기 되어야 합니다.

class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

4. 생성자와 소멸자

생성자는 객체가 생성될 때 자동으로 호출되는 메소드로, 주로 객체의 초기 상태를 설정하는 데 사용됩니다. 파이썬에서는 __init__ 메소드가 그 역할을 합니다. 소멸자는 객체가 삭제될 때 호출되며, __del__ 메소드로 정의할 수 있습니다.

5. 클래스 변수와 인스턴스 변수

클래스 변수는 클래스에 의해 공유되는 변수로, 모든 인스턴스에서 동일한 값을 가집니다. 인스턴스 변수는 객체마다 별도의 값을 가질 수 있는 변수입니다.

class Car:
    number_of_wheels = 4  # 클래스 변수

    def __init__(self, make, model, year):
        self.make = make    # 인스턴스 변수
        self.model = model  # 인스턴스 변수
        self.year = year    # 인스턴스 변수

6. 메소드 정의

메소드는 클래스 내부에 정의된 함수로, 객체의 동작을 정의합니다. 보통 인스턴스 메소드가 사용되며, 첫 번째 매개변수로 self를 사용하여 해당 객체에 접근할 수 있습니다.

class Car:
    def start_engine(self):
        print("Engine started")

7. 상속

상속은 기존 클래스를 기반으로 새로운 클래스를 만드는 기법으로, 코드 재사용성을 높입니다. class DerivedClass(BaseClass): 형태로 정의합니다.

class ElectricCar(Car):
    def __init__(self, make, model, year, battery_size):
        super().__init__(make, model, year)
        self.battery_size = battery_size

8. 다형성

다형성은 같은 인터페이스로 서로 다른 데이터 타입을 처리할 수 있는 기능입니다. 파이썬에서는 메소드 오버라이딩을 통해 다형성을 구현할 수 있습니다.

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "Woof!"

class Cat(Animal):
    def sound(self):
        return "Meow!"

9. 캡슐화

캡슐화는 객체의 일부 구현 내용에 대해 외부로부터의 접근을 제한하는 것을 의미합니다. 파이썬에서는 관습적으로 변수명 앞에 밑줄을 붙여(private) 캡슐화를 나타냅니다.

10. 클래스 활용 예제

여기서는 앞서 설명한 모든 개념을 포함한 예제를 만들어 보겠습니다.

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self._pages = pages  # Private 변수

    def __str__(self):
        return f"{self.title} by {self.author}"

    def set_pages(self, pages):
        if pages > 0:
            self._pages = pages
        else:
            raise ValueError("페이지 수는 양수여야 합니다.")