자바(Java) - String과 StringBuilder

지원·2024년 2월 6일

Java Programming

목록 보기
24/25

프로그래머스 - 문자열 뒤집기

문자열 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에서 자주 사용하는 메서드


출처: https://hongong.hanbit.co.kr/java-%EC%9E%90%EB%B0%94-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84-%EB%8B%A4%EB%A3%A8%EB%8A%94-string-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%B4%9D%EC%A0%95%EB%A6%AC/


자바에서 문자열을 합칠 때 '+'를 지양해야하는 이유

1. String 클래스는 변경 불가능한 immutable 클래스이다.

  • 한번 생성된 String 인스턴스가 갖고 있는 문자열은 읽기만 가능하고, 수정할 수 없다.
  • '+'연산자로 문자열을 결합하는 경우 인스턴스 내의 문자열이 바뀌는 것이 아니라 새로운 문자열이 담긴 String 인스턴스가 생성된다.

2. String과 달리 StringBuffer는 내용을 변경할 수 있다.

  • StringBuffer 클래스의 인스턴스를 생성할 때, 적절한 길이의 char형 배열이 생성되고, 이 배열은 문자열을 저장하고 편집하기 위한 공간(buffer)으로 사용된다.
  • 만약 버퍼의 크기가 작업하는 문자열의 길이보다 작을 경우 내부적으로 버퍼의 크기를 증가시키는 작업이 수행되며, 배열의 길이는 변경될 수 없으므로 새로운 길이의 배열을 생성한 후에 이전 배열의 값을 복사하는 방법으로 수행된다.

💡String '+' 연산이 일어나는 과정

자바에서 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를 사용하는 것이 좋다~

참조: https://dkswnkk.tistory.com/584

profile
우주 정복자

0개의 댓글