String은 왜 불변일까
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
Java
대상자 대상자_정보 출력
- Java 개발자(특히 면접 준비자, 핵심 개념 이해 필요자)*
- 난이도: 중간(기초 언어 이해 기반)*
핵심 요약
- 불변성은 메모리 효율성, 보안성, 멀티스레드 안전성을 보장
- String Pool 메커니즘을 통해 같은 값의 객체 공유 가능
- 가변성으로 인한 해킹/오류 위험 방지를 위한 설계 선택
섹션별 세부 요약
###1. 불변 객체의 개념
- String은 참조형 타입으로, 값 변경 시 새로운 메모리 할당 발생
int
와 달리 기본형은 메모리 변경 가능 vs 참조형은 불변성 강제String a = "test"; a = "testtest";
코드에서 기존 객체는 변하지 않고 새로운 객체 생성
###2. 보안성 고려
- 민감 정보(비밀번호, ID) 저장 시 변경 가능성 방지
- 가변성으로 인한 해킹/코드 오류로 인한 데이터 유출 방지
###3. 메모리 효율성
- String Pool 메커니즘으로 중복 값의 메모리 공유 가능
- 가변성 시 값 변경 시 메모리 관리 불가능으로 String Pool 활용 불가
###4. 멀티스레드 안전성
- 불변성으로 인해 동기화 문제 발생 가능성 제거
- 멀티스레드 환경에서 값 변경 없음으로 스레드 안전성 보장
###5. 결론
- 불변성은 Java의 핵심 설계 원칙으로, 보안/성능/안정성 모두 강화
- StringBuilder 사용 권장: 가변 연산이 필요한 경우
결론
- String은 불변성으로 인해 보안/메모리/동기화에 유리하지만, StringBuilder를 사용해 가변 연산을 처리하는 것이 실무적이다.