ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python 기초 #7] 클래스, 객체와 인스턴스 차이, 생성자, 상속, 오버라이딩
    Programming 기초/Python 2023. 4. 21. 18:27

    * 클래스(class)

    • 클래스는 거푸집과 같다. 같은 기능을 하는 함수를 필요할 때마다 찍어내는 '함수 틀'이다. 클래스로 생성된 함수들을 객체(object)라고 부른다.
    • c언어에는 클래스가 없다. c언어에서는 같은 기능을 하는 함수라도 매번 이름을 약간씩 바꿔가면서 새롭게 정의해야한다.
    • 클래스 이름을 지을 때, 관례적으로 첫 글자를 대문자를 사용한다.
    • 클래스 안에 구현된 함수는 메서드(Method)라고 부른다.
    • 파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self를 사용한다. 객체를 호출할 때 호출한 객체 자신이 전달되기 때문에 self를 사용한 것이다.
    객체와 인스턴스(instance)의 차이
    클래스로 만든 객체를 인스턴스라고도 한다. 
    a =Cookie() 이렇게 만든 a는 객체이다. 그리고 a 객체는 Cookie의 인스턴스이다. 즉 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다. 'a는 인스턴스'보다는 'a는 객체'라는 표현이 어울리고, 'a'는 Cookie의 인스턴스'라는 표현이 훨씬 잘 어울린다.

     

    * 생성자(constructor)

    객체에 초깃값을 설정할 때, setdata 메서드를 호출하여 초깃값을 설정하기보다는 생성자를 구현하는 것이 안전하다.

    class FourCal:
        def __init__(self, first, second):	# 생성자 메서드의 이름에 '_'는 각 양쪽에 두 개씩 붙는다.
            self.first = first
            self.second = second
    
        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
    
    
    a = FourCal(4, 2)
    b = FourCal(3, 8)
    
    print(a.add())
    print(b.add())
    
    print(a.div())
    print(b.div())
    -------------------------------------------------
    6
    11   
    2.0  
    0.375

     

    * 클래스의 상속(Inheritance)

    어떤 클래스를 만들 때 다른 클래스의 기능을 물려받는 것. 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다.

    class 클래스 이름(상속할 클래스 이름)
    class MoreFourCal(FourCal):	#기존 사칙연산 클래스에 지수계산 메서드를 추가했다.
        def pow(self):
            result = self.first ** self.second
            return result
    
    c = MoreFourCal(4, 3)
    print(c.pow())
    --------------------------------------
    64

     

    * 메서드 오버라이딩(Overriding, 덮어쓰기)

    부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것을 메서드 오버라이딩이라고 한다.

    class FailFourCal(FourCal):	# 곱하는 값이 0일 경우 'Fail' 문자열을 출력하는 클래스
        def mul(self):
            if self.second == 0:
                return 'Fail'
            else:
                return self.first * self.second
    
    
    d = FailFourCal(5, 0)
    print(d.mul())
    -------------------------------------
    Fail

     

    * 클래스 변수

    • 객체변수는 다른 객체들에 영향받지 않고 독립적으로 그 값을 유지한다.
    • 클래스 변수는 클래스로 만든 모든 객체에 공유된다(클래스 변수 값을 변경하면 클래스로 만든 모든 객체의 해당 변수값이 모두 변경된다).
    class Family:
        lastname = "김"	# 클래스 변수 lastname을 "김" 문자열로 초기화시킴
    
    print(Family.lastname)
    
    a = Family()
    b = Family()
    print(a.lastname)
    print(b.lastname)
    
    Family.lastname = "박"
    print(a.lastname)
    print(b.lastname)
    -------------------------------------
    김
    김
    김
    박
    박

    id값을 확인하면 Fanily.lastname, a.lastname, b.lastname은 모두 같은 메모리를 가리키고 있다.

    print(id(Family.lastname))
    print(id(a.lastname))
    print(id(b.lastname))
    -------------------------------
    2002133181472
    2002133181472
    2002133181472

     

    댓글

Designed by Tistory.