본문 바로가기
java

String이란?

by ernest45 2023. 10. 31.

 

 

자바에서 String은 좀 이상하다고 한다.

 

int와 char와 달리 참조형 객체로 분류된다. 그럼에도 기본타입처럼 쓸 수 있ㄷ다.

 

 

불변객체

 

기본적으로 자바에서는 String 객체의 값은 변경할 수 없다.

 

불변 객체(Immutable Object)란?

 

한 번 값이 설정되면 변경될 수 없는 객체를 의미한다.

Java에서 String은 왜 불변일까?

 

내부적으로 char[] 배열로 데이터를 저장하지만, String 클래스는 이 배열을 final로 선언해서 외부에서 수정할 수 없게 막아둠

 

 

왜 불변으로 만들었을까? 

 

1. 쓰레드 안전(Thread-safe)

  • 불변 객체는 공유해도 안전 → 여러 쓰레드에서 동시에 사용해도 문제 없다

2. Hashing 최적화

  • String은 자주 HashMap의 키로 사용됨
  • 해시값을 한 번 계산해서 캐싱해두면, 변경되지 않기 때문에 효율적 

3. 문자열 상수 풀 (String Constant Pool) 활용 가능

  • "hello" 같은 리터럴은 JVM의 문자열 상수 풀에 저장됨
  • 불변이기 때문에 같은 문자열은 재사용 가능하다

 

문자열을 "변경"하고 싶을 땐?

  • StringBuilder: 단일 쓰레드에서 빠른 수정
  • StringBuffer: 멀티 쓰레드에서 안전한 수정
 

 

 

 

 

 

 

알게된 점

 

final로 수정을 불가하게 만들 수 있다.

그러나 final이 접근까지 못하게 하는 건 아니다.

기본 적으로 주소 값을 수정 못하게 하는 거라, 그 안의 내용은 수정이 가능할 수 있다.

 

ex) final <String> list = new ArrayList()<>;

 

list.add("hi");

list.add("bye");

 

가능하다는 뜻

'java' 카테고리의 다른 글

로깅 앤 디버깅  (0) 2024.06.09
증감 연산자  (0) 2024.01.23
하라는 indexof() 공부는 안하고 물리에 빠진 건에 대하여.  (0) 2023.05.19
내맘대로 디버깅(Debug)  (0) 2023.05.17
몰래 온 손님 toString()  (2) 2023.05.16