반응형

[JAVA] String 참조값 비교와 StringBuilder, StringBuffer 사용 이유


 

String에서 + 연산을 사용하면 안 되는 이유

StringBuilder, StringBuffer를 사용하는 이유

 


String에서 + 연산을 사용하면 메모리를 추가로 사용한다.

 

 

str1, str2 는 같은 곳을 참조함 (String pool에서의 같은 위치)

 

str3는 String을 + 연산을 사용해서 "abc"를 만들었는데도 String pool의 "abc"를 참조하지 않는다.

+연산을 String에서 하게 되면 String pool에서 찾지 않고 마치 new("abc")를 한 것처럼 "abc" 새로운 메모리가 생성된다.

이는 GC의 부담, 메모리의 낭비를 야기한다.

그러므로 String에서는 + 연산을 지양해야 함

 

== 연산자가 아닌 equals()를 사용하면 문자열은 전부 같으므로 결과는 모두 true이다.

 


StringBuilder, StringBuffer

 

 

StringBuilder도 내부적으로 toString()을 처리할 때 new 연산자를 사용하므로 새로운 메모리가 생성되지만,

toString()할 때 new 연산자를 단 한번 사용하기 때문에 여러 문자 결합에서 이점을 갖는다.

 


 

 

반응형
반응형

[JAVA] 자바 String, StringBuilder 클래스 활용


 

자바를 사용하다 보면 문자열을 처리해줘야 할 경우가 많이 생긴다.

이때 String과 StringBuilder 클래스를 활용하면 좋다. 그리고 경우에 따라 String을 써야 할 경우와 StringBuilder를 써야 할 경우가 구분된다.

어떤 경우에 String과 StringBuilder를 맞게 써야 하는지 정리하고, 함수들의 활용법을 정리하고자 한다.

 


String과 StringBuilder의 구분

 

String 클래스와 StringBuilder는 용도가 다르다.

 

String은 클래스 명 그대로 문자를 이용해서 활용을 해야 할 때 사용하는 클래스이다.

* 문자를 변경, 검색, 반복, 대소문자 변환, 비교, 분리 등

"문자 특성"을 이용하기 위해 사용하는 클래스이다.

 

StringBuilder문자열을 배열처럼 관리하며 추가, 삭제, 삽입을 용이하게 하기 위해 사용한다.

* 문자를 추가, 삭제, 삽입, 뒤집기 등

"배열 index"를 이용하여 문자를 관리하는 클래스이다.

 

문자 특성을 이용한 작업을 처리할 땐 String 클래스를 이용하고, 변경이 빈번한 문자들을 배열처럼 관리하고 싶을 때 StringBuilder를 이용한다.

 

* String 클래스는 함수를 사용하면 반환 값을 사용해야 하므로 대입 연산자를 이용해야 한다.

ex) str = str.trim();

* StringBuilder는 내부적으로 추가, 삭제, 삽입, 변경을 처리하기 때문에 반환 값을 사용할 필요가 없다.

ex) sb.append(var);

 


자주 사용하는 String과 StringBuilder의 공통 함수

 

  • length() : 문자열의 총길이를 반환한다.
  • charAt(index) : index 위치에 해당하는 문자를 반환한다.
  • indexOf(String) : 문자열이 위치하는 index를 반환한다. (String에서는 char도 가능하다.)
  • substring(from, to) : from부터 to까지 해당되는 문자열을 반환한다. (to index는 포함하지 않는다.)

 


자주 사용하는 String 클래스 함수

 

비교

  • compareTo(String) : String과 비교 후 String보다 문자가 작다면 1, 크다면 -1, 같다면 0을 반환한다.
  • compareToIgnoreCase(String) : 대소문자 차이를 무시하고 비교한다.
  • equals(Object) : Object와 비교 후 같다면 true, 다르면 false를 반환한다. String 클래스는 문자열을 비교한다.

 

검색

 

  • contains(CharSequence) : CharSequence가 포함되어있는지 확인한 후 포함하면 true, 포함하지 않으면 false를 반환한다.
  • startWith(String) : String으로 시작하면 true, 아니면 false를 반환한다.
  • endWith(String) : String으로 끝나면 true, 아니면 false를 반환한다.

 

 

변환

 

  • concat(String) : String과 합친 후 합친 문자열을 반환한다.
  • repeat(int count) : count만큼 반복 후 반환한다.
  • replace(char or CharSequence, char or CharSequence) : char, CahrSequence 둘 다 가능하며 앞 인자를 뒷 인자로 변경한다.
  • toLowerCase() : 소문자로 변환 후 반환한다.
  • toUpperCase() : 대문자로 변환 후 반환한다.
  • trim() : 문자열의 양쪽 공백을 제거 후 반환한다.
  • toCharArray() : char 배열 자료형으로 반환한다.

 

 

분리, 결합

  • split(String regex) : regex를 기준으로 자른 후 String []로 반환한다.
  • String.join("str" ,String[]) : str을 사이에 넣어주며 String [] 배열을 합친다.

 

* CharSequence => String, StringBuilder, StringBuffer 등

 


자주 사용하는 StringBuilder 클래스 함수

 

추가

  • append() : StringBuilder에 추가한다.

 

삭제

  • delete(from, to) : from부터 to까지 해당되는 index들을 제거한다. (to는 제외)
  • deleteCharAt(index) : index에 해당하는 문자 하나를 제거한다.

 

삽입

  • insert(index, Object) : index위치에 Object를 추가한다.

 

변경

  • replace(from, to, String) : from, to 부분을 String으로 변경한다. (to는 제외)
  • setLength(len) : len만큼 길이를 변경한다. (len을 0으로 설정하면 내부가 비워지는 효과를 볼 수 있다.)
  • setChar(index, char) : 해당 index를 char로 변경한다.
  • reverse() : 문자열을 뒤집는다.

 

주의: StringBuilder는 equals()가 주소 비교를 한다.  toString()을 해야 한다.


자바 문서

https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html#concat(java.lang.String) 

 

String (Java SE 15 & JDK 15)

All Implemented Interfaces: Serializable, CharSequence, Comparable , Constable, ConstantDesc public final class String extends Object implements Serializable, Comparable , CharSequence, Constable, ConstantDesc The String class represents character strings.

docs.oracle.com

https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/StringBuilder.html

 

StringBuilder (Java SE 15 & JDK 15)

All Implemented Interfaces: Serializable, Appendable, CharSequence, Comparable public final class StringBuilder extends Object implements Serializable, Comparable , CharSequence A mutable sequence of characters. This class provides an API compatible with S

docs.oracle.com

 

반응형

+ Recent posts