Immutable
- 생성 후 변경 불가능한 객체
- set 메서드가 없고 void 리턴 타입의 메서드도 존재하지 않음
- 멤버 변수 값 변경 불가능
- 종류 : String, Boolean, Integer, Float, Long 등
String
- 문자열을 나타내는 클래스. 문자열과 관련된 작업을 위한 메서드 제공
- 모든 문자열 리터럴은 String 클래스의 인스턴스로 구현
- final 클래스이므로 상속 불가. 하위 클래스 가질 수 없음
- 인스턴스가 한 번 생성되면 그 값은 읽기만 가능하며 변경 불가
- 문자열 변경시 새로운 String 인스턴스가 생성되며, 기존 인스턴스는 Garbage Collector의 대상이 됨
- "+" 연산자를 이용하여 문자열 결합 가능. 다른 클래스 객체와 "+"를 사용하면 자동으로 String 클래스로 변환
- "+" 연산자를 이용하여 문자열이 결합되면 내용이 합쳐진 새로운 String 인스턴스로 생성됨
StringBuffer / StringBuilder 클래스
- String, StringBuilder, StringBuffer 클래스는 모두
Serializable, CharSequence, Comparable 인터페이스가 구현된 final class
- Serializable : 직렬화를 위한 인터페이스
- CharSequence : 순서적으로 문자를 읽어낼 수 있는 메서드 등을 제공하는 인터페이스
- Comparable : 순서를 정의하기 위한 인터페이스
- 문자열을 가변적으로 사용할 때 이용
(String 클래스를 가변적으로 많이 사용할 경우 힙 메모리 영역에 임시 Garbage가 많이 생겨 성능에 치명적인 영향을 끼침)
- 둘의 차이는 동기화의 유무. StringBuffer는 동기화를 지원하여 멀티 쓰레드 환경에서 안전하다.
(String도 불변이기에 안전) 대신에 단일 쓰레드 환경에서는 StringBuilder 성능이 더 뛰어남
- append() 및 insert() 메서드를 사용하여 기존 객체의 문자열 버퍼에 추가 및 삽입
- 버퍼가 가변적인 길이를 가지므로 객체 생성 시점에 크기, 값 등을 지정할 수 있고 실행 시간에 버퍼 크기를 바꿀 수 있음
'Tech Interview > Java' 카테고리의 다른 글
스레드와 동기화 (0) | 2023.02.06 |
---|---|
제네릭과 컬렉션 (0) | 2023.02.05 |
예외 처리 (0) | 2023.02.04 |
객체 지향 (0) | 2023.02.01 |
자바 기초 (0) | 2023.02.01 |