오늘은 String과 StringBuilder를 알아보려 한다.
간단한 것들을 작업할때는 무엇을 사용해도 괜찮지만 알고 있으면 좋기 때문에 정리해본다.
String과 StringBuilder의 차이는 변하느냐 아니냐의 기준이다!
String str = new String("abc");
기본적으로 String을 사용할때 선언하는 방법이다.
String str = "abc"는 왜 안써요?
String str = "abc" 와 같이 안하는 이유는 String str2 = "abc"가 있을때 텍스트가 같기 때문에
같은 저장공간을 가리키기 때문에 하나를 수정하면 다른게 같이 바뀐다. 그렇기 때문에 위에 선언한 내용으로 사용한다.
String str = "abc";
String str2 = "abc";
String VS StringBuffer
다시 돌아와서 문자열을 가지고 연산을 하기에 좋은 이유를 알아보자!
String은 위에서 말한것처럼 변하지 않는다. 이말은 문자열 연산을 하면 원래 있던 값에 이어 붙이는것이 아닌 원래값과 이어 붙이는 값을 다른 주소값에 저장하고 그 주소값을 다시 가지게 된다.
그러나 StringBuilder는 가변성을 가지므로 동일 객체내에서 문자열을 변경할 수 있기 때문에 추가, 수정, 삭제를 자주 사용한다면 StringBuilder를 사용하는것이 좋다.
StringBuffer도 있던데요?
여기서 StringBuilder말고 StringBuffer도 있던데 그건 뭔가? 라고 생각하는 사람도 있을것이다. 이는 두개를 같게 생각해도 된다! (단, 멀티스레드라는 단어가 들린다면 알고있어야 한다!)
바로 동기화의 차이이다!
기능은 동일하나 멀티스레드 환경일 경우 동기화가 중요하다 동기화를 하지 않고 사용한다면 어느샌가 생각하고 있는 값이 아니게 될것이다!
그래서 여기서는 동일하게 쓰지만 StringBuilder는 동기화 없이, StringBuffer는 동기화를 사용이 가능하다! 라고 생각하면 된다. (반대로 단일 스레드라면 StringBuilder가 조금 더 뛰어나다!)
'코딩 공부(hackerrank)' 카테고리의 다른 글
[Java] List<Object> list = new List<Object>(); 안되는 이유 (0) | 2023.01.10 |
---|---|
[Java] String.format 소수점 표기법 (0) | 2023.01.10 |
[Java] for문, foreach문, List.forEach() (4) | 2023.01.10 |
[HackerRank] 코딩 시 주의하자! (3월) (0) | 2022.03.22 |