Python(파이썬) - 상속 알아보기




    이번 포스팅에서는 상속에 대해서 알아보겠습니다

    일반적으로 상속이란 말을 사용할때 누구에게 무엇을 상속받았다라고 쓰게됩니다 프로그래밍에서도 상속이라는것이 있습니다 지난 포스팅에서 알아본 객체를 상속하여 새로운 기능을 만들수 있는 좋은기능을 이용하여 파이썬의 상속을 알아보도록 하겠습니다


    관련글 :


    Python(파이썬) - 객체(Object) - http://server-talk.tistory.com/210


    Python(파이썬) - 객체제작 - http://server-talk.tistory.com/212


    Python(파이썬) - Class(클레스)와 생성자 - http://server-talk.tistory.com/211


    Python(파이썬) - 인스턴스 변수와 메서드 - http://server-talk.tistory.com/213






     Python(파이썬) - 상속이란?




    파이썬(Python)에서 상속이란? 기존에 만들었던 프로그램의 기능을 그대로 상속하면서 새로운 기능을 추가하는 것입니다




    위 그림을 보시면 Calc의 더하기, 빼기 기능이 있으며, Calc의 더하기, 빼기 기능을 Multi의 상속하게 되면 Multi는 더하기, 빼기 기능을 추가하지 않아도 사용할수 있게됩니다


    즉 Multi는 상속받 Calc의 모든 기능을 사용할수 있게 되는것입니다.






     Python(파이썬) - 상속 문법




    class Calc(object):
    


    지난 객체 포스팅에서 위 코드 부분의 object 부분은 상속에 관련 포스팅에서 알아본다고 하였습니다


    바로 object 부분에 상속할 클래스를 넣어주시면 됩니다




    class Calc(object):
        def __init__(self, num1, num2):
            self.num1 = num1
            self.num2 = num2
        def sum(self):
    	       return self.num1 + self.num2
    
    class Ref(Calc):
        def sub(self):
            return self.num1 - self.num2
    


    위 코드의 Ref 클래스 괄호 안을 보시면 Calc 클래스가 있는 것을 확인하실 수 있습니다

    즉 클래스 괄호 안에 상속할 클래스를 넣어주시면 됩니다





    파이썬 상속 사용방법


    def Ref(상속 클래스 이름)






     Python(파이썬) - 상속 해보기



    상속이란 자신이나 타인이 만든 혹은 이미 만들어진 객체에 새로운 기능을 추가하여 새로운 객체를 만드는 행위가 바로 상속입니다


    상속이란 기능을 상속하는 것이고 기능을 상속하여 새로운 객체를 만드는 과정입니다




    class Calc(object):
        def __init__(self, num1, num2):
            self.num1 = num1
            self.num2 = num2
        def sum(self):
             return self.num1 + self.num2
        def sub(self):
             return self.num1 - self.num2
    
    C1 = Calc(20,10)
    print(C1.sum())
    print(C1.sub())
    


    위 코드는이전 포스팅에서 사용한 코드입니다 위 코드를 이용하여 상속받을 객체를 만들어 보도록 하겠습니다





    class Calc(object):
        def __init__(self, num1, num2):
            self.num1 = num1
            self.num2 = num2
        def sum(self):
             return self.num1 + self.num2
    
    class Ref(Calc):
        def sub(self):
            return self.num1 * self.num2
    
    C2 = Ref(20,10)
    print(C2.sum())
    


    프로그램 실행은 위에서 부터하지만 하나씩 알아보기위해 먼저 마지막줄부터 차근차근 알아보도록 하겠습니다


    C2의 sum 메서드를 호출시에 파이썬은 C2의 인스턴스 Ref 클래스를 찾게 됩니다

    그리고 Ref 클래스 안에서 sum 메서드가 있는지 확인하게 되며, 없다면 Ref 클래스의 부모 클래스를 확인하게 됩니다

    확인 후 위 코드에는 Calc 클래스가 상속되어 있으므로 Calc 클래스에 sum 메서드가 있는지 다시 찾게 됩니다

    그런데 Calc 클래스에는 sum 메서드가 있으니 sum 메서드의 결과를 출력하게 됩니다




    위의 출력 결과를 보시면 정상적으로 출력되는 것을 확인 하실 수 있습니다



    class Calc(object):
        def __init__(self, num1, num2):
            self.num1 = num1
            self.num2 = num2
        def sum(self):
             return self.num1 + self.num2
        def sub(self):
            return self.num1 - self.num2
    
    class Ref(Calc):
        def multi(self):
            return self.num1 * self.num2
    
    C2 = Ref(20,10)
    print(C2.sum())
    print(C2.multi())
    



    위 내용은  print 함수를 더 추가하여 상속받은 Ref 클래스 안에 메서드를 출력한 내용이며, 결과값이 잘 출력 되는 것을 확인하실 수 있습니다







     Python(파이썬) - 상속을 사용하는 이유



    이번에는 상속을 하지 않고 객체를 만들어 보도록 하겠습니다



    class Calc(object):
        def __init__(self, num1, num2):
            self.num1 = num1
            self.num2 = num2
        def sum(self):
             return self.num1 + self.num2
        def sub(self):
            return self.num1 - self.num2
    
    class Ref(object):
        def __init__(self, num1, num2):
            self.num1 = num1
            self.num2 = num2
        def sum(self):
             return self.num1 + self.num2
        def sub(self):
            return self.num1 - self.num2
        def multi(self):
            return self.num1 * self.num2
    
    C2 = Ref(20,10)
    print(C2.sum())
    print(C2.sub())
    print(C2.multi())
    


    위 코드의 Ref 클래스를 보시면 Calc 클래스에 있는 생성자, sum, sub 메서드를 Ref 클래스에도 추가한 것을 보실 수 있습니다

    위 코드는 간단한 코드시만 이러한 클래스의 코드가 100줄 1000줄 10000줄이 된다면 코드도 길어질 뿐만 아니라 유지 보수도 힘들어지게 됩니다


    그러나 상속을 사용하게 되면 코드의 양, 가독성 증가, 유지 보수의 효율 등등의 여러 가지의 효율을 볼 수 있습니다


    Posted by Server-talk 서버이야기