파이썬 클래스와 인스턴스 이해하기
파이썬은 객체 지향 프로그래밍 언어로, 클래스와 인스턴스를 사용하여 데이터와 기능을 캡슐화할 수 있습니다. 이 글 에서는 파이썬의 클래스와 인스턴스에 대해 알아보도록 하겠습니다.
클래스란?
클래스는 데이터(멤버 변수)와 기능(메서드)을 가지고 있는 설계도입니다. 예를 들어, 자동차를 생각해보면, 최대 속도, 색상, 브랜드 등의 속성과 출발, 정지 등의 기능을 가질 수 있습니다. 이러한 속성과 기능을 파이썬에서는 클래스를 통해 정의할 수 있습니다.
class Car:
max_speed = 300
color = 'red'
def start(self):
print('차가 출발합니다!')
인스턴스란?
인스턴스는 클래스를 기반으로 생성된 객체입니다. 클래스는 설계도이며, 인스턴스는 그 설계도를 바탕으로 만들어진 실제 객체를 의미합니다.
modelx = Car()
modelx.start() # 출력: 차가 출발합니다!
__init__ 메서드
__init__ 메서드는 인스턴스가 생성될 때 자동으로 호출되는 특별한 메서드입니다. 이 메서드를 사용하여 인스턴스 변수를 초기화할 수 있습니다.
class Car:
def __init__(self, name):
self.name = name
매직 메서드
파이썬에서는 특별한 동작을 수행하는 메서드를 매직 메서드라고 부릅니다. 예를 들어, __add__ 메서드는 두 객체를 더할 때의 동작을 정의합니다.
class Coordinate:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Coordinate(self.x + other.x, self.y + other.y)
클래스 변수와 인스턴스 변수
클래스 변수는 클래스 내부에서 정의되지만 메서드 밖에서 정의되며, 해당 클래스의 모든 인스턴스에서 공유됩니다. 반면, 인스턴스 변수는 각 인스턴스 내에서만 공유됩니다.
클래스 메서드와 정적 메서드
- 클래스 메서드 (@classmethod)
클래스 메서드는 클래스에 직접 작용하는 메서드입니다. 첫 번째 인자로 클래스 자체를 받게 되며, 이를 통해 클래스 상태를 변경할 수 있습니다.
class MyClass:
class_attribute = "class attribute"
@classmethod
def modify_class_attribute(cls, value):
cls.class_attribute = value
- 정적(static) 메서드 (@staticmethod)
정적 메서드는 클래스나 인스턴스와 독립적으로 작동합니다. 클래스의 상태나 인스턴스의 상태와 관련없이 동작하는 기능을 갖습니다.
class MyClass:
@staticmethod
def my_static_method(value):
return value * 2
속성 접근자와 덕 타이핑
- 속성 접근자 (Property)
@property 데코레이터를 사용하면, 메서드를 마치 속성처럼 접근할 수 있게 됩니다. 이를 통해 속성 값의 검증이나 추가 로직을 제공할 수 있습니다.
class MyClass:
def __init__(self, value):
self._value = value
@property
def value(self):
return self._value
@value.setter
def value(self, new_value):
if new_value > 0:
self._value = new_value
추상 클래스 (Abstract Base Class, ABC)
추상 클래스는 서브클래스에서 반드시 구현해야 하는 메서드(추상 메서드)를 정의하는 데 사용됩니다.
from abc import ABC, abstractmethod
class MyAbstractClass(ABC):
@abstractmethod
def do_something(self):
pass
비공개 속성(Private Attributes)와 네임 맹글링(Name Mangling)
파이썬에서 속성 앞에 두 개의 언더스코어(__)를 붙이면 해당 속성은 비공개처럼 작동합니다. 하지만, 이것은 완전한 비공개가 아닙니다. 네임 맹글링 메커니즘을 통해 _클래스명__속성명 형태로 접근이 가능합니다.
class MyClass:
def __init__(self):
self.__private_attribute = "private"
obj = MyClass()
print(obj._MyClass__private_attribute) # 출력: private
모듈(Module)
파이썬 코드를 재사용하기 위해 파일(.py) 단위로 구분된 코드를 모듈이라고 합니다. 이 모듈은 import를 통해 다른 코드에서 불러와 사용할 수 있습니다.
# mymodule.py
def my_function():
return "Hello from my module!"
# main.py
import mymodule
print(mymodule.my_function()) # 출력: Hello from my module!
- 프로그래밍 언어, 특히 파이썬,에서는 다양한 고급 기능과 개념들이 존재합니다. 이러한 기능들은 코드의 효율성, 가독성, 그리고 재사용성을 크게 향상시키는 요소로 작용합니다. 일급 함수, 고차 함수, 데코레이터, *args와 **kwargs, 그리고 이터레이터는 이 중 핵심적인 개념들로, 파이썬의 다양한 특성과 잠재력을 이해하는 데 큰 도움이 됩니다.
일급 함수 (First-Class Function)
일급 함수는 프로그래밍 언어의 특징 중 하나로, 함수나 메서드를 일급 시민(값)처럼 취급하는 것을 말합니다. 이를 통해 다음과 같은 기능이 가능해집니다. - 함수를 변수에 할당
- 함수를 다른 함수의 인자로 전달
- 함수를 다른 함수의 결과로 반환
- 함수를 데이터 구조에 저장
def greet(name):
return f"Hello, {name}!"
greet_function = greet
print(greet_function("Alice"))
고차 함수 (Higher-order functions)
고차 함수는 다른 함수를 인자로 받거나, 함수를 결과로 반환하는 함수를 말합니다. 파이썬에서는 함수를 일급 객체로 취급하기 때문에 이러한 고차 함수가 가능합니다. 이러한 고차 함수의 사용은 다음과 같은 장점을 가집니다.
def add(x, y):
return x + y
def apply(func, x, y):
return func(x, y)
result = apply(add, 2, 3)
print(result)
코드의 재사용성 향상
코드의 가독성 및 유연성 향상
데코레이터
데코레이터는 파이썬의 특별한 기능으로, 다른 함수나 메서드에 추가적인 처리나 기능을 제공합니다. 데코레이터의 주요 특징 및 장점은 다음과 같습니다.
코드의 재사용성: 공통된 기능을 한 곳에 정의하고 여러 함수나 메서드에 적용 가능
코드 분리: 기능과 부가 기능을 분리하여 코드의 가독성 및 유지보수성 향상
코드의 의도 전달: 데코레이터의 이름을 통해 함수나 메서드의 추가적인 기능을 명확히 할 수 있음
def decorator_function(original_function):
def wrapper_function():
print(f"{original_function.__name__} is being executed")
return original_function()
return wrapper_function
@decorator_function
def display():
print("Display function ran")
display()
*args와 **kwargs
이 두 키워드는 파이썬 함수의 파라미터로, 다양한 개수의 인자들을 받기 위해 사용됩니다.
- *args: 임의의 개수의 위치 인자들을 튜플 형태로 받습니다.
- **kwargs: 임의의 개수의 키워드 인자들을 딕셔너리 형태로 받습니다.
- * 연산자는 파이썬에서 다양한 문맥에서 사용됩니다.
- 가장 대표적인 사용처는 *args에서 볼 수 있지만, 이 외에도 리스트 언패킹 등에서 활용됩니다.
def func(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
func(1, 2, three=3, four=4)
이터레이터(Iterator)
이터레이터는 파이썬의 핵심 기능 중 하나로, 순차적으로 값을 꺼낼 수 있는 객체를 의미합니다. 이터레이터를 만들기 위해서는 __iter__와 __next__ 메서드를 구현해야 합니다.
- __iter__: 이터레이터 객체 자신을 반환
- __next__: 다음 값을 반환하거나, 더 이상 값이 없을 경우 StopIteration 예외 발생
class Count:
def __init__(self, low, high):
self.current = low
self.high = high
def __iter__(self):
return self
def __next__(self):
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.current - 1
for c in Count(1, 3):
print(c)
이렇게 객체지향 언어인 파이썬의 요소들과 개념들에 대해 살펴 보았습니다. 기본적인 구성요소들을 이해하고 적절히 활용 함으로 간결하고 효과적이고 유연한 코드를 작성할 수 있게 끔 지식을 쌓아야겠습니다.
'BackEnd' 카테고리의 다른 글
[Python BootCamp] Python과 SQL을 이용한 데이터 관리 및 분석 튜토리얼 (2) | 2024.08.15 |
---|---|
[Python BootCamp] 장고의 다양한 특징들 및 웹 개발의 다양한 아키텍처와 패턴 (0) | 2024.08.12 |
[Python BootCamp] Django로 CRUD 구현 및 간단한 블로그 서비스 만들기 (0) | 2024.08.11 |
[Python BootCamp]Django로 가상환경부터 간단한 웹사이트 구축하기 (0) | 2024.08.10 |
[Python BootCamp] 기본 연산자, 데이터 타입 조작, 내장 함수(Built-in Functions)와 집합(Set) 이해하기 (0) | 2024.08.08 |