더북(TheBook)

4.4 캡슐화

첫 번째 연습문제는 사각형을 그리는 코드를 함수 정의에 넣고, 거북이를 인자로 전달해 정의한 함수를 호출하라고 했다. 해법은 다음과 같다.

def square(t):

for i in range(4):

t.fd(100)

t.lt(90)

 

square(bob)

가장 안에 있는 문장 fdlt는 두 번 들여쓰기되어 있다. 두 문장은 for 루프 안에 있고, for 루프는 함수 정의 안에 있다. 그다음 줄에 있는 square(bob)은 왼쪽 들여쓰기를 전부 없앴으므로 for 루프와 함수 정의 모두 끝났다는 뜻이 된다.

square 함수 안에서 t는 인수로 전달된 거북이 bob을 가리킨다. 따라서 t.lt(90)bob.lt(90)과 같다. 그렇다면 인자 bob을 호출하면 안 될까? 여기서 tbob이 아니라 어떤 거북이라도 될 수 있다. 따라서 두 번째 거북이를 생성해서 square에 인수로 전달할 수도 있다.

alice = Turtle()

square(alice)

코드 조각을 함수로 감싼 것을 캡슐화(encapsulation)라고 한다. 캡슐화를 하면 코드에 이름을 붙이게 되고, 이름이 붙은 코드는 어느 정도 문서화의 역할을 한다는 이점이 있다. 또 다른 이점으로는 코드를 재사용할 때 바디를 복사해서 붙여넣지 않고 함수를 두 번 호출하는 쪽이 더 간결하다는 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.