728x90 불변객체4 [PYTHON] Mutable vs Immutable : 메모리 레이아웃의 3가지 핵심 차이와 최적화 방법 파이썬을 다루는 개발자에게 Mutable(가변)과 Immutable(불변) 객체의 구분은 단순히 '값을 바꿀 수 있느냐'의 문제를 넘어섭니다. 이는 파이썬의 메모리 관리 시스템인 CPython이 객체를 어떻게 할당하고, 재사용하며, 가비지 컬렉션을 수행하는지에 대한 근본적인 아키텍처와 직결됩니다. 본 포스팅에서는 메모리 레이아웃의 구조적 차이점과 효율적인 코딩을 위한 4가지 실무 전략을 심도 있게 분석합니다.1. 객체의 정의와 ID의 본질파이썬의 모든 것은 객체입니다. 객체는 메모리에 생성될 때 고유한 id(메모리 주소)를 부여받습니다. 가변 객체는 생성 후 내부 상태를 변경해도 이 주소가 유지되지만, 불변 객체는 값이 바뀌는 순간 새로운 메모리 주소에 새로운 객체를 생성합니다. 이 메커니즘을 이해하는 .. 2026. 2. 27. [PYTHON] 딕셔너리 키(Key)값으로 리스트를 쓸 수 있을까? 불변성(Immutability)과 해시(Hash)의 비 파이썬(Python)을 학습하다 보면 매우 편리한 두 자료구조인 리스트(List)와 딕셔너리(Dictionary)를 자주 혼합하여 사용하게 됩니다. 이때 많은 초보 개발자가 시도하는 것 중 하나가 바로 "리스트를 딕셔너리의 키(Key)로 사용하는 것"입니다. 과연 이것이 가능할까요? 결론부터 말씀드리면 "파이썬에서 리스트는 딕셔너리의 키가 될 수 없습니다." 단순히 '안 된다'는 사실을 넘어, 왜 파이썬 설계자들이 이러한 제약을 두었는지 그 내부 메커니즘인 해시 가능성(Hashability)과 가변성(Mutability)의 관점에서 깊이 있게 파헤쳐 보겠습니다.1. 왜 리스트는 키가 될 수 없는가? (TypeError: unhashable type: 'list')파이썬 딕셔너리는 해시 테이블(Hash T.. 2026. 2. 4. [JAVA] Java 14/16의 Record 키워드 : 데이터 클래스의 혁명 자바 개발자라면 누구나 한 번쯤은 단순한 데이터 저장을 위한 클래스를 작성하면서 반복적이고 지루한 코드에 지쳤던 경험이 있을 것입니다. 필드를 선언하고, 생성자를 만들고, 모든 필드에 대한 Getter 메서드를 정의하고, equals(), hashCode(), toString() 메서드까지 수동으로 구현하거나 IDE의 도움을 받아야 했습니다. 이러한 상용구(boilerplate) 코드는 코드의 가독성을 저해하고 유지보수를 어렵게 만드는 주범이었습니다. 하지만 Java 14에서 미리보기(preview) 기능으로 도입되어 Java 16에서 정식 기능으로 확정된 record 키워드는 이러한 문제에 대한 자바 플랫폼의 우아하고 강력한 해답을 제시합니다. record는 불변(immutable) 데이터를 간결하게 .. 2026. 1. 23. [JAVA] Java의 final 키워드 완벽 정리 : 클래스, 메서드, 변수별 차이점 자바(Java) 언어에서 final은 매우 강력한 제어권입니다. 이름 그대로 '최종적'임을 나타내는 이 키워드는 단순히 변경을 막는 수준을 넘어, 프로그램의 안정성을 높이고 불변성(Immutability)을 보장하며 성능 최적화의 힌트를 제공하기도 합니다. 하지만 final이 어디에 붙느냐에 따라 그 의미는 완전히 달라집니다. 오늘은 클래스, 메서드, 변수라는 세 가지 맥락에서 final이 어떤 제약을 거는지 심층적으로 분석해 보겠습니다.1. 변수에 붙는 final: "변경할 수 없는 값"변수에 final이 붙으면 해당 변수는 상수(Constant)가 됩니다. 즉, 한 번 초기화되면 그 값을 다시 변경(재할당)할 수 없습니다.지역 변수: 선언 시 혹은 이후 한 번만 할당 가능합니다.멤버 변수: 선언 시 .. 2026. 1. 14. 이전 1 다음 728x90