[Python] 클래스

Jungmin Seo·2021년 5월 25일
0

1. 개념

🌭 똑같은 일(과자 틀)을 하는, 2개 이상의 독립적인 객체(과자)를 만들기 위해 사용

  • 클래스(class): 똑같은 일을 하는 무언가를 계속해서 만들어 낼 수 있는 설계 도면 (과자 틀)
  • 객체(object): 클래스로 만든 피조물 (과자 틀로 만든 과자)
>>> class Cookie:    # Cookie가 클래스
>>> 	pass


>>> a = Cookie()    # a, b가 객체
>>> b = Cookie()

🍔 객체와 인스턴스의 차이

a = Cookie()

  • a는 객체
  • a 객체는 Cookie의 인스턴스 (관계 위주의 설명)
    ** 'a는 Cookie의 객체' 보다는 'a는 Cookie의 인스턴스'라는 표현이 잘 어울림.

2. 클래스 만들기 (사칙연산 클래스)

2-1 먼저 구상하기

아래와 같이 동작하는 FourCal 클래스 만드는 것이 목표!

a = FourCal()    # a라는 객체 생성
a.setdata(4, 2)    # 숫자 4와 2를 a에 지정
a.add()    # 두 수를 합한 결과 반환
a.mul()    # 두 수를 곱한 결과 반환
a.sub()    #  두 수를 뺀 결과 반환
a.div()    # 두 수를 나눈 결과 반환

2-2 클래스 구조 만들기

>>> class FourCal:
	pass    # pass는 아무것도 수행하지 않는 문법으로, 임시로 코드 작성 시 사용
    
>>> a = FourCal()    # a 객체 생성

2-3 기능 만들기

🌭 a. setdata(4, 2)

>>> class FourCal:
...     def setdata(self, first, second):    # 메서드의 매개변수
...         self.first = first    # 메서드의 수행문
...         self.second = second    # 메서드의 수행문

메서드(method): 클래스 안에 구현된 함수 (ex. setdata)


- 메서드의 매개변수

파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용
self 말고 다른 이름을 사용해도 상관 없지만, 항상 객체 자신을 자동 호출

def setdata(self, first, second):
    self.first = first
    self.second = second
    
a.setdata(4, 2)


>>> self -> a, first -> 4, second -> 2

🥨 클래스를 통한 메서드 호출 방법

>> a = FourCal()
>> FourCal.setdata(a, 4, 2)

- 메서드의 수행문

def setdata(self, first, second):
    self.first = first
    self.second = second
    
a.setdata(4, 2)

>>> print(a.first)
4
>>> print(a.second)
2

🥨 객체변수: 객체에 생성되는 객체만의 변수

a.first = 4
a.second = 2

a 객체객체변수 first 생성되고 값 4 저장


- 값 저장, 더하기, 곱하기, 빼기, 나누기 기능 만들기

>>> class FourCal:
       def setdata(self, first, second):
            self.first = first
            self.second = second
       def add(self):
            result = self.first + self.second
            return result
       def mul(self):
            result = self.first * self.second
            return result
       def sub(self):
            result = self.first - self.second
            return result
       def div(self):
            result = self.first / self.second
            return result

3. 생성자 (Constructor)

>>> a = FourCal()
>>> a.add()


#  오류 발생 (setdata를 수행하지 않아서 객체 a의 객체변수가 생성되지 않았기 때문)

🥨 객체에 초깃값 설정이 필요할 때, setdata 같은 메서드를 직접 호출하여 초깃값을 설정하는 것보다 생성자를 구현하는 것이 안전

>>> class FourCal:
       def __init__(self, first, second):    # setdata 대신 __init__으로 이름 설정
            self.first = first
            self.second = second
       def add(self):
            result = self.first + self.second
            return result
       def mul(self):
            result = self.first * self.second
            return result
       def sub(self):
            result = self.first - self.second
            return result
       def div(self):
            result = self.first / self.second
            return result

>>> a = FourCal()
# 오류발생! 매개변수 first, second에 해당하는 값이 전달되지 않았기 때문

>>> a = FourCal(4, 2)
>>> a.add()
6

4. 클래스의 상속

🌭 어떤 클래스를 만들 때, 다른 클래스의 기능을 물려받을 수 있게 만드는 것

>>> class MoreFourCal(FourCal):    # FourCal 클래스를 상속하는 MoreFourCal 생성
	pass

🥨 왜 상속을 해야 하는가

기존 클래스를 변경하지 않고, 기능을 추가하거나 기존 기능을 변경하고자 할때 사용

# Fourcal의 모든 기능을 상속받고, pow 메서드 추가
>>> class MoreFourCal(FourCal):
	def pow(self):
	    result = self.first ** self.second
	    return result

5. 메서드 오버라이딩

🌭 부모 클래스에 있는 메서드를 동일한 이름으로 다시 만드는 것
-> 부모클래스의 메서드 대신 오버라이딩한 메서드가 호출됨

>>> class SafeFourCal(FourCal):
	def div(self):
	    if self.second == 0:  # 나누는 값이 0인 경우 0을 리턴하도록 수정
		return 0
	    else:
		return self.first / self.second
        
# FourCal 클래스의 div 메서드가 아닌, SafeFourCal의 div 메서드가 호출됨

6. 클래스 변수

🌭 클래스 안에 변수를 선언하여 생성

>>> class Family:
	lastname = "김"
    
>>>print(Family.lastname)

** 클래스 변수는 모든 객체에 공유됨 (모든 객체의 동일한 클래스 변수는 동일한 id를 가짐)



아래 내용을 바탕으로 정리한 것이다.

점프투파이썬 (https://wikidocs.net/28)

profile
Hello World!

0개의 댓글