์ค๋์ ์๋ฐ APIํด๋์ค ์ค String๊ณผ StringBufferํด๋์ค์ ์ฐจ์ด๋ฅผ ์์๋ณด๊ณ
์ด์ ๊ด๋ จ๋ "equals()", "contentEquals()" ์ ์ฐจ์ด๋ฅผ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. String ?
C์ธ์ด์์๋ ๋ฌธ์์ด์ charํ ๋ฐฐ์ด๋ก ํํํ์ง๋ง, ์๋ฐ์์๋ ๋ฌธ์์ด์ ์ํ String์ด๋ผ๋ ํด๋์ค๊ฐ ๋ฐ๋ก ์ ๊ณต๋์ด์๋ค.
String ํด๋์ค์๋ ๋ฌธ์์ด๊ณผ ๊ด๋ จ๋ ์์
์ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ๋ฉ์๋๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ,
์ด๋ฌํ String ํด๋์ค๋ java.lang ํจํค์ง์ ํฌํจ๋์ด ์ ๊ณต๋๋ค.
String ์ธ์คํด์ค๋ ํ ๋ฒ ์์ฑ๋๋ฉด ๊ทธ ๊ฐ์ ์ฝ๊ธฐ๋ง ํ ์ ์๊ณ , ๋ณ๊ฒฝํ ์๋ ์๋ค.
์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์๋ฐ์์๋ ๋ถ๋ณ ๊ฐ์ฒด(immutable object)๋ผ๊ณ ํ๋ค.
์ฆ, ์๋ฐ์์ ๋ง์
(+) ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์์ด ๊ฒฐํฉ์ ์ํํ๋ฉด, ๊ธฐ์กด ๋ฌธ์์ด์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ด ์๋๋ผ ๋ด์ฉ์ด ํฉ์ณ์ง ์๋ก์ด String ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๊ฒ์ด๋ค. (์ถ์ฒ : tcpschool)
2. String vs StringBuffer
StringBufferํด๋์ค๋ String๊ณผ ๋ค๋ฅด๊ฒ mutable(๋ณ๊ฒฝ๊ฐ๋ฅ)ํ๋ค. ์ฆ ๊ฐ๋ณํ ๊ฐ์ฒด์ด๋ค.
๋ฌธ์์ด ์ฐ์ฐ์ ํ ๋, ํด๋์ค๋ ํ ๋ฒ๋ง ๋ง๋ค๊ณ (new), ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ณ๊ฒฝ์์ผ์ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ๋ค.
์ค๊ฐ์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์์ผ๋ฏ๋ก, ๋ฌธ์์ด ์ฐ์ฐ์ด ๋ง์ ํ๋ก๊ทธ๋๋ฐ์์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ผ๋ก ์ ๋ฆฌํ๋ค.
StringBuffer์ ๋น์ทํ ํด๋์ค๋ก StringBuilderํด๋์ค๊ฐ ์๋๋ฐ ๋ ํด๋์ค๋ ๋ฉ์๋ ํธํ์ด ๊ฐ๋ฅํ๋ค.
3. StringBuffer vs StringBuilder
StringBuffer์ StringBuilder๋ ๊ฐ๋ณ ๊ฐ์ฒด๋ผ๋ ์ ์์ ๊ฐ์ง๋ง(์ฐ์ฐ์ด ์์ฃผ ๋ฐ์ ์ ์ ๋ฆฌํจ.)
์ฐจ์ด์ ์ StringBuffer๋ ๋ฉํฐ์ฐ๋ ๋ํ๊ฒฝ์์ 'synchronized'ํค์๋๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก ๋๊ธฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
์ฆ, thread-safeํ๋ค. ๋ฐ๋๋ก StringBuilder๋ thread-safeํ์ง ์๋๋ค.
๋๋ณด๊ธฐ
Thead Safe
์ค๋ ๋ ์์ (thread ๅฎๅ
จ, ์์ด: thread safety)์ ๋ฉํฐ ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ํจ์๋ ๋ณ์, ํน์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ์ค๋ ๋๋ก๋ถํฐ ๋์์ ์ ๊ทผ์ด ์ด๋ฃจ์ด์ ธ๋ ํ๋ก๊ทธ๋จ์ ์คํ์ ๋ฌธ์ ๊ฐ ์์์ ๋ปํ๋ค. ๋ณด๋ค ์๋ฐํ๊ฒ๋ ํ๋์ ํจ์๊ฐ ํ ์ค๋ ๋๋ก๋ถํฐ ํธ์ถ๋์ด ์คํ ์ค์ผ ๋, ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๊ทธ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋์์ ํจ๊ป ์คํ๋๋๋ผ๋ ๊ฐ ์ค๋ ๋์์์ ํจ์์ ์ํ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ก ๋์ค๋ ๊ฒ์ผ๋ก ์ ์ํ๋ค.
StringBuilder๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์๋ ์ ํฉํ์ง ์์ง๋ง, ์ฑ๊ธ ์ฐ๋ ๋ ํ๊ฒฝ์์ StringBuffer์ ๋นํด ์ฐ์ฐ์ฒ๋ฆฌ๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
์์ ์ฝ๋) String
String ํด๋์ค ์ฌ์ฉํด๋ณด๊ธฐ
๊ฒฐ๊ณผ
์์ ์ฝ๋) String Buffer
StringBuffer ์์
๊ฒฐ๊ณผ
4. equals vs contentEquals
equals์ contentEquals์ ์ฐจ์ด๋
equals๋ String ๋ผ๋ฆฌ์ ๋ฌธ์์ด์ด ๋์ผํ ์ง ํ์ธํ ๋ ์ฌ์ฉํ๊ณ (๋ค๋ฅธ๊ฐ์ฒด์๋ ๋น๊ตx),
contentEquals ๋ String๊ณผ ๋ค๋ฅธ ๊ฐ์ฒด์์ ๋ฌธ์์ด์ด ๋์ผํ ์ง๋ฅผ ํ์ธํ ๋๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
: a.equals
a๋ณ์์ ๋ฌธ์์ด๊ณผ ๋งค๊ฐ๋ณ์์ ๋ฌธ์์ด ๊ฐ์ด ๊ฐ๋ค๋ฉด true๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
๋งค๊ฐ๋ณ์์ ๊ฐ์ฒด๊ฐ String์ ์ธ์คํด์ค์ธ์ง๋ ํ์ธํ๋ค.
String ๊ฐ์ฒด์ StringBuffer ๊ฐ์ฒด์ ๋ฌธ์์ด์ ๋น๊ตํ ์ ์๋ค.
: a.contentEquals
a ๋ณ์์ ๋ฌธ์์ด๊ณผ ๋งค๊ฐ๋ณ์์ ๋ฌธ์์ด์ ๊ฐ์ด ์ ํํ ์ผ์นํ๋ฉด true๋ฅผ ๋ฐํํ๋ ๋ฉ์๋
๋งค๊ฐ๋ณ์์ ๊ฐ์ฒด๊ฐ String์ ์ธ์คํด์ค์ธ์ง๋ ํ์ธํ์ง ์๊ณ ๋ด์ฉ๋ง ๋น๊ตํ๋ค.
String ๊ฐ์ฒด๋ฅผ StringBuffer, StringBuilder..๋ฑ์ ๊ฐ์ฒด๋ค๊ณผ ๋น๊ต ๊ฐ๋ฅ
equals๋ฅผ ์๋์ ๊ฐ์ด ์ฌ์ฉํด ์ค ์๋ ์๋ค. ์๋์ ์ฌ์ฉํ ์ฝ๋๋ ๋ค์ ๊ธ์ "์ปฌ๋ ์
"์์ ์ค๋ช
ํ๊ฒ ๋ค.