์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ์ฟผ๋ฆฌ ์ต์ ํ
- JIT
- ์๋ฐ
- ์บ์ฑ
- ์ฌ์ฌ์ฉ์ฑ
- ํด๋ฆฐ์ฝ๋
- SRP
- ์ถ์ํ
- ์บก์ํ
- spring boot
- ๊ฐ์ฒด์งํฅ
- ์ธํฐํ๋ฆฌํฐ
- ์คํ๋ง
- ํ๋ ฅ
- ๊ฐ์ฒด
- ๋๋ฉ์ธ ๋ชจ๋ธ
- Refactor
- ๋ฆฌํฉํ ๋ง
- ํด๋ฆฐ ์ฝ๋
- Lombok
- ์ฑ ์
- JPA
- ์คํ๋ง๋ถํธ
- Java
- string
- ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด
- cache
- clean code
- REST API
- ์บ์
- Today
- Total
GO SIWOO!
[Java] String, StringBuilder, StringBuffer์ ์ฐจ์ด ๋ณธ๋ฌธ
[Java] String, StringBuilder, StringBuffer์ ์ฐจ์ด
gosiwoo 2023. 3. 15. 17:39๐ ๊ฐ์
Java์์ ๋ฌธ์์ด์ ๋ด์ ์ ์๋ ํด๋์ค๋ String, StringBuilder, StringBuffer 3๊ฐ์ง๊ฐ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ค์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
๐ String
String ํด๋์ค์ StringBuilder, StringBuffer์์ ์ฐจ์ด๋ ๋ถ๋ณ ๊ฐ์ฒด๋ผ๋ ์ ์ ์ฐจ์ด์ ์ด ์๋ค.
๋ถ๋ณ ๊ฐ์ฒด๋ ์์ ํ ์์ฑ๋ ํ์๋ ๋ด๋ถ ์ํ๊ฐ ์ ์ง๋๋ ๊ฐ์ฒด์ด๋ค. ๊ทธ๋ฐ๋ฐ ์๋์ ๊ฐ์ด String ๋ณ์๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋๋ฐ ์ ๋ถ๋ณ๊ฐ์ฒด์ธ๊ฐ?
String str = "์๋ฐ ์คํธ๋ง";
str = "java String";
System.out.println(str);
// java String
์๋ฐ String ๊ฐ์ฒด์ ์์ฑ ๋ฐฉ์์ new ์ฐ์ฐ์๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์๊ณผ literal์ ์ด์ฉํ ๋ฐฉ์ 2๊ฐ์ง๊ฐ ์๋ค. ์ฐ์ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ์ฌํ ์ฐธ์กฐํ ๋ณ์๊ฐ ์ ์ฅ๋๋ ๋ฐฉ์์ธ Heap ์์ญ์ ์ ์ฅ์ด ๋๋ค.
ํ์ง๋ง literal์ ์ด์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด Heap ๋ด์ String constants Pool์ด๋ผ๋ ๊ณณ์ ์ ์ฅ๋์ด String ๊ฐ์ ๋ถ๋ณ์ฑ์ ์ง๋๊ฒ ํ๊ณ ๋ค๋ฅธ String ๋ณ์๋ผ๊ณ ํด๋ ๊ฐ์ ๋ด์ฉ์ String literal์ ๊ฐ๊ณ ์๋ค๋ฉด ๊ฐ์ ๊ณณ์ ์ฐธ์กฐํ๊ฒ ๋๋ค.
String a = "์๋ฐ";
String b = "์๋ฐ";
System.out.println(a == b);
// true
์์ ๊ฐ์ด ๋ค๋ฅธ ๋ณ์์ฌ๋ ๊ฐ์ ๋ด์ฉ์ String literal์ ๊ฐ๊ณ ์๋ค๋ฉด ๊ฐ์ ๊ฐ์ฒด์ด๋ค.
String constants Pool์ ๋ํด ์ถ๊ฐ์ ์ธ ๋ด์ฉ์ ๋ค์ ํฌ์คํ ์ ์๋ค.
https://gosiwoo.tistory.com/entry/%EC%9E%90%EB%B0%94Java-Java-String-Pool%EC%9D%B4%EB%9E%80
[์๋ฐ(Java)] Java String Pool์ด๋?
๐Java String ๊ฐ์ฒด์ ์์ฑ ๋ฐฉ์ Java์ String ๊ฐ์ฒด๋ ๋ ๊ฐ์ง ์์ฑ ๋ฐฉ์์ด ์๋ค. 1. new ์ฐ์ฐ์ ์ด์ฉ Heap ์์ญ์ ์กด์ฌ ex) String str = new String("์คํธ๋ง"); 2. literal์ ์ด์ฉํ ๋ฐฉ์ String Constant Pool์ด๋ผ๋ ์์ญ
gosiwoo.tistory.com
String์ด ๋ถ๋ณ์ฑ์ ๊ฐ์ง์ผ๋ก์จ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ง๋๋ค
1. ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
ํ๋ก๊ทธ๋จ ๋์ ์ค String์ ๊ณ์ํ์ฌ ์ฌ์ฉ๋๋ค.
๊ทธ๋ด ๋๋ง๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ String constants Pool์ด๋ผ๋ ์์ญ์ ์ ์ฅํ์ฌ Heap ์์ญ์ ์ ์ฝํ ์ ์๋ค
2. ๋ณด์
๋ถ๋ณํ๊ธฐ์ ์์ ํ๋ค. String ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ๋ String ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ์ฃผ์ ์์ฒด๋ฅผ ๋๊ฒจ๋ ์์ ํ๋ค.3. String ์บ์ฑ
String์ ๋ถ๋ณ์ฑ ๋๋ถ์ ๊ฐ์ฒด์ hashCode๋ฅผ ํตํด ํค๋ก ์ฌ์ฉํ ๋ String์ ๊ณ์ฐํ์ง ์๊ณ ์์ฑ ๋จ๊ณ์์ ์บ์ฑ์ ํ ์ ์๋ค.
๐ StringBuilder & StringBuffer
StringBuilder์ StringBuffer๋ String๊ณผ ๋ค๋ฅด๊ฒ ๊ฐ๋ณ์ฑ์ ์ง๋๋ค.
๊ฐ๋ณ์ฑ์ ์ง๋๊ธฐ์ ๋์ผํ ๊ฐ์ฒด์์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ๋ฌธ์์ด์ ์ถ๊ฐ, ์์ , ์ญ์ ๊ฐ ๋ง๋ค๋ฉด StringBuilder์ StringBuffer๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ค.
StringBuilder์ StringBuffer๊ฐ ๊ฐ๋ณ์ฑ์ ์ง๋๋ ๋ฌธ์์ด ํด๋์ค์ธ ๊ฒ์ ์๊ฒ ๋๋ฐ ์ด ๋์ ์ด๋ค ์ฐจ์ด์ ์ ์ง๋๊ณ ์์๊น?
StringBuilder์ StringBuffer๋ ๋๊ธฐํ์ ์ ๋ฌด์์ ์ฐจ์ด (thread-safe์ ๋ณด์ฅ)๊ฐ ๋๋ค.
StringBuilder๋ ๋น๋๊ธฐ ๋ฐฉ์์ด๊ธฐ์ Single Thread ํ๊ฒฝ์์ ๋ณํํ๋ ๋ฌธ์์ด์ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. StringBuilder๋ ๋น๋๊ธฐ ๋ฐฉ์์ด๊ธฐ์ ์ฒ๋ฆฌ์๋๊ฐ StringBuffer๋ณด๋ค ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
StringBuilder์ ๋ฐ๋๋ก StringBuffer๋ ๋๊ธฐํ๋ฅผ ์ง์ํ๊ธฐ์ Multi Thread ํ๊ฒฝ์์ ๋ณํํ๋ ๋ฌธ์์ด์ ๋ค๋ฃจ๋๋ฐ ์ ํฉํ๋ค.