NERD WORLD

(번외) Django와, Python class/instance 변수에 대한 의문 본문

Python - Django

(번외) Django와, Python class/instance 변수에 대한 의문

학부생7년차 2016. 6. 24. 23:14

Django에서 Model과 Form을 기술하는 방법은 유사하다.

class Post(models.Model):

title = models.CharField(max_length=20)

content = models.TextField()


class PostForm(forms.Form):

title = forms.CharField(max_length=20)

content = models.TextField()

(글을 쓰다보니, 티스토리 블로그 포스트에서 코드 하이라이트를 넣어줄 수 있도록 방법을 고안해봐야할 듯 싶다..)


귀가길에 신논현역 교보문고에 들려서 하와이 여행책을 사왔다. 책을 사러간 김에 진석쌤이 추천해주신 Python 책이 생각나서 대충 훑어보고 왔다. 클래스와 객체에 대해 논하는 9장까지 대충 훑어보고 나서 참 좋은 책이라 생각했다. 그런데 클래스 변수와, 인스턴스 변수에 대해서 다시 머릿속으로 개념을 정립하고 나서 Django의 Model과 Form을 기술할때를 생각해보니 이상했다. 


위에서 보면 Post model을 정의할때 title, content를 마치 클래스 변수처럼 정의했기 때문이다. 프로젝트에서 무수히 많은 Post model의 instance가 만들어지고, DB에 저장될텐데, Post model에 정의된것이라고는 클래스 변수뿐이라는 사실이 매우 이상했던 것이다.


그래서 구글링을 아주 잠깐 해서 스택오버플로우 글을 획득했다. 정확히 이해하지 못했지만 요지는 이러하다. title, content는 "오늘의 일기", "집에서 빈둥거렸는데 너무나 즐거웠다." 같이 model instance의 실제 title, content를 의미하는 것이 아니라, Post model 객체의 내부 구조를 정의하는 객체라는 것이다. 즉, Python 언어를 창의적으로 잘 활용해서, Django는 실제로 Model, Form에게 기대하는 바를 저렇게 사용자가 쉽게 기술할 수 있도록 인터페이스를 만들어준 것이다.


신기하군.

Comments