Python 07-b) - 불변객체와 가변객체의 매서드 차이
대표적인 불변 객체 String의 매서드를 사용해 본 적 있을 것이다.
upper(), lower()와 같이 연결된 문자열을 대문자 혹은 소문자로 바꿔주는 기능은 매우 유용하다.
대표적인 가변 객체로는 list의 매서드도 사용해 본 적이 있을 것이다.
append(),reserved()와 같이 요소를 추가하거나 배열의 순서를 반대로 하는 기능 또한 매우 활용하기 좋다.
하지만 여기에는 숨겨진 비밀이 있다. 바로 이 매서드들의 결과 반환의 유무이다.
upper(), lower()의 경우 print() 해볼 시 값을 반환해 줌을 알 수 있다.
이와 반대로 append(),reserved()의 경우 print() 해볼 시 값을 반환하지 않음을 알 수 있다.
어째서 이런 차이가 발생하는 것일까?
바로 불변 객체와 가변객체의 차이 때문이다.
불변 객체의 경우 hello.upper()를 하면 그 결과가 "HELLO"가 된다. hello가 변경되는 것이 아니라 "Hello"라는 객체가 새로 만들어 지기 때문에 "Hello"라는 객체를 반환해주지 않을 경우에 그 객체가 어디 있는지 알 수 없게 될 수 있다. 때문에 파이썬을 개발한 사람은 이를 방지하기 위해서 값을 반환 해주는 형식으로 매서드를 설계했다.
반대로 [1,2,3].append(4)를 하면 그 결과는 값을 반환하지 않는다. 그 이유는 [1,2,3]은 가변 객체이고 이에 대한 주소는 이미 알고 있기 때문에 값을 반환 해주지 않더라도 문제가 없기 때문이다.
오늘은 가변객체와 불변 객체의 매서드에 대해 기능보다는 데이터 관리 측면에 대해서 살펴보았다.
+ 추가 2024.07.04(토)
가변 객체인 경우 함수 내에서 접근이 가능하다고 앞서 이야기 했었다. 이는 변수가 가리키는 객체에 값을 추가로 할당하기에 가능했다. 하지만 sorted(),reserved()와 같은 매서드의 경우에는 추가,제거가 아니라 목적에 맞는 새로운 객체를 할당하기 때문에 함수 내에서 사용할 경우에 불변객체와 같이 global 키워드를 사용해야 변경이 가능하다