๋ณธ ํฌ์คํ ์์๋ ์ง๋ ํฌ์คํ ์ ์ด์ด์ JAVA ๊ฐ๋ฐ์๊ฐ ์์์ผํ๋ String ํด๋์ค์ ๋ํ ์ฃผ์ ๋ด์ฉ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. String, StringBuilder, StringBuffer์ ํน์ง๊ณผ ์ฐจ์ด์ ์ ๋ํด ์ฃผ๋ก ๋ค๋ฃน๋๋ค.
๋ชฉ์ฐจ
- String, StringBuilder, StringBuffer - immutable(๋ถ๋ณ) VS mutable(๊ฐ๋ณ)
- StringBuilder VS StringBuffer
String, StringBuilder, StringBuffer - immutable(๋ถ๋ณ) VS mutable(๊ฐ๋ณ)
String, StringBuilder, StringBuffer๋ ๋ชจ๋ ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ํด๋์ค์ ๋๋ค. ๊ฐ ํด๋์ค๋ ๊ณ ์ ํ ํน์ฑ์ด ์์ด ์ด๋ฅผ ์๊ณ ์ ํฉํ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. String ๊ฐ์ฒด์ ํน์ง ์ค ํ๋๊ฐ immutable(๋ถ๋ณ)ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ์ ๋ฐํด StringBuilder์ StringBuffer ํด๋์ค๋ mutable(๊ฐ๋ณ)ํฉ๋๋ค. String ํด๋์ค๋ ๊ฐ์ฒด๊ฐ ํ ๋ฒ ์์ฑ๋๋ฉด ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ๋๋ง๋ค ์๋ก์ด ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง๋ง StringBuilder์ StringBuffer๋ ๊ธฐ์กด ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ์์ ํ์ฌ ์๋ก์ด ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ๊ธฐ์กด ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
๐ String ๋ฌธ์์ด์ ๋ณ๊ฒฝํ ๋๋ง๋ค ์๋ก์ด ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด ๊ธฐ์กด ๊ฐ์ฒด๋ ์ด๋ป๊ฒ ๋ ๊น์? ์ด์ ๋ฌธ์์ด ๊ฐ์ฒด๋ Garbage Collector์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ด๋ก ์ธํด ๋ฌธ์์ด์ ์์ฃผ ์์ ํ๋ ๊ฒฝ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ StringBuilder/StringBuffer ํด๋์ค๋ ๋ฌธ์์ด์ ์์ฃผ ๋ณ๊ฒฝํ๋ ์ํฉ์์ ๋ ํจ์จ์ ์ ๋๋ค.
๋ค์ ์ฝ๋๋ StringBuilder๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ๋์ ์ผ๋ก ์์ฑํ๊ณ append() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ๋ณ๊ฒฝํฉ๋๋ค.
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
String str = sb.toString();
StringBuilder์ append() ๋ฉ์๋๋ ๊ธฐ์กด ๋ฌธ์์ด์ ์๋ก์ด ๋ฌธ์์ด์ ์ถ๊ฐํ์ฌ ๋ฌธ์์ด์ ๋ณ๊ฒฝํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ toString() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ StringBuffer๋ StringBuilder์ ๊ฐ์ฒด๋ฅผ String์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ์ ์ฝ๋์์, StringBuilder ๊ฐ์ฒด sb๋ "Hello" ๋ฌธ์์ด์ ์ด๊ธฐ๊ฐ์ผ๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค. append() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ " world" ๋ฌธ์์ด์ ์ถ๊ฐํ๋ฉด sb์ ๋ด์ฉ์ด "Hello world"๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, toString() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ sb๋ฅผ String ํ์ ์ผ๋ก ๋ณํํฉ๋๋ค.
๐ StringBuilder/StringBuffer์ String ๋ณํ
StringBuffer๋ StringBuilder๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌธ์์ด ์ฐ์ฐ ๊ณผ์ ์์ ๋ง์ ๋ฌธ์์ด์ด ์์๋ก ์์ฑ๋์ง ์๋๋ก ํ๊ธฐ ์ํจ์ ๋๋ค. ๋ง์ฝ, ๋ฌธ์์ด ์ฐ์ฐ ๊ณผ์ ์์ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ด String ํ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์๋๋ค๋ฉด, toString()์ ํธ์ถํ์ฌ String์ผ๋ก ๋ณํํ ํ์๋ ์์ต๋๋ค.
ํ์ง๋ง, StringBuffer๋ StringBuilder๋ฅผ ์ฌ์ฉํ ๋ฌธ์์ด ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋์ String ํ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด, toString() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ String์ผ๋ก ๋ณํํด์ฃผ์ด์ผ ํฉ๋๋ค. ์ด๋ ํด๋น ๊ฐ์ฒด๋ฅผ ๋ ์ด์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋ง๋ค๊ณ , ๋ฌธ์์ด ์ฐ์ฐ์ ์ฌ์ฉ๋์๋ ๋ด๋ถ ๋ฒํผ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ฌ ์ต์ข ๋ฌธ์์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ต์ ํ์ ์ด์ ์ ์ค๋๋ค.
append() ๋ฉ์๋๋ฅผ ์ฐ์ํด์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ ์ฝ๋๋ StringBuilder๋ฅผ ์ฌ์ฉํ์ฌ "Hello", "world", "!" ๋ฌธ์์ด์ ์ฐจ๋ก๋ก ์ถ๊ฐํ์ฌ ๋ฌธ์์ด์ ๋ณ๊ฒฝํฉ๋๋ค.
StringBuilder sb = new StringBuilder("Hello");
sb.append(" world").append("!");
System.out.println(sb.toString()); // "Hello world!"
์ ์ฝ๋์์๋ append() ๋ฉ์๋๋ฅผ ์ฐ์ํด์ ์ฌ์ฉํ์ฌ "Hello", " world", "!" ๋ฌธ์์ด์ ์ฐจ๋ก๋ก ์ถ๊ฐํ์ต๋๋ค.
๐ ๋ฉ์๋ ์ฒด์ด๋(method chaining)
์ฐ์ํด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋ฉ์๋ ์ฒด์ด๋(method chaining)์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ, ๊ฐ๋ ์ฑ๋ ์ข์์ง๋๋ค.
StringBuilder VS StringBuffer
StringBuilder์ StringBuffer๋ ๋ ๋ค ๊ฐ๋ณ์ ์ธ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํด๋์ค์ ๋๋ค. ๋ ํด๋์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
๋๊ธฐํ(synchronization)์ Thread-Safety
๋์ ์ฐจ์ด์ ์ ๋๊ธฐํ(synchronization)์ ์ง์ ์ฌ๋ถ์ ๋๋ค. StringBuilder๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์๋ ๋น๋๊ธฐํ ํด๋์ค์ด๋ฉฐ, StringBuffer๋ ๋๊ธฐํ๋ฅผ ์ง์ํ๋ ํด๋์ค์ ๋๋ค. StringBuilder๋ non-synchronized๋ก, StringBuffer๋ synchronized๋ก ๊ตฌํ๋์ด ์์ด์ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ StringBuffer๋ ์ค๋ ๋ ์์ ์ฑ์ ๋ณด์ฅํ๊ณ , StringBuilder๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ฐ๋ผ์, ๋ฉํฐ ์ค๋ ๋์์ ๋ฌธ์์ด ์กฐ์์ด ํ์ํ ๊ฒฝ์ฐ StringBuffer๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
์ฑ๋ฅ
๋๊ธฐํ ์ฒ๋ฆฌ๋ก ์ธํด StringBuffer๋ StringBuilder์ ๋นํด ์ฑ๋ฅ์ด ๋จ์ด์ง๋๋ค. StringBuilder๊ฐ StringBuffer๋ณด๋ค ์ฑ๋ฅ์ด ๋ ๋ฐ์ด๋๋ฉฐ, ๋จ์ผ ์ค๋ ๋์์๋ StringBuilder๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
Java ๋ฒ์
StringBuilder๋ Java 5๋ถํฐ ์ ๊ณต๋๋ฉฐ, StringBuffer๋ Java 1.0๋ถํฐ ์ ๊ณต๋ฉ๋๋ค.
์ ์ ๊ฒฝํ์ผ๋ก๋, ์ค๋ฌด์์๋ ์ผ๋ฐ์ ์ผ๋ก StringBuilder๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํ๋ค๊ณ ์๊ฐ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ์ํฉ์์ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์ด ์๋๋ฉฐ StringBuilder๊ฐ StringBuffer๋ณด๋ค ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
'Javaยท๏ปฟServletยท๏ปฟJSP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA ๊ฐ๋ฐ์๊ฐ ์์์ผํ String ํด๋์ค - 1ํธ (0) | 2023.02.17 |
---|---|
[JAVA] Class ํด๋์ค๋ฅผ ์ด์ฉํด ๋ฉ์๋์ ์์ฑ์ ์ป๊ธฐ (0) | 2023.02.12 |
[JAVA] Arrays.asList()์ List.of()์ ์ฐจ์ด (0) | 2023.02.10 |
JAVA์์ String์ Null Safeํ๊ฒ ๋น๊ตํ๊ธฐ (0) | 2021.08.14 |
JAVA ์ ๋ค๋ฆญ(Generics) ํด๋์ค์ ๋ฉ์๋ (1) | 2020.07.11 |
๋๊ธ