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(파이썬) - 상속 - http://server-talk.tistory.com/214


    Python(파이썬) - 클래스 메서드 - http://server-talk.tistory.com/216


    Python(파이썬) - 객체와 변수 알아보기 - http://server-talk.tistory.com/217


    파이썬(Python) - 다중 상속 - http://server-talk.tistory.com/219






     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())
    


    아직 완성되진 않았지만 위 코드는 더하기, 빼기 기능만 되는 객체로 만든 계산기입니다 위코드의 계산기를 객체을 쓰지 않고 만들어 보도록 하겠습니다





    def sum(num1, num2):
        return num1+num2
    
    def subtract(num1, num2):
        return num1 - num2
    
    print(sum(20,10))
    print(subtract(10,10))
    


    위 코드를 보시면 객체로 만들었던 sum과 sub 메서드를 함수로 정의하였습니다 그리고 함수 호출시 데이터를 전달하여 간단하게 만든 코드입니다

    그런데 객체로 만들었을 때보다 오히려 쉽고 간단하죠? 그리고 위와 같이 만들게 되면 함수를 실행을 하였을 때 자체로서 완결성도 있습니다

    또한 객체로 만든 코드와 함수로 만든 코드를 비교하면 객체의 코드는 함수로 만든 코드의 함수도 전부 포함하고 객체로 만들려면 클래스, 인스턴스, 생성자, 인스턴스 변수 등등을 알고 있어야지 객체지향적으로 프로그램을 하실 수 있는것이니까요






     Python(파이썬) - 객체를 사용하는 이유는 무엇인가?



    객체지향 프로그램이라는 것은 결국에 프로그램이 커지는 과정에서 필연적으로 발생하는 복잡도를 낮추기 위한 프로그래밍 기법라고 하는 그런 측면이 상당히 중요한 부분이라고 할 수 있습니다


    그렇다면 쉽게 함수로 만들면 되는데 왜 객체를 이용하는 것일까요? 2개의 코드를 비교해 보면서 알아보겠습니다


    그렇다면 쉽게 함수로 만들면 되는데 왜 객체를 이용하는 것일까요? 2개의 코드를 비교해 보면서 알아보겠습니다



    def sum(num1, num2):
        return num1+num2
    
    def subtract(num1, num2):
        return num1 - num2
    
    print(sum(20,10))
    print(subtract(10,10))
    


    객체를 이용하지 않고 만든 코드는 함수의 데이터마다 각각의 20,10(데이터)를 넣어주어야 됩니다

    즉 sum과 subtract는 관계성이 안 보이게되는 겁니다 이러한 상황을 극복하기 위한 방법으로 다음과 같이 있습니다




    def sum(num1, num2):
        return num1+num2
    
    def subtract(num1, num2):
        return num1 - num2
    n1 = 20
    n2 = 10
    print(sum(n1, n2))
    print(subtract(n1, n2))
    


    위 코드는 데이터를 변수로 묶었습니다 변수로 데이터를 묶어서 변수의 숫자만 바꾸면 각각의 함수의 데이터도 쉽게 변경하기 때문에 유지 보수가 편리하게 됩니다

    그러나 객체를 이용하지 않고 만든 코드들이 과연 객체를 이용한 코드보다 더 보기 좋은라고 할 수 있을까요?



    def sum(num1, num2):
        return num1+num2
    
    def subtract(num1, num2):
        return num1 - num2
    n1 = 20
    n2 = 10
    print(sum(n1, n2))
    print(subtract(n1, n2))
    
    n3 = 40
    n4 = 30
    print(sum(n4, n3))
    print(subtract(n4, n3))
    


    sum 함수의 결괏값을 추가하는 부분을 더 추가하여 보았습니다

    위 코드의는 문제가 있습니다 프로그램이 작다면 위와 같은 코드로 사용하는 것이 더 효율적일 것입니다 하지만 프로그램이 커진다면 치명적인 단점이 있습니다

    예를 들어 정의를 한 sum이라는 메서드를 다른 누군가 또 정의하는 경우로 원래의 함수가 다르게 동작하면서 프로그램이 오동작하게 되는  것입니다 또한 n1이라는 변수를 다른 누군가가 다른 의미로 사용하게 되면서 버그가 발생하게 될 수도 있습니다


    그럼 다시 객체를 이용한 코드를 보겠습니다



    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())
    C2 = Calc(40,20)
    print(C1.sum())
    print(C1.sub())
    


    객체를 이용한 코드를 보시면 C1에 들어있는 메서드와 인스턴스 변수가 객체를 이용하지 않고 만든 프로그램보다 안전하게 있다고 보관되어 있기 때문에 다른 코드들의 영향을 받아서 훼손, 변형될 가능성이 현저히 낮게 됩니다


    Posted by Server-talk 서버이야기