본문 바로가기
혼자 공부하는 것들/JAVA

JAVA) StringBuffer와 String의 차이점과 쓰는이유

by applepick 2020. 12. 6.
반응형

알고리즘 문제를 자바로 풀면서 문득 문자열을 이용할 때 어떻게 하면 조금 더 메모리를 효율적으로 쓸수있을까라는 생각이 들었다. 

 

일단 코드를 보자.

StringBuffer를 사용한 코드다.

이런식으로 StringBuffer를 선언해주고 문자열을 넣어주는방식이다.

 

그냥 String을 사용한 코드를 보자.

이런식으로 String s라는 변수를 선언하여 값을 넣어주었다. 결과형식은 똑같다. 하지만 메모리측면에서는 비효율적이다.

 

StringBuffer 객체는 단 한번만 생성된다. String 자료형은 + 연산이 있을때마다 새로운 String객체가 만들어진다. 저기코드에서는 String 자형 객체가 3번이나 생성된다.

String 자료형은 한번 값이 생성되면 그 값을 변경할 수가 없다. 이렇게 값을 변경할 수 없는 것을 immutable 하다고 한다. trim, toUpperCase 등의 메소드를 보면 문자열이 변경되는 것 처럼 생각 될 수도 있겠지만 해당 메소드 수행 시 또 다른 String 객체를 생성하여 리턴할 뿐이다. StringBuffer 는 이와 반대로 값을 변경할 수 있다(mutable 하다). 즉 한번 생성된 값을 언제든지 수정할 수 있다.

그렇다고 무조건 StringBuffer를 사용하는 것이 좋은 선택일까?

 - 그것은 아니다. StringBuffer는 String 자료형에 비해 무거운편에 속한다. StringBuffer은 문자열이 많이 바뀌고 추가나 변경이 많은 경우 쓰는 것을 고려해보고 문자열 변경이 잘 없는경우에는 String을 사용하는 것이 조금 더 유리하다. 

 

프로그램의 알고리즘을 구성할 때, 판단이나 어떠한 상황에서 좀 더 메모리를 효율적으로 사용되는지 고려하는 습관을 길러야겠다. 끝!

반응형

댓글