String이 불변이어야 하는 이유

Helog·2020년 2월 26일
1

IT기술면접

목록 보기
3/4

전 게시물에서 String,StringBuffer,StringBuilder 를 포스팅했다.
크게나누면

String은 불변,
StringBuffer,StringBuilder는 가변,
StringBuffer는 동기화 지원, StringBuilder는 동기화 미지원
으로 나눌수 있다.

어떤 분이 String이 불변인 이유에 대해서 물었을 때
보안이나 메모리 문제라는 간단한 대답정도밖에 할 수 없었다.
그래서 어떤 이유일지 자세히 찾아보았다.

String이 불변인 이유

1. 보안

네트워크 연결시의 포트, 파일 경로, db연결에 필요한 URL도 모두 String이다.
그만큼 모든 중요한 역할을 String이 해내고 있다.
그런데 이런 String이 가변적이다? 누군가가 실수로 a=b 로 바꿔버리면 끔찍한 일이 일어나버리고 말것이다.

2. 메모리 관리 GOOD

실제로 자바개발중에 가장 많은 메모리를 차지하는건 String 객체라고 생각한다. (앞서말했듯 포트번호, 파일경로, URL도 모두 String이다.)
아래 사진과 같이 String s1과 s2의 값이 같으면 하나의 String객체만이 필요하기 때문에 JVM의 힙을 절약할 수 있다.
재사용이 가능하다!

StringBuffer,StringBuilder

이 두개는 앞서 있던 불변이라는 String의 단점을 보완하기 위해 탄생했다.

+

그 외에도 정말 많은 이유로 String은 불변으로 태어났다. 하지만 그 내용들은 아무리 이해하려고 해도 아직 어려운 부분이라 내 레벨이 좀 더 올라간다면 덧붙여 포스팅을 할 예정이다 크크

profile
Hello gaebalja

1개의 댓글

comment-user-thumbnail
2020년 2월 27일

오랜만에 공부했던게 기억나는 글이네요 잘 읽고 갑니다.
저거 3가지 키워드만 기억하세요.
캐싱, 보안, 동기화(thread safe)

답글 달기