서론개발을 하다가 멘토님께 알게 된 사실을 정리한다. Show 사실 나는 문자열 붙이기를 할 때, '+' 를 활용하면 메모리 낭비가 너무 커질 수 있어 지양해야한다는 생각을 가지고 코드를 작성해왔다. 이 주제는 상당히 오래전부터 자바를 공부하는 우리 컴공생들에게 (면접질문 등으로) 자주 논의되던 이야기였다. 문자열 붙이기에 '+' 를 이용하지말아야한다는 근거String 객체는 불변 객체이다. 즉 한번 객체가 생성되면 그 객체 내용을 변경하는건 불가능하다. 그래서 우리가 한 문자열을 다른 문자열과 합치게 되면 기존 문자열의 내용이 변하는게 아니라 새로운 문자열이 생성된다. 그리고 이제 참조되지않는 (아래 그림의 경우 "Hello") 문자열은 더이상 어느 코드에서도 참조되지않으므로 GC(Garbage Collector)에 보내져 소멸을 기다린다. 힙 영역을 차지하고 있는 문자열의 주소를 스택의 str 이 가리킨다.만약 문자열을 백만개 합친다면?문자열을 백만개 합친다면 쓸모없는 문자열이 100만 - 1 개 만큼 생겨나게 될 것이고 이는 컴퓨터 자원의 당연히 큰 낭비다. 그래서 StringBuilder 를 써야 한다StringBuilder 는 가변적인 문자열 객체처럼 동작하고,
그래서 나는 당연히도, ㅈ간단한 문자열 합치기에도 StringBuilder 를 이용해서 해왔다. 그러나 그러지 않아도 된다하지만 JDK1.5 출시 이후부터 (출시일은 2004년 9월 4일이다...) 결론*코드 가독성을 위해 그냥 '+' 로 문자열을 합치자. 단 loop 내 문자열 합치기는 예외 * 그러나 예외도 존재한다. 만약 loop 안에서 문자열을 합쳐야하는 경우에는 java compiler 가 나는 이
사실을 모르고, 2004년도부터 개선되어온 부분에 대해서 알지 못한채 '+' 를 사용한 문자열 붙이기를 죄악시했다. https://dzone.com/articles/string-concatenation-performacne-improvement-in-ja 서론자바에서 '+' 연산을 통한 문자열 합치기를 지양하라는 흥미로운 주제를 보게 되어 글을 작성하게 되었습니다. [Java] StringBuffer와 StringBuilder 서론 [Java] String 클래스 서론 c언어 같은 경우 문자열을 char형의 배열로 다루었지만 자바에서는 문자열을 위한 클래스를 제공합니다. 그것이 바로 String 클래스인데, String 클래스는 문자열을 저장 dkswnkk.tistory.com [Java] String 클래스 서론 c언어 같은 경우 문자열을 char형의 배열로 다루었지만 자바에서는 문자열을 위한 클래스를 제공합니다. 그것이 바로 String 클래스인데, String 클래스는 문자열을 저장하고 이를 다루는데 필 dkswnkk.tistory.com 간단하게 다시 요약하면 아래와 같습니다. 1. String 클래스는 변경 불가능한 immutable 클래스이다.
2. String과 달리 StringBuffer는 내용을 변경할 수 있다.
그렇다면 우리는 왜 자바에서 '+' 연산을 통한 문자열 합치기를 지양해야 하는지 한번 알아보겠습니다. String '+' 연산이 일어나는 과정stackoverflow 참조Java에서 Stirng '+' 연산자는 Java 컴파일러에서 구현되며 컴파일 타임에 컴파일 전 내부적으로 StringBuilder 클래스를 만든 후 다시 문자열로 반환합니다. 즉 아래의 코드처럼 동작합니다.
벌써부터 왜 사용하면 안되는지 감을 잡으신 분도 있으시겠지만 조금 더 확실히 비교를 해 봅시다.
위 코드처럼 반복문 안에서 '+' 연산을 수행한다면 반복문의 횟수만큼 StringBuilder 객체가 생성되고 append()와 toString() 메서도의 호출이 매번 발생하게 됩니다.
그렇기에 위와 같이 더하기 연산이 많이 일어나는 경우 처음부터 StringBuilder 클래스를 사용하여 문자열을 합치는 게 더 좋은 방법입니다. StringBuilder vs String 성능 측정
한번 직접 코드를 작성하여 처음부터 StringBuilder를 사용한 경우와 String '+' 연산의 수행 속도를 비교해 보았습니다. 실행 결과위와 같이 String '+' 연산을 사용하면 StringBuilder로 바꾸는 과정이 일어나기 때문에 반복문의 횟수만큼 StringBuilder 객체가 만들어지고 '+' 연산 내부적으로 많은 일들이 일어나서 예상대로 시간이 많이 걸리는 것을 볼 수 있습니다. 참고GitHub - wjdrbs96/Today-I-Learn: Today I Learned. 그날 그날 모든 활동들을 정리 :octocat: Today I Learned. 그날 그날 모든 활동들을 정리. Contribute to wjdrbs96/Today-I-Learn development by creating an account on GitHub. github.com 자바에서 String 다룰 때 오해와 진실 2018년 5월 18일 from blog.hazard.kr 어자피 다들 먹고사는데 자바 안다뤄본 사람 있나? 어? 자바 안해봤어? 넌 그럼 축복받은 거야. 축하한다. 어쨌든,... dev.to |