객체가 함수로 전달되었을 때, 만약 함수 안에서 객체를 변경하면 어떻게 될까요? 이것은 어떤 객체가 전달되었느냐에 따라 달라집니다.
만약 숫자나 문자열과 같은 변경 불가능한 객체가 전달되면 이들 객체는 변경되지 않습니다. 하지만 우리가 작성한 객체가 전달되면 함수가 객체를 변경할 수 있습니다.
예를 들어서 다음과 같은 예제를 봅시다.
# 사각형을 클래스로 정의합니다.
class Rectangle:
def __init__(self, side=0):
self.side = side
def getArea(self):
return self.side * self.side
# 사각형 객체와 반복횟수를 받아서 변을 증가시키면서 면적을 출력합니다.
def printAreas(r, n):
while n >= 1:
print(r.side, "\t", r.getArea())
r.side += 1
n -= 1
# printAreas() 를 호출하여서 객체의 내용이 변경되는지를 확인합니다.
myRect = Rectangle()
count = 5
printAreas(myRect, count)
print("사각형의 변 = ", myRect.side)
print("반복 횟수 = ", count)
<실행 결과>
0 0
1 1
2 4
3 9
4 16
사각형의 변 = 5
반복 횟수 = 5
정사각형을 클래스 Rectangle로 정의하였습니다. 클래스 Rectangle은 side 변수와 getArea() 메소드를 가지고 있습니다. Rectangle의 객체를 생성하고 이것을 printAreas() 메소드에 전달하였습니다.
printAreas() 메소드에서는 객체의 side 변수를 증가시키면서 getArea() 메소드를 호출하여 사각형의 면적을 출력합니다.
함수에 객체를 전달하면 객체의 참조값이 전달됩니다. myRect와 같은 객체는 변경 가능하므로 함수 안에서 객체의 내용을 변경하면 원본 객체가 변경됩니다.
반면에 count와 같은 숫자는 변경 불가능한 객체이므로 함수 안에서 n을 변경하여도 원본 변수인 count의 값은 변경되지 않습니다.
