๐ป [Java] ๋ฌธ์์ด String Constant Pool ๊ณผ ๋ฌธ์์ด์์ ==, equals()์ ์ฐจ์ด์
๐ป [Java] String - String Constant Pool ๊ณผ ๋ฌธ์์ด์์ ==, equals()์ ์ฐจ์ด์
์๋
ํ์ธ์. ๐
์ค๋์ ์๋ฐ์ String - String Constant Pool ๊ณผ ๋ฌธ์์ด์์ ==, equals()์ ์ฐจ์ด์ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ ๋๋ == ์ฐ์ฐ์๋ฅผ ๋ง์ด ์ฌ์ฉํ๋๋ฐ
๋ฌธ์์ด์ ๋น๊ตํ ๋๋ equals๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น๊ตํฉ๋๋ค.
์ ๊ทธ๋ด๊น์?
String ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
String ์์ฑ ๋ฐฉ๋ฒ์ผ๋ก ์ธํ ์ฐจ์ด
String ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
- String literal, ์ฆ ํฐ ๋ฐ์ดํ(โโ)๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๋ ๋ฐฉ๋ฒ์๋ ์๋นํ ํฐ ์ฐจ์ด๊ฐ ์๋ค.
์์ ํ ์คํธ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด
String literal๋ก ์์ฑํ ๊ฐ์ฒด๋ ๋ด์ฉ์ด ๊ฐ๋ค๋ฉด ๊ฐ์ ๊ฐ์ฒด, ์ฆ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค.
ํ์ง๋ง new ์ฐ์ฐ์๋ก ์์ฑํ String ๊ฐ์ฒด๋ ๋ฌธ์์ด์ด ๊ฐ๋๋ผ๋ ๊ฐ๋ณ์ ์ธ ๊ฐ์ฒด์์ ์ ์ ์๋ค.
String Constant Pool
String literal๋ก ์์ฑํ๋ฉด ํด๋น String ๊ฐ์ Heap ์์ญ ๋ด โString Constant Poolโ์ ์ ์ฅ๋์ด ์ฌ์ฌ์ฉ๋์ง๋ง, new ์ฐ์ฐ์๋ก ์์ฑํ๋ฉด ๊ฐ์ ๋ด์ฉ์ด๋ผ๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๊ฐ ๊ฐ๊ฐ Heap ์์ญ์ ์ฐจ์งํ๊ธฐ ๋๋ฌธ์ด๋ค.
(๊ทธ๋ฆผ์๋ ์๋ต๋์ด ์์ง๋ง) ์์ฑ๋ String ๊ฐ์ฒด๋ Stack ์์ญ์ ์ ์ฅ๋๋ค.
Heap ์์ญ์๋ โCatโ, โDogโ๊ณผ ๊ฐ์ โ๊ฐโ๋ค์ด ๋ค์ด๊ฐ๊ฒ ๋๋๋ฐ, ๊ทธ๋ฆผ์ ์ฐ์ธก์ ๋ณด๋ฉด ์ค์ํ ์ฐจ์ด๋ฅผ ๋ฐ๊ฒฌํ ์ ์๋ค.
String literal๋ก ์์ฑํ ๊ฐ์ฒด๋ โString Poolโ์ ๋ค์ด๊ฐ๋ค. String literal๋ก ์์ฑํ ๊ฐ์ฒด์ ๊ฐ(ex. โCatโ)์ด ์ด๋ฏธ String Pool์ ์กด์ฌํ๋ค๋ฉด, ํด๋น ๊ฐ์ฒด๋ String Pool์ reference๋ฅผ ์ฐธ์กฐํ๋ค. ๊ทธ๋ฆผ์์ s1๊ณผ s2๊ฐ ๊ฐ์ ๊ณณ์ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ๋ ์ด ๋๋ฌธ์ด๋ค. new ์ฐ์ฐ์๋ก ์์ฑํ String ๊ฐ์ฒด๋ ๊ฐ์ ๊ฐ์ด String Pool์ ์ด๋ฏธ ์กด์ฌํ๋๋ผ๋, Heap ์์ญ ๋ด ๋ณ๋์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
์ด๋ฐ ์ฐจ์ด ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํญ์ String literal(ํฐ ๋ฐ์ดํ)๋ก String์ ์์ฑ์ ๊ถ์ฅํ๋ค.
==, equals()์ ์ฐจ์ด์
์์ ๊ฐ์ ์ฐจ์ด์ ๋๋ฌธ์ ์ํฉ๋ง๋ค ์ฐจ์ด๊ฐ ์๊ธด๋ค.
== ์ฐ์ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ฃผ์๊ฐ์ ๋น๊ตํ๋ฏ๋ก ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฆฌํฐ๋ด์ ์ด์ฉํด ์์ฑํ String ์ด๋ผ๋ฉด == ์ฐ์ฐ์ ํตํด ๋์ผํ๋ค๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์๋ค. ํ์ง๋ง, ๊ฐ์ ๋ฌธ์์ด์ด๋ผ๋ new ์ฐ์ฐ์ ํตํด ์์ฑํ String์ด๋ผ๋ฉด ๋ณ๋์ ๊ฐ์ฒด๊ฐ ๋์ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ == ์ฐ์ฐ์ ํตํด ๋์ผํ๋ค๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์๋ค.
ํ์ง๋ง String์ equals ๋ฉ์๋ ๊ฐ์ ๊ฒฝ์ฐ๋ String ๊ฐ์ฒด์์ ์ค์ ๊ฐ์ธ ๋ฌธ์์ด ์์ฒด์ ๋ํด ๋น๊ต๋ฅผ ํด์ค๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ String ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฌธ์์ด์ด ๋์ผํ์ง๋ฅผ ํ์ธํ๋ ค๋ฉด == ์ฐ์ฐ ๋ณด๋ค๋ ๋ฌธ์์ด ์์ฒด๋ฅผ ๋น๊ตํ๋ equals ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ ๋ฆฌ
- String ์์ฑ ๋ฐฉ๋ฒ์ ๋ฆฌํฐ๋ด ๋ฐฉ๋ฒ๊ณผ new ์ฐ์ฐ ๋ฐฉ๋ฒ์ด ์๋ค.
- literal ๋ฐฉ๋ฒ์ด ๋์ผํ ๋ฌธ์์ด ๊ฐ์ ๋ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฏ๋ก ํจ์จ์ ์ด๋ค.
- ๋ฌธ์์ด ๊ฐ์ ๋ํ ๋น๊ต๊ฐ ํ์ํ ๋ == ์ฐ์ฐ๋ง์ผ๋ก๋ ๋์ผํ ๋ฌธ์์ด์ด๋๋ผ๋ ๋์ผํ ๋ฌธ์์ด์์ ๋ณด์ฅ๋ฐ์ ์ ์์ผ๋ฏ๋ก equals ๋ฉ์๋๋ฅผ ํ์ฉํด์ผํ๋ค.
๋
์๋ฐ์ String - String Constant Pool ๊ณผ ๋ฌธ์์ด์์ ==, equals()์ ์ฐจ์ด์ ์ ๋ํด ์์๋ณด์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ๐
Reference
https://starkying.tistory.com/entry/what-is-java-string-pool