내 맘대로 생각하는 파이썬


 

'모든 것이 객체입니다'

파이썬에서는 어떤 객체도 동적으로 변수에 할당할 수 있습니다. 그렇다면 '파이썬에서 객체란 무엇일까요?' 이 질문에 대한 대답은 '모든 것이 객체'라는 겁니다.

파이썬에서 모든 데이터 값이 객체입니다. 예를 들어 '놀라지 마세요!' 같은 문자열 객체나 42같은 숫자 객체가 있습니다. 다른 프로그래밍 언어와 마찬가지로 파이썬 객체는 속성이나 값을 나타내는 상태( state ) 와 메서드에 해당하는 행동 ( behavoir )을 가질 수 있습니다.

요약하면 파이썬에서 모든 것은 클래스로부터 상속받은 객체처럼 동작합니다. 이러한 점에서 파이썬은 객체 지향이라기보다는 객체 기반 ( object-based ) 이라고 표현하는 것이 더 적절합니다. 즉 파이썬에서 객체지향은 단지 선택사항일 뿐입니다.
 - '헤드 퍼스트 파이썬 p89'

 

 

모든 것이 최초의 빌트인 클래스로부터 상속받은 객체이다.

그렇다면 클래스를 쓰지 않고 함수만으로 코드를 작성한다는 것은 도대체 무슨 뜻일까?

즉 기존의 다른 언어들의 객체지향( 클래스 지향? ) 적인 특성이 아닌 객체 기반 ( object-based ) 적으로 코드를 작성한다는 것이다.

 

이 말은 매우 햇갈리지만

클래스를 배제한 것이 아닌, '최초의 클래스' 의 판 안에서만 놀아난다고 보면 이해할 수 있을 것 같다.

더이상의 새로운 클래스를 형성하지 않고 이미 만들어진 클래스안에서 새로운 함수 ( 새로운 행동 ) 만으로 코드를 작성한다.

즉 이미 공유하고있던 관념이나 개념을 그대로 상속하여 사용한다는 것이다.

 

어떤 국가가 있으면 그 국가 안에서 새로운 정의와 철학을 가진 새로운 국가를 선포하는 것이 아니라,

이미 있던 국가의 테두리 안에서 다른 행동만을 한다는 뜻이다. 대전제와 큰 범위는 바뀌지 않는다.

 

객체를 지향한다는 것은, 클래스를 만드는 것을 지향한다는 것은

계속해서 새로운 문법, 새로운 사람, 새로운 창업 등 새롭게 규정된 것을 만들어내서 그것을 공유하는 테두리, 틀을 만드는 것을 계속해서 지향한다는 소리다.

'사람은 고쳐쓰는게 아니다' 라고 생각하여 새롭게 태어나는 아이들(신상 객체)을 교육시키는 것에 집중하는 것은 객체지향적인 태도이다.

 

객체를 기반 한다는 것은 이미 있는 기반 위에서, 어떤 규칙 안에서 새로운 행동을 하겠다는 소리다.

위 예시와 반대로 기존에 있던 사람들도 변할 수 있다고 믿고 평생교육을 실천하는 태도이다.

 

객체지향이라고해서 본래에 있었던 최초의 클래스를 무시할 수 있다는 것도 아니고

객체 기반이라고해서 객체를 쓰지 않는다는 소리도 아니다.

필요할 때 필요한 것을 사용하는 것이 올바른 태도이다.

 

 


 

def imking():
	global z --->> z가 함수 내에 없으면 전역 클래스에서 z를 찾아서 가져오도록 함.
	print(z) ->>>>>> 10 
	z = 2
    print(z)   ->>>>>> 2
    return z
    
z = 10
imking()

print(z) -----> 호출했는데도 10

 

함수라는 것은 언제나 전역 클래스에 '종속' 되어 있다.

함수라는 새로운 행동을 만들어 z 는 2다!! 라고 외쳐도, 그것은 외치는 순간만 2이고

그 바깥에서는 이미 전역 클래스에 담겨져있는 z 가 10이다 라는 사실, 상태(state)는 바뀌지 않는다.

함수는 문맥( context )이 있을 수 없는 단일적으로 휘발되는 행동으로 규정된다.

휘발되어야만 하는 것들도 있기에 그것을 활용하기 위해서 사용한다.

 

class Country:
    def __init__(self):
        self.z = 2


z = 10

c = Country()
print(z) ====> 10
print(c.z)    =====> 2

 

클래스는 새로운 나라를 선포하고 성벽을 올린다.

모두가 공유하는 어떤 것을 분명하게 정의하고 그 새로운 틀안에서 모든것이 생겨난다. 

종속되지 않는 = 기억에 계속해서 남는 자기만의 상태와 행동을 지속적으로 가질 수 있다.

그런것들이 프로그래밍할 때 필요하니까 만들어 둔 것이다.

 

함수와 클래스 모두 전역적인 세계 (World)에서 약간의 공간을 빌려 무언가를 하는 것은 완전히 동일하다.

하지만 동네에서 자기 집 울타리를 짓는 것과

나라를 선포하고 울타리를 치는 것은 차원이 틀린 이야기다.

새로운 종류, 기존과는 전혀다른 차이를 보이는 특성들을 지속적으로 만들어내겠다는 선포이다.

그 말은 곧 기존 세계의 문법을 지키지 않고 그 공간을 계속해서 점유하고 바뀌지 않는 고유함으로 만들어나가겠다는 뜻이다.

파이썬 클래스에서 꼭 self를 붙여야만 고유한 상태 변수를 유지할 수 있는 것이 같은 맥락에서의 이유이다.

클래스로 객체가 생성될때마다 고정된 위치를 기억해야하기 때문이다.

컨텍스트 관리자는 무조건 클래스로 만들어야 하듯이 클래스는 문맥을 기억하고 이해할 수 있도록 만들어 준다.

 

새로운 클래스 안에도 함수가 있을 수 있고, 그 새로운 클래스안에서 또다른 클래스가 파생되면서 계속해서 복잡해지는 모습은 마치 인류의 진화과정과 같은 모습이다.

파이썬에서의 모든 것이 객체다 라는 말처럼 리처드 파인만이 세상의 모든 것은 원자로 구성되어있다. 라고 말한 것이 기억난다. 최초의 상태에서 계속해서 압축되고 추상화되고 새롭게 정의되기도 하면서 만들어나갈 수 있는 프로그래밍과 세상은 똑같은 개념이 아닐까 생각이 든다.

 

그저 기능하느냐 새롭게 자신만의 색깔을 입고 기능하느냐. 클래스가 다른 전혀 다른 색깔을 보여주는 프로선수들을 생각해보자.

회사의 직원으로 기능할 것인가, 아니면 창업해서 새로운 비지니스를 만들고 그 안에서 기능할 것이냐의 차이라고 보면 쉬울 것 같다.

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기