일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 리눅스
- javabasic
- 디자인패턴
- 직장인자기계발
- 자바기본
- ncs
- DesignPattern
- 패스트캠퍼스
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- js
- 자바예제
- 데이터베이스
- 웹
- 직장인인강
- linux
- 자바
- 패캠챌린지
- 자바연습문제
- 재택근무
- DB
- Spring
- 스프링
- 디자인
- String
- java
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- 국비
- 자바기초
- java기초
- 패스트캠퍼스후기
- Today
- Total
FIF's 코딩팩토리
패스트캠퍼스 챌린지 37일차 본문
String, StringBuilder, StringBuffer 클래스
Java에서 문자열을 다루는 대표적인 클래스로 String, StringBuffer, StringBuilder가 있다.
연산이 많이 않을때는 특별한 이슈가 발생할 가능성이 거의 없지만, 연산횟수가 많아지거나 멀티스레드, 경쟁 상태(Race Condition) 등의 상황이 자주 발생하면 각 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용해야 한다.
String과 StringBuffer와 StringBuilder의 기본적인 차이는 String은 불변(Immutable), StringBuffer와 StringBuilder는 변함(Mutable) 이다.
String
String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다.
concat 메서드 또는 + 연산자를 통해 기존에 생성된 String 클래스 객체 문자열에 다른 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 것이 아니라, 새로운 String 객체를 만든 후 새 String 객체에 연결된 문자열을 저장하고 그 객체를 참조하도록 한다.
즉, String 클래스 객체는 Heap 메모리 영역(가비지 컬렉션이 동작하는 영역)에 생성하고 한번 생성된 객체의 내부 내용을 변화시킬 수 없다. (기존 객체가 제거되면 Java의 가비지 컬렉션이 회수한다.)
String 객체는 이러한 이유로 문자열 연산이 많은 경우 성능이 좋지 않다.
StringBuffer와 StringBuilder
StringBuffer와 StringBuilder는 String과 다르게 동작한다. 문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우 기존의 버퍼 크기를 늘리며 유연하게 동작한다. StringBuffer와 StringBuilder 클래스가 제공하는 메서드는 서로 동일하다.
StringBuffer와 StringBuilder의 차이점은 동기화 여부이다.
StringBuffer는 각 메서드별로 Synchronized Keyword가 존재하여, 멀티스레드 환경에서도 동기화를 지원한다. 그러나 StringBuilder는 동기화를 보장하지 않는다.
멀티스레드 환경이라면 값의 동기화 보장을 위해 StringBuffer를 사용하고, 단일스레드 환경이라면 StringBuilder를 사용하는 것이 좋다. 단일 스레드환경에서 StringBuffer를 사용한다고 문제가 되는 것은 아니지만, 동기화 관련 처리로 인해 StringBuilder에 비해 성능이 좋지 않다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'패스트캠퍼스 챌린지' 카테고리의 다른 글
패스트캠퍼스 챌린지 39일차 (0) | 2022.03.03 |
---|---|
패스트캠퍼스 챌린지 38일차 (0) | 2022.03.02 |
패스트캠퍼스 챌린지 36일차 (0) | 2022.02.28 |
패스트캠퍼스 챌린지 35일차 (0) | 2022.02.27 |
패스트캠퍼스 챌린지 34일차 (0) | 2022.02.26 |