Java

StringBuilder, StringJoiner, String.format

메오백 2023. 10. 29. 23:38

우테코 프리코스 1주차 미션을 하면서 나는 +를 이용해 문자열 생성을 했다. 

리뷰어가 StringBuilder, StringJoiner, String.format을 사용해서 관리하는게 어떻겠냐고 조언을 해줬다. 

그래서 각 내용에 대해 간단하게 정리해보고자 한다.

 

 

먼저 String을 +를 사용해 이어붙일 때의 성능상의 단점을 알아보자. 

String은 불변 객체다. 즉 한번 생성하면 바꿀 수 없다. 

+를 이용해 하나의 문자열을 다른 문자열과 연결하게 되면 새 문자열이 생성되고 이전 문자열은 가비지 컬렉터로 돌아간다. 

따라서 여러 번의 이어붙이기 연산을 통해 String을 이어붙인다면 메모리 낭비가 발생하게 된다. 

 

가독성 측면에서도 String을 단순히 +로 이어붙이기보다는 StringBuilder나 StringJoiner를 쓰는 게 좋다고 생각한다. 


StringBuilder

		StringBuilder st = new StringBuilder();
		st.append("문자열 ").append("연결");
		
		// 문자열에 넣을 때 toString을 붙여준다 
		String str = st.toString();
		
		System.out.println(st);
		System.out.println(str);

StringBuilder는 문자열을 이어붙일 때 사용할 수 있다. 사용법은 간단하다. 

append로 이어붙일 수 있으며 String에 넣을 때는 toString을 사용한다.

출력은 그냥 StringBuilder 자체를 출력할 수도 있다. 

 

StringJoiner

 

		StringJoiner sj = new StringJoiner("-");
		sj.add("안");
		sj.add("녕");
		sj.add("하");
		sj.add("삼");
		
		String str = sj.toString();
		
		System.out.println(sj);
		System.out.println(str);

StringJoiner는 문자열을 이어붙일 때 구분자를 설정할 수 있다. 

따라서 공백이나 구분자를 붙여야 할 때 유용하게 사용할 수 있다.

 

String.format

String.format()은 String의 static 메서드로 문자열의 형식을 설정할 수 있다.

public static String format(String format, Object... args);

첫번째 인자로 format을, 그 뒤에 가변 인자로 format에 넣을 인자들을 넣는다. 

format에 맞는 문자열을 반환한다. 

사용할 수 있는 format은 매우 많고 대표적으로 %d로 10진수 정수, %s로 문자열, %f로 실수이다. 

 

사용 예시는 나를 리뷰해준 분이 사용한 방식을 예로 들고자 한다. 

    public static final String BALL_FORMAT = "%d볼";
    public static final String STRIKE_FORMAT = "%d스트라이크";
    public static final String NOTHING_FORMAT = "낫싱";

이런 식으로 format을 지정했다. 

        if (ball != 0) {
            stringJoiner.add(String.format(BALL_FORMAT, ball));
        }
        if (strike != 0) {
            stringJoiner.add(String.format(STRIKE_FORMAT, strike));
        }
        return stringJoiner.toString();

그리고 이런 식으로 StringJoiner에 String.format을 활용해 포멧에 맞는 문자열을 더해줬다. 

이렇게 하는 편이 나처럼 +로 이어붙이는 것 보다 가독성이 훨씬 좋은 것 같다.