우테코 프리코스 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을 활용해 포멧에 맞는 문자열을 더해줬다.
이렇게 하는 편이 나처럼 +로 이어붙이는 것 보다 가독성이 훨씬 좋은 것 같다.
'Java' 카테고리의 다른 글
Java 정렬 (0) | 2023.12.25 |
---|---|
Java에서의 예외처리 (0) | 2023.12.15 |