본문 바로가기

Java

String에 대해 알게된 것 기록

728x90

알고리즘 문제풀고 출력 값 만들려고 sb.append(String.format) 사용했는데 메모리, 시간 많이 잡아먹음
다른사람 코드 보니 sb.append( " + " + " + " ) 이렇게 해서, 나도 따라해보니 시간, 메모리 많이 줄어들음
근데 이것도 좋은방법이아니라고함


왜 그런가하고 찾아보니 

java에서 string은 불변객체로 + 연산등으로 상태를 바꾸면 새로운 string객체가 만들어짐,

+연산 n번하면 n+1개 만들어지는것.


이러면 메모리 장난아니게 잡아먹는데, stringbuilder로 해결가능


stringbuilder는 가변객체로 상태 바꿀때 새로운 객체 할당하는게 아니라 그 객체에 이어서 씀. -> append메소드

근데 stringbuilder에다가 + 연산으로 string만들고 append로 붙여쓰면, jvm이 +연산 먼저 수행하는데, 이 + 연산수행할 때 내부적으로 stringbuilder 쓰고 toString으로 반환한다고함. 결과적으로 stringbuilder 내에 stringbulider를 쓰는 비효율적인 구조가 되어버림

 

거기에 한술 더떠서 나는 stringbuilder 내에서 String.format을 써버렸는데, 이 String.format은 내부적으로 Formatter 객체 생성하고 format() 처리한 뒤에 새로운 String객체를 반환한다고함. 그러니 내가 한건 매우매우 비효율적인 코드였고 그렇기에 메모리, 시간을 많이 잡아먹은것.

 

출력구조 복잡할때 format쓰면 코드 깔끔해서 좋았는데 지양하도록해야겠다. stringbuilder 쓸거면 append를 적극활용해야겠다.

 

 

틀린내용 있으면 지적해주세요 감사합니다.


🔹 1. Java 공식 문서 (Oracle Docs)

🔹 2. Java Language Specification (JLS)

728x90
반응형

'Java' 카테고리의 다른 글

자바 : 상속  (0) 2024.02.13
자바 : static, final  (0) 2024.02.12
자바 : 객체 배열과 메소드  (0) 2024.02.09
자바 : 생성자  (0) 2024.02.07
자바 : 클래스와 객체  (0) 2024.02.06