728x90
1. [String은 불변 객체다]
- 불변 객체(immutable)하기 때문에 +같은 concat연산을 수행하면 원본을 변경하지 않고, 새로운 String 객체를 생성한다. 이로 인해 메모리 공간의 낭비가 발생하고, 성능이 떨어진다.
- JDK 1.5부터는 String 객체를 +연산자로 연결할 때, 컴파일 타임에서 StringBuilder로 변경된다고 한다.
- 불변 객체이기 때문에 멀티 쓰레드 환경에서 동기화를 신경쓰지 않아도 됨다.
- 문자열 연산이 적고, 조회가 많은 상황에서 쓰기 좋다.
2. [StringBuilder와 StringBuffer는 변경 가능 객체라는 공통점이 있지만 멀티쓰레드 지원 유무의 차이가 있다]
- 공통점
- 변경 가능 객체(Mutable)한 객체이다. 따라서 문자열 연산시 처음 만든 객체를 이용해 문자열을 변경한다.
- 문자열 변경이 자주 발생하는 상황에서 성능적으로 유리하며 쓰기 좋다.
- 차이점
- 동기화 지원 유무
- StringBuilder: Thread-Safe (X). 멀티 쓰레드 지원 ⊃ 동기화(Synchronization) 지원 (X).
- StringBuffer: Thread-Safe (O). 멀티 쓰레드 지원 ⊃ 동기화(Synchronization) 지원 (O).
* 동기화(Synchronization) :
멀티 쓰레드 지원방식 중 하나로 여러 스레드가 동시에 접근할 때 순차적으로 자원에 접근하도록 함.
<동작방식>
① synchronized 키워드: JAVA에서 자원을 보호하는 대표적인 방법으로, 한번에 하나의 스레드만 해당 코드 블록에 접근할 수 있도록 함
② (내장-자동) 락(Lock): 한 스레드가 공유 자원에 대한 락을 획득하면, 다른 스레드는 락이 해제될 때까지 자원에 접근하지 못함
* 멀티 쓰레드 지원방식 :
▪️ 동기화(Synchronization)
▪️ 락 (Locks): 명시적인 락 사용 ex.ReentrantLock
▪️ Atomic Variables: 원자적 연산 제공 클래스 사용 ex.AtomicInteger,AtomicReference
▪️ Thead-Safe Collections: 스레드 안전한 자료 구조 사용 ex.ConcurrentHashMap,CopyOnWriteArrayList
728x90
'백앤드 > JAVA' 카테고리의 다른 글
[JAVA] ==는 주소 값, equals는 값 비교 (0) | 2024.10.18 |
---|---|
[JAVA] 객체지향 프로그래밍 (OOP,Object Oriented Programming) (0) | 2024.10.18 |
[JAVA] 자바는 Call by Value방식이다 (0) | 2024.10.18 |
[JAVA] 컴파일 과정+JVM (2) | 2024.10.18 |
[JAVA] 입출력 포맷 (0) | 2023.07.17 |