1. 함수
함수는 특정 작업을 수행하기 위해 일련의 코드를 묶는 도구입니다. 이를 통해 코드의 재사용성과 가독성을 높일 수 있습니다. 파이썬에서 함수를 정의하는 방법은 다음과 같습니다.
def 함수명(매개변수1, 매개변수2, ...):
# 함수 내용
return 결과값
함수를 정의하기 위해서는 def
키워드를 사용하고, 함수명을 지정한 후에 괄호 안에 매개변수를 정의합니다. 매개변수는 함수 내에서 사용되는 입력값으로, 필요에 따라 생략될 수 있습니다. 함수 내용은 콜론(:
) 다음 줄부터 작성되며, 들여쓰기로 코드 블록을 구분합니다. 함수가 어떤 값을 반환하려면 return
키워드를 사용하여 결과값을 지정합니다.
함수를 호출하기 위해서는 함수명과 함께 괄호 안에 필요한 인자를 전달합니다. 인자는 함수에게 입력값을 제공하는 역할을 합니다. 예를 들어, 다음은 두 정수를 더하는 함수의 예시입니다.
def add_numbers(x, y):
result = x + y
return result
print(add_numbers(3, 5)) # 출력: 8
위 예시에서 add_numbers
함수는 두 개의 정수를 입력받아 더한 뒤 그 결과를 반환합니다. print(add_numbers(3, 5))
를 통해 함수를 호출하고 그 결과를 출력하면 8
이라는 값이 나오게 됩니다.
2. 클래스
클래스는 객체 지향 프로그래밍에서 객체를 생성하기 위한 설계도입니다. 객체는 특정한 상태와 행위를 가지는 개체를 의미하며, 클래스는 이러한 객체를 생성하기 위한 속성과 메서드를 정의합니다. 파이썬에서 클래스를 정의하는 방법은 다음과 같습니다.
class 클래스명:
def __init__(self, 속성1, 속성2, ...):
# 초기화 코드
def 메서드1(self, 매개변수1, 매개변수2, ...):
# 메서드1 코드
def 메서드2(self, 매개변수1, 매개변수2, ...):
# 메서드2 코드
클래스는 class
키워드로 시작하며, 클래스명을 지정한 후 콜론(:
)을 사용하여 클래스의 내용을 정의합니다. 클래스 내에는 초기화 메서드(__init__
)와 다양한 메서드를 포함할 수 있습니다.
초기화 메서드는 클래스가 인스턴스화될 때 호출되는 특별한 메서드입니다. 이 메서드의 첫 번째 매개변수는 self
로 지정해야 하며, 이를 통해 인스턴스에 접근할 수 있습니다. 초기화 메서드는 인스턴스 변수를 설정하거나 초기화하는데 사용됩니다.
메서드는 클래스가 가지는 동작이나 기능을 정의하는 함수입니다. 메서드는 self
매개변수를 반드시 가져야 하며, 이를 통해 메서드가 해당 인스턴스에 접근할 수 있습니다.
예를 들어, 다음은 사각형을 나타내는 클래스의 예시입니다.
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def get_area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.get_area()) # 출력: 15
위 예시에서 Rectangle
클래스는 사각형의 너비(width
)와 높이(height
)라는 두 개의 속성을 가지고 있습니다. 초기화 메서드를 통해 속성을 초기화하고, get_area
메서드를 사용하여 사각형의 넓이를 계산하고 반환합니다. rect
인스턴스를 생성하여 get_area
메서드를 호출하면, 사각형의 넓이인 15
가 출력됩니다.
3. 활용법
클래스는 객체 지향 프로그래밍에서 많이 사용되며, 다양한 방식으로 활용할 수 있습니다. 클래스를 활용하는 몇 가지 예시를 살펴보겠습니다.
상속
클래스는 다른 클래스로부터 상속을 받을 수 있습니다. 상속을 통해 부모 클래스의 속성과 메서드를 자식 클래스에서 사용할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 자식 클래스에서 부모 클래스의 기능을 확장하거나 변경할 수 있습니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError
class Dog(Animal):
def speak(self):
return "멍멍!"
class Cat(Animal):
def speak(self):
return "야옹!"
dog = Dog("뽀삐")
print(dog.name) # 출력: 뽀삐
print(dog.speak()) # 출력: 멍멍!
cat = Cat("야옹이")
print(cat.name) # 출력: 야옹이
print(cat.speak()) # 출력: 야옹!
위 예시에서 Animal
클래스는 동물을 나타내는 범용 클래스입니다. Dog
클래스와 Cat
클래스는 Animal
클래스를 상속받고, speak
메서드를 오버라이딩하여 각각 "멍멍!"과 "야옹!"을 반환하도록 구현하였습니다. dog
인스턴스와 cat
인스턴스를 생성하고, 각각의 속성과 speak
메서드를 호출하면 예상된 결과가 출력됩니다.
다형성
클래스의 다형성을 통해 동일한 인터페이스를 가진 다양한 클래스 객체를 사용할 수 있습니다. 이는 코드의 유연성을 높이고, 객체의 타입과 관계없이 동일한 작업을 수행할 수 있습니다.
class Shape:
def get_area(self):
raise NotImplementedError
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def get_area(self):
return 3.14 * (self.radius ** 2)
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def get_area(self):
return self.width * self.height
shapes = [Circle(5), Rectangle(2, 3)]
for shape in shapes:
print(shape.get_area())
위 예시에서 Shape
클래스는 도형을 나타내는 범용 클래스입니다. Circle
클래스와 Rectangle
클래스는 Shape
클래스를 상속받고, 각자의 get_area
메서드를 오버라이딩하여 해당 도형의 면적을 반환하도록 구현했습니다. shapes
는 Circle
과 Rectangle
인스턴스들로 이루어진 리스트입니다. shapes
의 각 요소에 대해 반복문을 실행하여 get_area
메서드를 호출하면, 각 도형의 면적이 출력됩니다.
모듈 구성
클래스는 모듈을 구성하는 요소로 사용될 수 있습니다. 모듈은 관련된 변수, 함수, 클래스를 함께 묶은 것으로, 코드를 구조화하고 재사용성을 높이는데 유용합니다. 여러 개의 클래스를 하나의 모듈에 포함시켜 관련 기능들을 쉽게 접근할 수 있습니다.
# shapes.py
class Shape:
def get_area(self):
raise NotImplementedError
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def get_area(self):
return 3.14 * (self.radius ** 2)
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def get_area(self):
return self.width * self.height
위 예시에서 shapes.py
는 도형 관련 클래스를 정의한 모듈입니다. 이 모듈을 다른 파이썬 파일에서 import
키워드를 사용하여 가져와 사용할 수 있습니다. 예를 들어, main.py
라는 파일에서 shapes.py
모듈을 가져와 사용할 수 있습니다.
# main.py
from shapes import Circle, Rectangle
circle = Circle(5)
print(circle.get_area())
rectangle = Rectangle(2, 3)
print(rectangle.get_area())
위의 main.py
예시에서 shapes
모듈에서 Circle
과 Rectangle
클래스를 가져와 사용하고 있습니다. circle
인스턴스와 rectangle
인스턴스를 생성하고, 각각의 get_area
메서드를 호출하여 도형의 면적을 출력합니다.