[Python] 클래스(Class) 만들기

cdwde·2021년 5월 21일
0

❗ 클래스 vs 객체 vs 인스턴스

클래스

  • 객체를 만들어 내기 위한 설계도
  • 연관되어 있는 변수와 메소드의 집합

객체

  • 소프트웨어 세계에 구현할 대상
  • 클래스의 인스턴스
  • 모든 인스턴스를 대표하는 포괄적인 의미를 가짐

인스턴스

  • 설계도를 바탕으로 소프트웨어 세게에 구현된 구체적인 실체
  • 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부름
  • 특정 객체가 어떤 클래스의 객체인지 관계 위주로 설명할 때 사용
class ClassTest:
    pass
    
a = ClassTest()		# a는 객체, a 객체는 ClassTest의 인스턴스

🎈 클래스 만들기

클래스 생성

  • class 키워드 사용해서 새로운 클래스 작성
  • 클래스의 네이밍컨벤션: CamelCase
class ClassTest:
    pass

c = ClassTest()
print(type(c))

#출력 결과
#<class '__main__.ClassTest'>

메소드 작성

  • 메소드의 첫번째 매개변수는 반드시 self
  • 매개변수 self에는 메소드를 호출한 객체가 자동으로 전달
class ClassTest:
    def method(self, first, second):
        self.first = first
        self.second = second

c = ClassTest()
c.method(1, 2)

print(c.first)
print(c.second)

#출력 결과
#1
#2

c.method(1, 2) 실행 시
method 메소드의 매개변수 first, second에는 각각 1, 2가 전달
self는 전달된 객체 c이므로 c.first = 1, c.second = 2로 해석
👉 c 객체에 객체변수 first가 생성되고 1 저장
👉 c 객체에 객체변수 second가 생성되고 2 저장

클래스 변수 선언

  • 클래스이름.클래스변수로 사용 가능
  • 클래스로 만든 모든 객체에 공유
class ClassTest:
    var = 1		#클래스 변수
    def method(self, first, second):
        self.first = first
        self.second = second

c1 = ClassTest()
c2 = ClassTest()

print(ClassTest.var)

#id값이 모두 같으므로 모두 같은 메모리를 가리키고 있다
print(id(ClassTest.var))
print(id(c1.var))
print(id(c2.var))

#출력 결과
#1
#1556674480
#1556674480
#1556674480

생성자 (Constructor)

  • __init__ 메소드
  • 객체가 생성되는 시점에 자동으로 호출
class ClassTest:
    def __init__(self, first, second):
        self.first = first
        self.second = second
    def add(self):
        result = self.first + self.second
        return result

c = ClassTest(1, 2)
print(c.add())

#출력 결과
#3

참고
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
https://wikidocs.net/28
https://dojang.io/mod/page/view.php?id=2372
https://nirsa.tistory.com/110

0개의 댓글