반응형
1. 문제 인식
실무에 투입되서 특정 조건에 따라 분기하여 query 를 문자열로 생성해야 했다. 동적 쿼리인데, 이를 문자열로 직접 생성해야 했다.
나는 당연히 String 에 더하는 방식을 생각했다. 그렇게 작성하고 나서 선배님이 담당하시는 다른 부분의 코드를 보니 StringBuilder 로 되어있었다. 왜 String 을 더하지 않고 StringBuilder 를 사용하셨을까? 에서 출발했다.
특정 조건에 따라 분기하여 문자열을 생성해야 할 때, 어떻게 생성해야 할까?
2. StringBuilder가 탄생한 배경
String은 불변(immutable) 객체이다.
아래와 같이 2개의 String 객체가 존재할 때 두 문자열을 연결해야 하는 경우가 발생한다.
String str1 = “aaaa123”;
String str2 = “bbbb456”;
그럴 때 보통은 아래와 같은 방식을 떠올린다.
String str3 = str1 + str2;
불변객체이므로 String 객체를 더하는 연산은 메모리 할당과 메모리 해제를 발생시키며, 연산하는 그 수가 많아진다면 성능적으로 좋지 않다.
그래서 나온 것이 StringBuilder이다.
StringBuilder는 String과 달리 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르고 상대적으로 부하가 적다.
따라서, 문자열을 더해야 하는 상황이 발생할 경우 StringBuilder를 사용하도록 하자.
3. 사용법
// StringBuilder 생성
StringBuilder sb = new StringBuilder();
// append() 메소드를 이용하여 문자열을 더한다
sb.append("id = :v1");
sb.append(" and ");
sb.append("mail_address = :v2")
// toString() 메소드로 만들어진 문자열을 출력
log.info(sb.toString());
※ query 등 특정 조건에 따라 문자열을 생성해야 할 때 효과적으로 사용할 수 있다.
반응형