TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 기초>

[파이썬] 파이썬기초: 클래스 - 1

by 기록자_Recordian 2024. 10. 15.
728x90
반응형
클래스(Class) 와 객체(object)

 

  • 클래스: 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면
  • 객체: 클래스로 만든 피조물. 클래스로 만든 객체는 객체 마다 고유한 성격을 가진다.

파이썬 클래스의 예

class Cookie:
	pass

위의 클래스는 아무 기능도 갖고 있지 않은 껍질뿐인 클래스이다.

객체는 클래스로 만들며 1개의 클래스는 무수히 많은 객체를 만들어 낼 수 있다.

 

 클래스의 객체를 만드는 방법의 예

a = Cookie()
b = Cookie()

Cookie()의 결괏값을 돌려받은 a와 b가 바로 객체이다.

 

◆ 객체와 인스턴스의 차이

인스턴스: 클래스로 만든 객체. 특정 객체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용한다.

 a = Cookie()

만약 위와 같은 객체가 있다면, a는 객체이며, a의 객체는 Cookie의 인스턴스이다.

 

즉, 객체(Object)는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스(Class)이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스(Instance)이다. 

 

객체는 우리가 클래스로 구현할 어떤 것. 마우스로 예를 들면 마우스라는 객체는 왼쪽버튼, 오른쪽버튼, 스크롤 휠과 같은 버튼들이 있고 버튼을 클릭하는 메소드, 버튼을 돌리는 메소드 등이 있는데, 이렇게 우리가 구현하고 싶은 어떤 것을 객체라고 한다.

마지막으로 인스턴스는 객체를 실체화 시킨 것이다. 객체란 우리가 클래스로 구현할 어떤 것이기에 어떤 것을 만들면 이런 것들 ( 왼쪽버튼, 오른쪽버튼, 스크롤 휠 )을 가지고 이렇게 동작(클릭 메소드, 휠 메소드 )할거야 라고만 정의한 것이다. 그래서 우리는 객체의 생성자를 통해 인스턴스라는 것으로 실체화 시켜야한다.


사칙 연산 클래스 만들기

 

1) 클래스를 어떻게 만들지 먼저 구상하기

클래스는 무작정 만드는 것보다 클래스로 만든 객체를 중심으로 어떤 식으로 동작하게 할 것인지 미리 구상을 한 후에 생각한 것들을 하나씩 해결하면서 완성해 나가는 것이 좋다.

  • setdata 메서드: 사칙연산을 하기 위한 숫자 입력
  • div 메서드: 나누기 기능
  • add 메서드: 더하기 기능
  • sub 메서드: 빼기 기능
  • mul 메서드: 곱하기 기능

2) 클래스 구조 만들기

- 객체 만들기

# 사칙 연산 클래스 만들기
class FourCal:
    pass

▶ 대화형 인터프리터에서 pass란 문장을 포함한 FourCal 클래스를 만든다.

현재의 FourCal 클래스는 아무 변수나 함수도 포함하지 않지만 우리가 원하는 객체를 만들 수 있는 기능은 가지고 있다.

a = FourCal()
type(a)

a 객체를 먼저 만들고 그 다음에 type(a)로 a 객체가 어떤 타입인지 알아볼 수 있다. (객체 a의 타입은 FourCal 클래스이다)


2) 객체에 숫자 지정할 수 있게 만들기

현재 생성된 객체 a는 아직 아무런 기능을 하지 못하기 때문에, 이제 사칙연산의 기능을 하는 객체를 만들어야 한다.

이러한 기능을 갖춘 객체를 만드려면 우선 a 객체에 사칙연산 시 사용할 2개의 숫자를 먼저 알려줘야 한다.

그렇다면 앞서 구상한 'setdata 메서드(함수)'를 만들면 된다.

 

[함수 만드는 구조]

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

 

# 사칙 연산 클래스 만들기
class FourCal:
    # setdata 함수 지정
    def setdata(self, first, second):
        self.first = first
        self.second = second
  • setdata(self, first, second) : 메서드의 매개변수
  • self.first = first  / self.second = second : 메서드의 수행문
a = FourCal()
a.setdata(4, 2)

a.setdata(4, 2)로 호출하면 setdata 메서드의 매개변수 first, second에는 각각 값 4와 2가 전달되어 setdata 수행문은

self.first = 4
self.second = 2

self는 전달된 객체 a 이므로

a.first = 4
a.second = 2

 

로 해석 된다.

 

▶첫 번째 매개변수인  self 에는 setdata 메서드를 호출한 객체 a가 자동으로 전달된다.

또한, 파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용하는데, 이는 객체를 호출할 때 호출한 객체 자신이 전달되기 때문이다. (다른 이름을 사용해도 된다)

물론, 클래스를 통해 메서드를 호출하는 것 역시 가능하다.

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

 

만약 b 객체를 추가할 경우, 

b = FourCal()
b.setdata(3, 7)
print(b.first)

 

a 객체의 first는 3으로 변하지 않고 기존 값 4를 유지한다.

a = FourCal()
b = FourCal()

a.setdata(4, 2)
b.setdata(3, 7)
print(a.first)
print(b.first)

 

이는 클래스로 만든 객체의 객체변수는 다른 객체의 객체변수에 상관없이 독립적인 값을 유지한다는 것을 알 수 있다.

객체변수는 그 객체의 고유 값을 저장할 수 있는 공간이다.


3) 더하기 기능 만들기

2개의 숫자를 더하는 기능을 방금 만든 클래스에 추가한다.

# 사칙 연산 클래스 만들기
class FourCal:
    # setdata 함수 지정
    def setdata(self, first, second):
        self.first = first
        self.second = second

    # 더하기 기능 추가
    def add(self):
        result = self.first + self.second
        return result

# 기능 시연
a = FourCal()
a.setdata(4, 2)
print(a.add())

result = self.first + self.second

▶ a.add() 와 같이 a 객체에 의해 add 메서드가 수행되면 add 메서드의 self에는 객체 a가 자동으로 입력된다.

result = a.first + a.second

▶ a.add() 메서드 호출 전에 a.setdata(4, 2)가 먼저 호출되어 a.first = 4, a.second = 2라고 이미 설정되었기 때문에

result = 4 + 2 로 해석되어 a.add()를 호출하면 답인 6을 돌려준다.


4) 곱하기, 빼기, 나누기 기능 추가하기

# 사칙 연산 클래스 만들기
class FourCal:
    # setdata 함수 지정
    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()
a.setdata(4, 2)
print('더하기:', a.add())
print('곱하기:', a.mul())
print('빼기:', a.sub())
print('나누기:', a.div())


다음 내용

 


[출처]

Do it! 점프 투 파이썬, 박응용, 이지스퍼블리싱

걸작이 아닌 습작에 충실하자.:티스토리

코드잇 - 인스턴스와 객체의 차이가 뭔가요?

 

 

728x90
반응형