[python](2)클래스의 구현 - 메서드 구현, 매개변수, self, 인스턴스 변수, 클래스 변수

Jihwan Jung·2022년 7월 10일
1

🎺파이썬

목록 보기
3/5
post-thumbnail

🔔오늘 배울 내용


클래스의 필요성과 클래스로부터 객체를 만드는 방법을 배웠다면 실제로 클래스를 구현해봅시다.
클래스 구현
메서드 메서드 구현
매개변수 self
인스턴스 변수 클래스변수
사칙연산 계산기

🔎메서드 구현


def 함수 이름(매개변수) :
	수행할 문장
    ...

메서드란, 클래스 안에 구현된 함수를 말합니다. 메서드를 구현한다는 것은 클래스 안에 기능들을 채워넣는 것을 말합니다. 클래스에 포함되어 있다는 점만 제외하면 일반 함수와 다를 것이 없습니다.

🔎사칙연산 계산기


사칙연산 계산기 내부에 어떠한 기능들이 필요할지 생각해봅시다.
🔘두 숫자 입력받기 ➡ twonum 메서드
🔘덧셈 ➡ plus 메서드
🔘뺄셈 ➡ minus 메서드
🔘나눗셈 ➡ mply 메서드
🔘곱셈 ➡ dvid 메서드

클래스 내부에 총 다섯개의 메서드 구현이 필요할 것 같습니다. 하나씩 만들어볼까요?

🔘twonum 메서드 (self 변수, 인스턴스/클래스 변수)


class Calculator: #클래스 구현
	def twonum(self, one, two) #메서드의 매개변수
    	self.one = one #매서드의 수행문
        self.two = two #매서드의 수행문

메서드의 매개변수로 self, one, two를 받는 것을 확인할 수 있습니다. one과 two는 두 숫자를 입력받는데 사용하는 변수라면 self변수는 어떤 용도일까요?

cal1 = Calculator() #인스턴스 생성
cal1.twonum(1, 2) #twonum 메서드 호출

상단의 소스코드는 Calculator클래스로부터 인스턴스 cal1을 만들고, twonum메서드를 통해 두 숫자를 입력받는 과정을 나타낸 것입니다. 이상한 점을 발견했나요? cal1 객체의 twonum 메서드를 사용할때 매개변수 두개만 사용한다는 것입니다. 아마 1은 one에, 2는 two에 전달되는 것 같습니다. twonum 메서드의 매개변수 self에는 무엇이 전달될까요? twonum의 첫번째 매개변수 self에는 twonum메서드를 호출한 객체 cal1이 자동으로 전달됩니다.

self로 전달된 인스턴스 cal1, one과 two로 전달된 1, 2는 어떻게 될까요?
메서드의 수행문을 따라가보면, 다음과 같이 해석됨을 알 수 있습니다.

cal1.one = 1
cal1.two = 2

즉, cal1.one = 1 문장이 수행됨과 동시에 cal1 객체에 인스턴스 변수 one이 생성되고, 값 4가 저장되는 것을 알 수 있습니다. 마찬가지로 cal1.two가 수행되면 cal1 객체에 인스턴스 변수 two가 생성됩니다.

인스턴스 변수 : self가 붙어 있는 변수. 클래스의 인스턴스가 생성될 때 생성. 서로 다른 객체끼리 공유하면 안되며, 인스턴스 간 고유한 값.

인스턴스 변수에 정의에서 서로 다른 객체끼리 공유하면 안 된다는 말이 무슨 뜻일까요? 객체의 주소를 돌려주는 파이썬 내장함수 id를 이용하여 이해해봅시다.

cal1 = Calculation()
cal2 = Calculation()
cal1.twonum(1, 2)
cal2.twonum(10, 20)

print(id(cal1.one), id(cal2.one))
>>> 2639860662512 2639860662800

Calculation 클래스로 만든 두 인스턴스 cal1과 cal2에서 같은 이름(one)의 인스턴스 변수를 출력해보았습니다. id함수를 통해 해당 변수들의 주소를 출력해 본 결과 서로 다릅니다. 즉, 인스턴스 변수는 서로 다른 객체끼리 공유할 수 없다는 뜻입니다.

물론, 인스턴스끼리 공유하여 쓸 수 있는 변수인 클래스변수도 있습니다.

클래스 변수 : 클래스 내부에 선언되어 인스턴스끼리 공유하여 쓸 수 있는 변수. 모든 인스턴스에 공유됨.

🔘plus 메서드


실제 덧셈 계산을 할때 사용되는 plus 메서드를 구현해봅시다.

class Calculator: #클래스 구현
	def twonum(self, one, two) #메서드의 매개변수 self, one, two
    	self.one = one #매서드의 수행문
        self.two = two #매서드의 수행문
        
    def plus(self): #메서드의 매개변수 self
    	result = self.one + self.two
        return result

해당 메서드는 단순히 덧셈 결과를 가지고 있는 메서드입니다. 해당 메서드를 호출해볼까요?

cal1 = Calculator() #인스턴스 생성
cal1.twonum(1, 2) #twonum 메서드 호출

print(cal1.plus())
>>> 3

twonum메서드의 매개변수에서도 설명했던 것 처럼, plus메서드를 사용할때도 해당 메서드를 호출한 객체 cal1이 plus메서드의 매개변수로 들어갑니다. plus메서드를 실행하면, result에 cal1.one과 cal1.two가 덧셈으로 계산된 값인 3이 저장되는 것입니다.

🔘minus 메서드


class Calculator: #클래스 구현
	def twonum(self, one, two) #메서드의 매개변수 self, one, two
    	self.one = one #매서드의 수행문
        self.two = two #매서드의 수행문
        
    def plus(self): #메서드의 매개변수 self
    	result = self.one + self.two
        return result
        
    def minus(self): #메서드의 매개변수 self
 		result = self.one - self.two
        return result

🔘mply 메서드


class Calculator: #클래스 구현
	def twonum(self, one, two) #메서드의 매개변수 self, one, two
    	self.one = one #매서드의 수행문
        self.two = two #매서드의 수행문
        
    def plus(self): #메서드의 매개변수 self
    	result = self.one + self.two
        return result
        
    def minus(self): #메서드의 매개변수 self
 		result = self.one - self.two
        return result
        
    def mply(self): #메서드의 매개변수 self
 		result = self.one * self.two
        return result

🔘dvid 메서드


class Calculator: #클래스 구현
	def twonum(self, one, two) #메서드의 매개변수 self, one, two
    	self.one = one #매서드의 수행문
        self.two = two #매서드의 수행문
        
    def plus(self): #메서드의 매개변수 self
    	result = self.one + self.two
        return result
        
    def minus(self): #메서드의 매개변수 self
 		result = self.one - self.two
        return result
        
    def mply(self): #메서드의 매개변수 self
 		result = self.one * self.two
        return result
        
    def dvid(self): #메서드의 매개변수 self
 		result = self.one / self.two
        return result
profile
22.10月~24.07月 공군 암호병 복무중/ 사회 과학과 딥 러닝에 관심이 있는 학부생(CS&E)입니다. 기술과 사회에 대한 이해를 바탕으로, 비즈니스 감각과 기술적 역량을 함께 갖춘 인공지능 프로그래머•데이터 과학자로 성장하고 싶습니다.

0개의 댓글