본문 바로가기
자바(Java)

자바 중급4 - 스트링 클래스 문제점

by codeyaki 2022. 1. 14.
반응형

해당 강의를 듣고 정리한 것입니다

https://programmers.co.kr/learn/courses/9

 

자바 중급

평가 5.0 17개의 평가 ★★★★★17 ★★★★0 ★★★0 ★★0 ★0 ds02168 2021.08.20 15:37 Yeonggwang 2021.06.28 01:48 강신우 2021.04.23 10:20 HyeonWoo Jeong 2021.04.08 17:12 이용준 2021.01.26 19:23 리뷰 더보기

programmers.co.kr


스트링 클래스 문제점

String클래스는 문자열을 다룰 때 사용하는 클래스, 불변 클래스이다.

 

문제가 없는 경우

public class StringExam2 {
	public static void main(String[] args) {
		String str1 = "hello world";
		String str2 = str1.substring(5);
		System.out.println(str1);
		System.out.println(str2);
	}
}

>> 
hello world
 world

  • substring메서드는 5번째부터 문자열을 잘라서 새로운 문자열을 반환하는 메서드
  • 그러므로, 기존의 str1은 전혀 변화 없다.

String클래스를 사용할 때 문제가 발생하는 경우

public class StringExam2 {
	public static void main(String[] args) {
		String str1 = "hello world";
		String str2 = str1.substring(5);
		String str3 = str1 + str2;
		System.out.println(str3);
	}
}

>>hello world world

해당코드의 내부적으로 해당 코드와 같이 실행됨.

String str4 = new StringBuffer().append(str1).append(str2).toString();

 

 

String + String을 반복해서 사용한다면??

String str5="";
for(int i = 0; i<100; i++) {
	str5 =str5 +"*";
}

해당 코드에선 new 연산자가 100번 사용된다!! 그러면 그만큼 성능이 느려짐!!

즉, Stirng + String을 사용하는 만큼 객체가 새로 생성됨 => 반복해서 사용 시 성능에 문제가 생길 가능성이 있음

따라서 String을 유동적으로 사용해야하는 객체라면 StringBuffer를 사용해서 생성하자!!!

StringBuffer str5 = new StringBuffer();
for(int i=0; i<100; i++) {
	str5.append("*");
}

 

해당 코드처럼 바꾸어 사용해야 한다!!!

반응형