소개
본 랩에서는 Python 의 객체 지향 프로그래밍 (OOP) 의 기본 개념을 학습합니다. 객체를 생성하기 위한 청사진 역할을 하는 클래스를 정의하는 방법과 클래스와 객체 간의 관계를 이해하는 방법을 탐구할 것입니다.
정의한 클래스의 인스턴스를 생성하고 사용함으로써 실질적인 경험을 얻게 될 것입니다. 이 랩에서는 __init__ 메서드를 사용하여 객체를 초기화하여 초기 상태를 설정하고, 더 나은 디버깅과 가독성을 위해 __repr__ 메서드를 사용하여 객체의 문자열 표현을 사용자 정의하는 과정을 안내합니다.
클래스 정의 및 인스턴스 생성
이 단계에서는 기본 클래스를 정의하고 해당 클래스로부터 객체, 즉 인스턴스를 생성하는 방법을 배웁니다.
객체 지향 프로그래밍에서 **클래스 (class)**는 객체를 생성하기 위한 청사진입니다. 클래스는 생성될 객체가 가질 속성 (데이터) 과 메서드 (함수) 의 집합을 정의합니다. **객체 (object)**는 클래스의 인스턴스로, 클래스 청사진을 기반으로 구축된 구체적인 개체입니다.
간단한 Dog 클래스를 생성하는 것부터 시작하겠습니다.
먼저, WebIDE 왼쪽의 파일 탐색기에서 dog.py 파일을 엽니다. 이 파일은 현재 비어 있습니다.
이제 dog.py에 다음 코드를 추가하여 Dog 클래스를 정의하고, 인스턴스를 생성하고, 이를 사용해 보겠습니다.
## Define a simple Dog class
class Dog:
## Class attribute
species = "Canis familiaris"
## Method
def bark(self):
print("Woof!")
## Create an instance (object) of the Dog class
my_dog = Dog()
## Access the class attribute using the instance
print(f"The species is: {my_dog.species}")
## Call the instance's method
print("The dog says:")
my_dog.bark()
코드를 분석해 보겠습니다.
class Dog:: 이 줄은Dog라는 새 클래스를 정의합니다.species = "Canis familiaris": 이것은 **클래스 속성 (class attribute)**입니다. 이 값은Dog클래스의 모든 인스턴스 간에 공유됩니다.def bark(self):: 이것은 클래스 내의 함수인 **메서드 (method)**를 정의합니다.self매개변수는 클래스의 현재 인스턴스에 대한 참조이며, 클래스에 속한 변수에 접근하는 데 사용됩니다.my_dog = Dog(): 이 줄은Dog클래스의 새 인스턴스를 생성하고 이를my_dog변수에 할당합니다.my_dog.species: 점 표기법 (dot notation) 을 사용하여my_dog객체의species속성에 접근합니다.my_dog.bark():my_dog객체에서bark메서드를 호출합니다. Python 은my_dog객체를self인수로 메서드에 자동으로 전달합니다.
파일을 저장합니다. 스크립트를 실행하려면 WebIDE 에서 터미널을 열고 다음 명령을 실행하십시오.
python dog.py
객체가 올바르게 생성되었고 속성과 메서드에 성공적으로 접근했음을 확인하는 다음 출력을 볼 수 있습니다.
The species is: Canis familiaris
The dog says:
Woof!
__init__ 메서드로 객체 초기화하기
클래스 속성 (class attribute) 은 모든 인스턴스가 공유하지만, 종종 각 인스턴스가 고유한 데이터를 갖도록 하고 싶을 때가 있습니다. __init__ 메서드는 Python 클래스에서 생성자 (constructor) 역할을 하는 특별한 메서드입니다. 새 인스턴스를 생성할 때 자동으로 호출되어 고유한 속성을 초기화할 수 있게 해줍니다.
각 강아지에게 고유한 이름과 품종을 부여하도록 Dog 클래스를 수정해 보겠습니다.
dog.py 파일을 다시 열고 내용을 다음 코드로 교체하십시오.
## Define a Dog class with an __init__ method
class Dog:
## Class attribute
species = "Canis familiaris"
## The __init__ method (constructor)
def __init__(self, name, breed):
## Instance attributes
self.name = name
self.breed = breed
## Method
def bark(self):
print("Woof!")
## Create instances with unique attributes
dog1 = Dog("Buddy", "Golden Retriever")
dog2 = Dog("Lucy", "Labrador")
## Access the instance attributes
print(f"{dog1.name} is a {dog1.breed}.")
print(f"{dog2.name} is a {dog2.breed}.")
## The class attribute is still shared
print(f"Both are of the species: {dog1.species}")
변경된 내용은 다음과 같습니다.
def __init__(self, name, breed)::__init__메서드를 정의했습니다. 이 메서드는self,name,breed를 인수로 받습니다.self.name = name및self.breed = breed: 이 줄들은 **인스턴스 속성 (instance attributes)**을 생성합니다. 이 속성들은 각Dog객체마다 고유합니다.self키워드는 이러한 속성을 생성 중인 특정 인스턴스에 연결합니다.dog1 = Dog("Buddy", "Golden Retriever"): 인스턴스를 생성할 때 이제name과breed에 대한 인수를 전달합니다. 이 인수들은 자동으로__init__메서드로 전달됩니다.
파일을 저장하고 터미널에서 실행하십시오.
python dog.py
출력 결과를 보면 각 강아지 객체는 고유한 이름과 품종을 가지지만, 클래스 속성인 species는 여전히 공유하고 있음을 알 수 있습니다.
Buddy is a Golden Retriever.
Lucy is a Labrador.
Both are of the species: Canis familiaris
__repr__ 로 객체 표현 사용자 정의하기
객체를 직접 출력하려고 할 때, Python 은 객체의 클래스와 메모리 주소를 포함하는 기본 표현 방식을 보여주는데, 이는 그다지 유용하지 않습니다. __repr__ 특별 메서드를 정의함으로써 더 설명적이고 개발자 친화적인 문자열 표현을 제공할 수 있습니다.
Dog 클래스에 __repr__ 메서드를 추가해 보겠습니다.
dog.py를 열고 내용을 최종 버전의 코드로 교체하십시오.
## Define a Dog class with __init__ and __repr__ methods
class Dog:
## Class attribute
species = "Canis familiaris"
## The __init__ method (constructor)
def __init__(self, name, breed):
self.name = name
self.breed = breed
## The __repr__ method for a developer-friendly representation
def __repr__(self):
return f"Dog(name='{self.name}', breed='{self.breed}')"
## Method
def bark(self):
print("Woof!")
## Create an instance
my_dog = Dog("Buddy", "Golden Retriever")
## Print the object directly
print(my_dog)
주요 추가 사항은 다음과 같습니다.
def __repr__(self):: 이것은 표현 메서드를 정의합니다.return f"Dog(name='{self.name}', breed='{self.breed}')": 이 메서드는 문자열을 반환해야 합니다. 좋은 관행은 객체를 동일한 상태로 다시 생성하는 데 사용될 수 있는 유효한 Python 표현식처럼 보이도록 문자열을 만드는 것입니다.
파일을 저장하고 스크립트를 마지막으로 한 번 더 실행하십시오.
python dog.py
메모리 주소 대신, 출력은 이제 __repr__ 메서드가 반환하는 명확하고 유익한 문자열이 됩니다. 이는 디버깅에 매우 유용합니다.
Dog(name='Buddy', breed='Golden Retriever')
요약
본 랩 (lab) 에서는 Python 의 객체 지향 프로그래밍 (Object-Oriented Programming, OOP) 의 기본 사항을 배웠습니다. 간단한 클래스를 정의하고 인스턴스를 생성하는 것부터 시작하여 클래스 속성 (class attribute) 과 메서드 (method) 를 사용하는 방법을 학습했습니다. 이어서 __init__ 메서드를 추가하여 각 객체를 고유한 인스턴스 속성으로 초기화함으로써 클래스를 개선했습니다. 마지막으로, __repr__ 메서드를 구현하여 객체의 문자열 표현 방식을 사용자 정의했으며, 이는 코드의 명확성과 디버깅 용이성을 크게 향상시킵니다. 이러한 개념들은 Python 에서 더 복잡하고 체계적인 애플리케이션을 구축하기 위한 기초가 됩니다.



