We are Architect

17. 점프 투 파이썬 (클래스) 본문

Programing/Python

17. 점프 투 파이썬 (클래스)

the best infra 2024. 11. 13. 14:24

 

* 클래스

- 어떠한 객체의 틀이 바로 클래스이다.

- 클래스와 객체의 차이는 마치 쿠키틀과 쿠키 그 자체의 차이이다. 

- 즉 클래스는 어떤 객체를 찍어내는 틀과 같은 역할을 하고 그 결과로 나오는 것이 그 자체인 객체이다. 

- 클래스는 무수히 많은 객체를 찍어낼 수 있다. 

// 클래스
class Cookie:
	pass
    
// 객체
a = Cookie()
b = Cookie()

 

 

* 계산기 클래스 만드는 법

- 객체가 어떤 역할을 할 것이고 어떻게 동작할지 구상한 후 만들어 나가야 한다. 

- 우선 +, -, /, * 의 기능을 클래스 안에 넣어야 한다는 것을 생각해야 한다.

- 코드로 작성해야 할 것은 클래스 구조를 먼저 넣어야 한다. 

class FourCal:
	pass

 

 

- 다음은 객체에 연산할 숫자를 지정해야 한다. 어떤 값을 가져오고 지정할 건지 setdata 함수를 만들어준다. 

- 그리고 함수는 다른 말로 매써드라고 부르기도 한다.

- 여기서 self 변수를 사용하는 이유는 호출한 객체가 self로 들어가고 그다음에 입력된 값들이 first와 second 값에 들어가게 되는 것이다. 

class FourCal:
	def setdata(self, first, second):
    	self.first = first
        self.second = second

 

 

- 이제 객체를 만들어서 클래스와 매서드가 잘 작동하는지 확인해 준다.

class FourCal:
	def setdata(self, first, second):
    	self.first = first
        self.second = second
 
a = FourCal()
b = FourCal()

 

 

- 각각의 연산자 기능을 추가해 준다. 

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
 
a = FourCal()
b = FourCal()

a.setdata(4,2)
b.setdata(3,8)

 

- 코드를 작성 중에 VS code에서 이러한 탭과 공백을 번갈아서 사용할 때 대한 오류가 발생하였다. 

- 해당 코드는 공백과 탭을 섞어서 사용하여 생기는 오류이다. 

- 그러므로 탭을 사용하여 코드를 작성하도록 하자.

 

 

- 그다음 생성자를 생성한다. 

- 생성자는 객체가 생성될 때 자동으로 호출되는 메서드이다.

- __init__을 사용하면 해당 매서드는 생성자가 된다. 


class FourCal:
	# 생성자 __init__을 사용
    def __init__(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

# setdata에 있는 매개변수를 해당 함수에 넣음.
a = FourCal(4,2)
b = FourCal(3,8)

# 이제는 setdata 대신 FoulCal에 매개변수를 집어넣어야한다.
# a.setdata(4,2)
# b.setdata(3,8)

# 연산이 잘되는지 확인
a.add()
a.div()

print(a.add())
print(b.add())

 

 

* 클래스의 상속

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


class FourCal:
    def __init__(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

# 기존 클래스를 상속받는 클래스
class MoreFourCal(FourCal):
    def pow(self):
        result = self.first ** self.second
        return result

# 객체 만들때 적용
a = MoreFourCal(4,2)
b = FourCal(3,8)

print(a.add())
print(b.add())

# 결과값 확인
print(a.pow())

 

 

* 매서드 오버라이딩

- 부모클래스에서 상속받은 메서드를 오버라이딩, 즉 다시 덮어서 씌어서 메서드를 적용시키는 것이 메서드 오버라이딩이다.

 

 

* 클래스 변수

- 객체변수는 다른 객체들의 영향을 받지 않지만 클래스변수는 매서드 안에 변수를 선언하는 것이다.

- 사용하려면 클래스이름.클래스변수 로 사용이 가능하다.

- 변수 값을 바꾸면 객체에 값도 바뀐다. 즉 모든 객체에 공유가 된다. 

class me:
	lastname = "이"

>>> me.lastname