일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- docker
- Naver Cloud
- DBDocs
- AssertJ
- NooBLoL
- papago
- Database
- NaverCloudPlatform
- ngrinder
- navercloud
- 네이버클라우드
- Pinpoint
- Naver Cloud Platform
- F-Lab
- Thymeleaf
- 네이버 클라우드
- React
- object storage
- 회고
- spring boot
- Enum
- spring
- OrientalUnity
- NCP
- ncloud
- 에프랩
- junit
- mybatis
- Java
- Scheduler
- Today
- Total
DevJong12
String, StringBuilder, StringBuffer 본문
과거에 면접을 보면서 이런 기본적인 것조차도 몰라서 면접에서 탈탈털렸던 기억이 있어서
글을 썻던 기억이 있다.
근데 다시보니 무슨말인지도 모르곘고, 설명도 많이 틀린것 같아 옜날보다 나아진 지금 다시 글을 적어보고자 한다.
String, StringBuilder, StringBuffer 세개는 모두 java.lang 패키지에 구성이 되어 있으며 선언은 아래와 같다.
String
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
StringBuffer
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
StringBuilder
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
구동 방식
String
가장느림!
+연산의 경우 컴파일러에서 연산작업을 진행하며 StringBuilder.append()로 변환이 되어 작업이 진행된다.
StringBuilder, StringBuffer와 같이 append를 사용하는데 왜느려! 라 할 수도 있으나, 느린이유는
새로운 객체를 생성한 이후에 append작업을 진행하기 때문이다.
문자열을 StringBuilder로 생성하고, 이후 append...
더할때 마다 새로운 객체를 생성하며, 해당 객체는 Heap메모리를 사용한다.
많은 사용이 있을 때마다 많은 Heap메모리를 사용하게 된다. 그말은 더 많은 량의 GC의 활동을 유발하게 되고
메모리의 관리에 있어서 비효율적이게 될 수 밖에 없다.
StringBuilder(계산방식은 Buffer와 같은AbstractStringBuilder클래스를 태우기 때문에 동일 할 것으로 판단 된다)
기본에 생성이 되어 있는 객체에서 바로 append를 진행하게 된다.
결국 String을 덧셈연산과 같은 코드를 진행하게 된다.
하지만 String은 덧셈연산을 진행할 때마다 객체를 새로이 생성진행하면서 Heap메모리의 많은 사용량을 유발했지만,
StringBuilder, Buffer의 경우에는 이미 생성이 되어있는 객체를 재활용하여 연산하여 진행을 하는 결과로 인해 코드의 실행과정도
줄어들고, 메모리도 효율적인 관리가 가능해진다.
일단 속도에서부터 차이가 크게 발생하니 문자열의 덧셈이 필요한 경우에는 StringBuilder, StringBuffer의 append메소드를 사용하여
제작을 하자..
'Java,Spring > Java' 카테고리의 다른 글
Java의 람다식과 변수의 관계 (0) | 2022.08.22 |
---|---|
[Tomcat] JAVA_HOME, Tomcat설정과 관련한 오류사항 정리 (0) | 2022.06.19 |
[Tomcat] JVM설정 옵션 "PermSize", "MetaspaceSize" (0) | 2022.05.30 |
JVM의 로케일 Charset과 관련한 오류사항 기록 (0) | 2022.05.20 |
[작성중]Java Virtual Machine (0) | 2022.05.05 |