Today I Learned/Python & Pandas

python class 기초 개념 정리 & 실습1 (점프투파이썬 따라가기)

하나719 2023. 7. 12. 15:22
반응형

https://wikidocs.net/28

 

05-1 클래스

초보 개발자들에게 클래스(class)는 넘기 힘든 장벽과도 같은 존재이다. 독자들 중에도 클래스라는 단어를 처음 접하는 이들이 있을 것이다. 그러면 도대체 클래스가 무엇인지, 클…

wikidocs.net

 

클래스 개념부터 실습까지 한번 정리해보았습니다. 

기초탄탄!!

 

클래스와 객체 (class, object)

클래스는 붕어빵틀, 과자틀, 눈오리만들기 틀 등으로 다양하게 설명된다.

그러면 똑같은걸 찍어내는 도구인가? 라고 생각할 수 있는데, 붕어빵으로 예를 들어보면 안에 들어가는 내용물에 따라 다른 붕어빵이 될 수 있다! 초코붕어빵, 슈크림붕어빵, 팥붕어빵 등등.. 

클래스는 꼭 가져야하는 특징을 정의해놓은 틀이고, 객체는 그 틀 안에서 독자적으로 생겨난 것이라고 할 수 있다.

하나만 더 구체적으로 예를들어보면, 얼굴을 클래스라고 했을때 얼굴 클래스는 눈, 코, 입 , 머리카락 이렇게 정의 될 수 있다.

그리고 김태희라는 객체를 이 얼굴클래스로 만든다고 했을 때 눈은 쌍커풀이 있고 코는 오똑하고 입술은 도톰하고 머리카락은 검정색이야 라고 정의해서 만들 수 있다. 또 이 얼굴클래스로 완전 다른 객체를 만들어낼수도 있다.

 

기본 클래스 실습 (생성자)

class Calc:
	def setdata(self, f, s):
    	self.f = f
        self.s = s
      
    def add(self):
    	return self.f + self.s
        
        
#객체만들기
a = Calc()
#객체에 값 넣어주기
a.setdata(1,2)
#객체의 함수 사용하기 
print(a.add())

아주 기본적인 더하기 기능을 제공하는 계산기 클래스를 만들어보았다.

클래스에 정의된 setdata() 함수에 더하고 싶은 인자를 다르게해서 다른 계산기 객체를 만들어줄 수 있다.

그런데 ! 여기서 a.setdata(1,2) 로 인자를 주지 않고, a.add() 함수를 실행한다면 오류가 발생한다.

self.f , self.s 값이 설정되지 않았는데 이 값을 사용해서 연산을 시켰기때문이다. 

이런 오류를 방지하기 위해서 클래스는 생성되면서 꼭 필요한 초기값을 세팅하도록 만들수 있다.

이걸 생성자라고하고 클래스 내에서 def __init__(self, 인자1, 인자2): 로 정의할 수 있다. 

그래서 위의 코드를 아래처럼 수정하고 클래스 정의가 조금 달라졌다. 

class Calc:
	def __init__(self, f, s):
    	self.f = f
        self.s = s
      
    def add(self):
    	return self.f + self.s
        
        
#객체만들기 -> 이 단계에서 인자를 전달해서 초기화
a = Calc(1,2)
#객체에 값 넣어주기 -> 이 단계 삭제
# a.setdata(1,2)

#객체의 함수 사용하기 
print(a.add())

상속

이렇게 만들어놓은 클래스를 복사해서 조금만 수정하거나 기능을 추가해서 편하게 재사용 할 수 있다. 

원래 클래스를 수정하면 될때도 있지만, 누군가 패키지로 올려놓은걸 수정해서 써야하거나 다른 동료가 만들어놓은 코드를 원본은 놔두고 조금 수정해서사용해야하거나 할때 등 필요하다.

class MulCal(Cal):

상속 받을 클래스를 () 안에 넣어서 간단하게 클래스를 구현할 수 있다. 

class MulCal(Cal):
	def pow(self):
    	return self.f ** self.s 
        
b = MulCal(3,3)
print(b.add()) # 6
print(b.pow()) # 27

Cal 클래스를 상속받아 MulCal 클래스를 만들었는데, 이 클래스는 Cal이 가진 함수를 모두 사용할 수 있다. 

그래서 MulCal에는 add() 함수가 없음에도 사용이 가능하다.

그리고 새로운 함수를 추가해서 사용하는것도 가능하다.

아까 Cal 함수의 객체인 a는 이 pow() 함수를 사용하는건 불가능하다.

 

메서드 오버라이딩

클래스를 상속받아서 사용할 때 원래 정의되어 있던 함수를 다시 수정해서 사용하는것도 가능하다.

예를들어 지금 add() 함수에는 첫번째 인수와 두번째 인수 더해서 값을 리턴하는데, 만약 첫번째 인자를 두번 더하고 싶다고 해보자.

class MulCal(Cal):
	def add(self):
    	return self.f + self.f + self.s
        
b = MulCal(3,4)
print(b.add()) # 7 -> 10

이렇게 같은 함수명을 수정해서 사용하는것을 메서드 오버라이딩이라고 한다. 

 

반응형