파이썬 클래스와 객체
클래스
class MyClass:
# 코드 구현
x = 5
객체 지향 프로그래밍 언어에서 가장 핵심적인 단어는 클래스입니다. 클래스의 생성은 위에 코드와 같습니다.
클래스는 객체를 생성하기 위한 설계도입니다.
기본 개념
- 클래스: 객체를 정의하는 설계도입니다. 객체의 속성과 메드를 정의합니다.
- 객체: 클래스를 기반으로 생성된 인스턴스(instance)입니다. 하나의 클래스에서 여러 객체를 생성할 수 있습니다.
- 속성(attribute): 클래스 내에서 정의된 변수로, 객체의 상태나 데이터를 나타냅니다.
- 메소드(method): 클래스 내에서 정의된 함수로, 객체의 동작을 정의합니다.
객체 생성
p1 = MyClass()
print(p1.x)
p2 = MyClass()
print(p2.x)
클래스를 생성한 것은 설계도를 그린것이라고 할 수 있습니다.
설계도를 만들었다하여 실체가 있는것은 아니라 클래스를 기반으로 객체를 제작하는 작업을 해야합니다. 설계도만 있으면 물건을 여러 개 만들 수 있던 것처럼 클래스만 있으면 객체 또한 여러 개 생성이 가능합니다.
__init__() 함수
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("John", 36)
print(p1.name)
print(p1.age)
모든 클래스에는 __init__()라는 함수가 있는데, 이 함수는 클래스가 초기화될 때 항상 실행됩니다.
__init__() 함수를 사용하여 객체 속성에 값을 할당하거나 객체를 생성할 때 필요한 다른 작업을 수행합니다.
Java에서는 생성자와 유사한 개념입니다.
__str__() 함수
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("John", 36)
print(p1)
위에 코드를 실행해보면 p1은 이상한 글자로 출력됩니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}({self.age})"
p1 = Person("John", 36)
print(p1)
파이썬에서 __str__() 메소드는 객체의 "문자열 표현"을 정의하는 특별 메소드입니다.
즉 Java에서 사용되는 toString()과 비슷한 함수입니다.
객체 메소드
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def myfunc(self):
print("Hello my name is " + self.name)
p1 = Person("John", 36)
p1.myfunc()
클래스 내에는 함수를 선언할 수 있고 이 함수를 객체를 통해서 호출이 가능합니다.
객체 삭제
del p1
함수와 마찬가지로 객체는 del 키워드를 사용해서 삭제가 가능합니다.
class pass
class Person:
pass
클래스 또한 함수와 마찬가지로 pass를 사용할 수 있습니다. 개발과정에서 클래스들을 선언하고 아직 미완성인 클래스에 사용하는 등의 빈 클래스가 필요할 때 pass를 사용합니다.
객체 변수와 클래스 변수
객체 변수
class Persion:
name = ""
age = 0
p1 = Persion()
p2 = Persion()
객체 변수는 객체를 생성해야 사용할 수 있는 변수입니다.
객체 생성 시 객체 안에 공간이 생성되는 변수입니다. 즉 p1에서의 name, age는 p2에서의 name, age 와 별도의 공간입니다.
클래스 변수
class Persion:
name = ""
age = 0
country = ""
def __init__(self):
Person.country = "Korea"
p1 = Persion()
p2 = Persion()
클래스 변수는 클래스 안에 공간이 할당된 변수입니다. 그래서 클래스 변수는 인스턴스에 별도의 공간을 할당하지 않고 여러 인스턴스가 클래스 변수의 공간을 함께 사용합니다.
출처
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com