Class

Junho Song·2022년 12월 14일
0

Python

목록 보기
10/11

클래스와 객체

클래스는 어떤 특정의 제품을 반복해서 만들어 낼 수 있는 공장의 기계와 같은 것이라고 생각하면 편할 것 같다.

객체란 클래스라는 기계를 통해 만들어진 하나의 제품과 같다. 공장에서 만들어지는 각각의 제품들을 보면 제품마다 고유의 제품 번호가 있다. 이와 같이 클래스를 통해 만들어진 객체는 각각 고유한 성격을 가진다.

클래스는 아래와 같이 정리될 수 있다.

class machine:
	pass

이 클래스는 안에 아무 기능도 없는 빈 클래스다. 어떠한 변수에 클래스를 부여하면 그 변수를 객체라고 부른다. 위의 클래스는 아무 기능이 없지만 아래와 같이 변수(객체)에 클래스를 부여할 수 있다. 객체는 클래스로 만들어지고 각각의 클래스는 무수한 객체를 생성할 수 있다. 위의 예와 같이 공장의 기계가 무수한 제품을 만들어낼 수 있는 것 처럼.

클래스로 만들어진 객체는 인스턴스라고도 한다.
a = machine() 에서 a는 객체이고 a객체는 machine이라는 클래스의 인스턴스이다. 이러한 상황에서 a만 특정지을때는 a는 객체라고 표현하고 a를 클래스와 연관지어 특정할 때에는 a는 machine의 인스턴스라고 표현할 수 있다.

클래스 만들기

아래부터는 점프 투 파이썬에 나오는 예제를 그대로 한번 따라해본다.

먼저 a = FourCal()를 입력해서 a라는 객체를 만든다.
그런 다음 a.setdata(4, 2)처럼 입력해서 숫자 4와 2를 a에 지정해 주고
a.add()를 수행하면 두 수를 합한 결과(4 + 2)를 리턴하고
a.mul()을 수행하면 두 수를 곱한 결과(4 * 2)를 리턴하고
a.sub()를 수행하면 두 수를 뺀 결과(4 - 2)를 리턴하고
a.div()를 수행하면 두 수를 나눈 결과(4 / 2)를 리턴한다.

위의 조건을 달성하는 클래스를 만들어 본다. 나는 이미 점프 투 파이썬을 보면서 해당 클래스를 한번 진행해봤기 때문에 이번엔 보지않고 한번 작성해보려 한다.

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

위의 FourCal 클래스는 다섯개의 함수를 포함한다:
가장 위의 setdata()함수는 FourCal()이라는 클래스에 특정한 변수(객체)를 지정해주고

a = FourCal()

객체.setdata(숫자,숫자)의 형식으로

a.setdata(3,7)

이렇게 값을 설정해주면 FourCal()클래스로 만들어진 a객체의 first에는 3, second에는 7이 지정된다.

가장 위의 setdata()함수에서 self가 위와 같이 특정객체.setdata(숫자1,숫자2)와 같은 짧은 코드로도 해당 객체에 숫자1과 숫자2를 지정할 수 있도록 해주는 역할을 한다.

위에서는 a.first에 3을 a.second에 7을 지정해줬다.

이제 만약 클래스를 이용하여 특정 함수의 기능을 쓰고싶다면 아래와 같이 불러주면 된다.

a.add() #더하기
a.sub() #빼기
a.mul() #곱하기
a.div() #나누기

생성자 (Constructor)

가장 위의 클래스 함수들을 보면 setdata()함수를 통해 아래와 같이 a라는 객체의 매개변수인 first와 second에 특정 숫자 값을 지정해줬다.

a = FourCal()
a.setdata(3,7)

하지만 위와같이 매개변수를 초기에 지정해줘야 하는 경우에는 메서드를 호출해 초깃값을 설정하는 것 보다 생성자를 구현하는 것이 일반적이다. 생성자는 객체가 생성될때 매개변수를 같이 지정해주면서 더욱 간편하고 자동적으로 매개변수의 값을 지정해주는 메서드이다.

생성자를 지정하는 방법은 setdata와 동일하지만 아래와 같이 __init__ 이라는 함수를 사용한다.

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

위와 같이 setdata()함수에 __init__ 함수를 지정하여 메서드로 만들었다. 해당 메서드는 생성자가 된 것이다. 이로써 객체와 매개변수를 지정해줄때 두줄에 썼던것을 아래와 같이 한줄에, 그리고 좀 더 직관적으로 작성할 수 있다.

a = FourCal(3,7)

클래스 상속

클래스는 상속 또한 가능하다. 아래와 같이 위에서 만든 클래스 FourCal()을 새로운 클래스인 MoreFourCal()안에 지정해주고 새로운 함수를 추가해주면 해당 클래스를 통해서도 FourCal()의 함수 기능들을 모두 사용할 수 있을 뿐만 아니라 추가한 함수까지 포함하여 사용할 수 있게된다.

class MoreFourCal(FourCal):
	def pow(self):
    	result = self.first ** self.second
        return result
	

메서드 오버라이딩

마지막으로 클래스의 함수는 덮어쓰기(overriding)이 가능하다. 만약 기존에 작성했던 클래스의 함수의 기능을 수정하고 싶으면 위의 클래스 상속해서 했던것 처럼 새로운 클래스에 부모 클래스를 넣어주고 부모 클래스에 포함된 함수중 수정하고 싶은 함수의 이름을 똑같이 작성하고 수정하고 싶은 방향으로 프로그래밍을 해주면 된다. 아래와 같은 방식이다.

class EditFourCal(FourCal):
	def add(self):
    	result = self.first + self.second + self.first
        return result

기존의 FourCal 클래스에 있던 add 함수는 self.first와 self.second를 한번씩 더하는 함수였지만 EditFourCal 클래스를 통해 부모 클래스인 FourCal의 add함수를 self.first와 self.second를 더하고 self.first를 한번 더 더하는 방식으로 overriding해주었다.

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

profile
상위 1%의 금융데이터 분석가를 꿈꿉니다.

0개의 댓글