본문으로 바로가기

PYTHON 객체와 클래스

category 파이썬 2019. 7. 31. 23:58
728x90

클래스(Class)와 객체(Object)

 

클래스와 객체를 설명할 때 가장 쉽게 설명하는 방법은 위의 그림과 같다

 

- 클래스 : 그림속의 모형틀

- 객체 : 모형틀을 이용해서 나온 결과물

로 이해하면 편하다


■ 클래스(Class) 와 객체(Object) 만들기

클래스는 앞서 모형틀을 의미한다고 정의했다. 모형틀은 한 가지만 있는 게 아니고 여러 가지가 존재할 것이다. 사람 모양, 동물 모양 등등.... 이러한 모양으로 찍혀 나온 결과물을 우린 객체라고 부른다. 클래스와 객체는 한 번에 움직이기 때문에 같이 설명하겠다.

그렇다면 클래스는 왜 사용하는 것일까?

 

사칙연산을 진행하는 계산기를 보게되면 알 수 있는데, 함수를 이용해서 계산기를 만들면 다음과 같다.

rel = 0;

def add(num):
    global rel #전역 변수 설정
    rel += num #값을 계속 더하고 저장
    return rel #반환

print(add(3)) #3을 넣고
print(add(4)) #이후 3에 4를 더함

간단한 덧셈용 계산기 이다. 이상태의 계산기는 계산을 진행하면 할수록 값이 커질 수밖에 없는데 끝없이 값을 늘려가며 저장하고 있기 때문이다. 이러한 형태의 계산기는 새로운 덧셈을 진행할 경우 다른 계산기를 다시 만들어서 출력해야 만한다. 그렇담 클래스를 만들어 보기 전에 클래스에 대해 조금 더 알아보자.

 

#클래스 멤버

클래스는 가장 큰 틀로 데이터를 표현하는 필드, 행위를 표현하는 메서드로 구분되어 짐을 알 수 있다. 이모 든 것을 어떠한 객체의 attribute라고 하며 파이썬은 동적으로 추가가 가능하다.

 

@초기자(initializer)

클래스로부터 새로운 객체를 생성 시마다 실행되는 특별한 매서드로 --init__()이라는 메서드가 있다

이는 클래스로부터 객체를 만들 때 인스턴스 변수를 초기화하거나 객체의 초기 상태를 만들기 위한 문장을 실행하는 곳이다. 

class Calculator:
    
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
        self.rel = 0

 

@메서드

클래스의 행위를 표현하며 클래스 내의 함수를 의미한다. 

매서드의 종류에는 인스턴스 메서드, 정적 메서드, 클래스 메서드 가 있으며 가장 많이 쓰이는 것은 인스턴스 메서드이다. 이 인스턴스 메서드의 특징으로는 자기 자신에게 액세스가 가능하게 해 주는 메서드 첫 번째에 항상 자신을 의미하는 "self"라는 파라미터를 가지고 있다.

 

우선 클래스를 정의해보겠다. 파이썬에서 클래스 정의는 "class" 키워드를 이용해서 선언한다.

class Calculator:
    
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
        self.rel = 0
        
    def add(self):
        self.rel = self.num1 + self.num2
        return self.rel

 

@클래스 변수

클래스 변수는 클래스 속에서 메서드에 포함되지 않고 존재하는 변수를 의미한다. 클래스 속에서 모두가 사용 가능한데 사용법은 클래스. 변수명을 이용해 클래스 내외로 사용이 가능하다. 

class Calculator:

    cnt = 0 #클래스 변수
    
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
        self.rel = 0
        
    def add(self):
        self.rel = self.num1 + self.num2
        return self.rel

 

#객체의 생성, 사용

객체의 생성은 "객체 변수명=클래스명()"으로 사용하면 된다. 초기자가 클래스 내부에 있고 그곳에 파라미터들이 저장되어 있으면 "클래스명(입력 파라미터)" 같이 전달하고 이런 파라미터는 초기자가 사용한다.

#객체 생성
cal = Calculator(5, 5)

#매서드 호출
hap = cal.add()
print("add = ", hap)

#인스턴스 변수 액세스
cal.num1 = 10
print("num1 = ", cal.num1)

#클래스 변수 액세스
print(Calculator.cnt)
print(cal.cnt)

@실습) 덧셈을 진행하는 클래스

class Calculator:
    
    def __init(self, num1, num2):	#초기자생성
        self.num1 = num1
        self.num2 = num2
        self.rel = 0
        
    def add(self):
        self.rel = self.num1 + self.num2
        return self.rel
    
    addcal = Calculator(10, 5) #객체 생성
    add = addcal.add() #메서드 호출과정
    print("result = ", add)

 

**모든 파이썬 코딩은 주피터 노트북을 통해 진행했습니다.

728x90