서론
해당 글의 내용은 굉장히 심플한 내용이고 기본적인 내용이기에 필자는 이 내용을 글로 정리를 할까 말까 고민을 했지만 이 시간에 정리 다 했겠다란 생각에 글쓰기 버튼을 눌렀다. 그럼 한번 알아보자.
Stringbuilder 기능
String으로 되어있는 문자열을 합칠 수 있다.
Stringbuilder 사용이유
우리는 String과 "+"를 이용하여 String을 합칠 수 있다. 그런데 StringBuilder를 사용하는 이유가 무엇일까? 그 이유는 아래와 같다.
우선 기존 방식인 String과 "+"을 사용한 방식을 살펴보자.
String str = "안" + "녕";
//str 결과 : "안녕"
StringBuilder sb = new StringBuilder();
sb.Append("안");
sb.Append("녕");
// sb.tostring() 결과 : "안녕"
우리는 위의 사용 예제를 구분 짓기 전에 String 객체는 변경이 불가능하다는 지식을 알고 접근을 해야한다. Java에서 String은 한번 생성 되면 내용을 바꿀 수 없다 .
그러하여 근데 위의 방식처럼 +을 사용하면 다른 문자열과 합쳐짐에 따라서 이전 문자열은 쓰레기 값이 되는 것이다. (GC가 이 후 처리)
그러하여 문자가 많아지면 많아질수록 메모리 낭비가 심한 String보다는 Java에서 지원해주는 Stringbuilder라는 문법을 사용하여 String형 내용들을 합치는 것이다.
이 Stringbuilder는 String과 달리 변경이 가능하며 글자를 붙일 때 새로운 객체를 생성하는 것이 아닌 바로 뒤에 Append 시켜주는 것이여서 메모리 관리에 String보다 효율적이다.
추가적으로 Stringbuilder를 사용하면 글자와 글자 사이에 인덱스로 글자를 추가 할 수도 있고 특정 인덱스의 문자를 변경할 수도 있다.이 외에도 여러 기능을 지원하니 더 상세한 내용은 공식 자료를 살펴보면 좋을 것 같다.
예제
Stringbuilder 클래스 라이브러리 만들기
public class StringBuilderAdd {
//멤버변수
private StringBuilder sb;
//생성자
public StringBuilderAdd(){
sb = new StringBuilder();
}
//append (null -> "" 처리)
public void append(String str)
{
sb.append(str != null ? str : "");
}
// System.getProperty("line.separator") 사용하여 줄 띄움
public void appendLine(String str)
{
//System.getProperty("line.separator") or "\n" 사용하여 줄 띄움
sb.append(str != null ? str : "").append(System.getProperty("line.separator"));
}
//tostring() 함수화 처리
public String toString()
{
return sb.toString();
}
}
StringBuilder를 많이 사용해야하는 상황일 경우에는 위와 같이 아예 클래스 라이브러리화를 시켜서 간편하게 사용하는 것이 사용 / 관리 하는데 용이할 것이라 생각하여 만들어보았다. 한 두번 사용하는것이라면 그냥 위의 내용에서 필요한 부분만 빼내어 사용하면 될 것이다.
** 해당 클래스에 정리되어있는 문법 외에 Stringbuilder.의 문법을 사용할 것이 있다면 해당 작성한 클래스 라이브러리에 함수를 추가해나가면서 사용하면 될 것 같다.
반응형
'Programming > Java' 카테고리의 다른 글
[JAVA] SOLID - 개방 폐쇄 원칙 OCP(Open Closed Principle) (0) | 2022.03.15 |
---|---|
[JAVA] SOLID - 단일 책임 원칙 SRP(Single Responsibility Principle) (3) | 2022.03.11 |
[JAVA] 문자열을 Reverse 하는 방법 (0) | 2022.03.11 |
[Java] 정적(Static) 변수와 메서드란? (개념 / 사용 장 단점 / 사용 시기 / 예제) (1) | 2022.01.20 |
입력 클래스 정리 (Scanner, BufferedReader, StringTokenizer) (1) | 2021.09.30 |
댓글