문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.
class Solution {
public String solution(String my_string) {
String answer = "";
for(int i = my_string.length() - 1; i >= 0; i--){
char ch = my_string.charAt(i);
answer += ch;
}
return answer;
}
}
자바에서 String '+'연산자는 Java 컴파일러에서 구현되며 컴파일 타임에 컴파일 전, 내부적으로 StringBuilder클래스를 만든 후 다시 문자열로 반환한다.
public class Test {
public static void main(String[] args) {
String str = "우주비행사";
str += "노틸러스";
String str2 = new StringBuilder("우주비행사").append("노틸러스").toString();
}
}
이것을 반복하면
public class Test {
public static void main(String[] args) {
String num = "5";
for(int i = 1; i <= 10000; i++){
num += "i";
}
// 위와 동일
String num2 = "5";
for(int i = 1; i <= 10000; i++) {
num2 = new StringBuilder(num2).append(i).toString();
}
}
}
반복문의 횟수만큼 StringBuilder객체가 생성되고 append()와 toString() 메서드 호출이 발생한다.
따라서 성능이 저하될 수 밖에 없고, 메모리 낭비가 심해진다.
public class Test {
public static void main(String[] args) {
final StringBuilder a = new StringBuilder();
for(int i = 0; i < 10000; i++) {
a.append();
}
final String b = a.toString();
}
}
결론❗
많은 문자열 합치기 연산이 필요하다면 StringBuilder를 사용하는 것이 좋다~