Java
[Java] ๋ฌธ์์ด์ ๋ฌต์์ ์ ์ธ๊ณผ ๋ช ์์ ์ ์ธ์ ๋ฐ๋ฅธ ๋ฌธ์์ด ๋น๊ต(Heap
joheamin
2025. 3. 28. 15:30
๐ท ๋ฌธ์์ด ์ ์ธ๊ณผ ๋น๊ต
โ ==๋ ์ฃผ์๊ฐ์ ๋น๊ตํ๋ค.
โ equals๋ ๊ฐ์ ๋น๊ตํ๋ค.
โพ ๋ฌต์์ ๋น๊ต
String s1 = "๊ทธ๋ฆฐ"; String s2 = "๊ทธ๋ฆฐ"; if(s1 == s2))System.out.println("== : true"); else System.out.println("== : false"); if(s1 == s2))System.out.println("eqauls : true"); else System.out.println("eqauls : false");โ
๐ == : true
eqauls : true
โพ ๋ฌต์ ๋ช ์ ๋น๊ต
String s1 = "๊ทธ๋ฆฐ"; String s2 = "๊ทธ๋ฆฐ"; String s3 = new String("๊ทธ๋ฆฐ"); String s4 = new String("๊ทธ๋ฆฐ"); if(s1 == s3))System.out.println("== : true"); else System.out.println("== : false"); if(s1 == s2))System.out.println("eqauls : true"); else System.out.println("eqauls : false");โ
๐ == : false
eqauls : true
โพ ๋ช ์์ ๋น๊ต
String s3 = new String("๊ทธ๋ฆฐ"); String s4 = new String("๊ทธ๋ฆฐ"); if(s3 == s4)System.out.println("== : true"); else System.out.println("== : false"); if(s3 == s4))System.out.println("eqauls : true"); else System.out.println("eqauls : false");โ
๐ == : false
eqauls : true
โ ์ ์ด๋ฐ ๊ฒฐ๊ณผ?
์ฐ์ eqauls ๋ ๊ฐ๋ง์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ ๋ช ํํ๋ค.
โ๏ธ ๊ทธ๋ ๋ค๋ฉด ์ฃผ์๊ฐ์ ๋น๊ตํ๋ == ์ ๊ฒฐ๊ณผ์ ๋ํด์ ์์๋ณด์.
โพ ๋ฌต์์ ๋ฌธ์์ด์ ๋น๊ต
new ์์ด ๋ฆฌํฐ๋ด ๊ฐ์ผ๋ก๋ง ์ ์ธํ ๋ณ์์ผ ๊ฒฝ์ฐ
ex) String s1 = “๊ทธ๋ฆฐ”
“๊ทธ๋ฆฐ” ์ด๋ผ๋ ๋ฌธ์์ด ์์ฒด๊ฐ Spring pool์ด๋ผ๋ ๊ณต๊ฐ์ ์ ์ฅ๋๋ค.
๋ฆฌํฐ๋ด๊ฐ์ ๋จ์๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ ๋ค๋ฅธ ๋ฌต์์ ์ ์ธ๋ ๋ณ์๊ฐ
“๊ทธ๋ฆฐ” ์ด๋ผ๋ ๊ฐ์ผ๋ก ๋ณ์๋ฅผ ์์ฑํ ๊ฒฝ์ฐ
Sptring pool ์์ ๋์ผํ ๋ฆฌํฐ๋ด ๊ฐ์ธ “๊ทธ๋ฆฐ” ์ ์ฐพ์ ๊ฐ์ ๊ฒ์ ์ฐธ์กฐํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ s1 = “๊ทธ๋ฆฐ” ๊ณผ s2 = “๊ทธ๋ฆฐ” ์ Spring pool ๋ด์์
๊ฐ์ ์ฃผ์์ ์ ์ฅ๋ ์์ผ๋ฏ๋ก true๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
โพ ๋ช ์์ ๋ฌธ์์ด์ ๋น๊ต
new๋ฅผ ํตํด์ ๋ฌธ์์ด์ ์์ฑํ ๊ฒฝ์ฐ ํด๋น ๋ฌธ์์ด์ heap ์์ญ ์ ๊ฐ๊ฐ ์ ์ฅ๋๋ค.
heap์์ญ์ ๊ฒฝ์ฐ ๊ฐ์ด ๋์ผํ๋ค๊ณ ํ์ฌ๋ ์ฃผ์๊ฐ์ ์ ๋ถ ๋ค๋ฅด๊ฒ
์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ==์ ํตํด ์ฃผ์ ๊ฐ์ ๋น๊ตํ ๊ฒฝ์ฐ
false๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค
๐ค ๋ช ์์ ์ผ๋ก ์ ์ธํ ๋ณ์์ ๋ค์ ๋ฌต์์ ์ผ๋ก ์ ์ธํ ๊ฒฝ์ฐ?
โพ๋ช ์์ ์ ์ธ๊ณผ ๋ฌต์์ ์ ์ธ
//๋ฌต์์ ์ ์ธ String s1 = "๊ทธ๋ฆฐ"; //๋ช ์์ ์ ์ธ String s3 = new String("๊ทธ๋ฆฐ"); if(s3 == s1)System.out.println("s1 == s1 : true"); else System.out.println("s1 == s2 : false");
๐ true
โพ ๋ช ์์ ๋ณ์์ ๋ฌต์์ ์ฌ์ ์ธ
s1 = "ํ๊ธธ๋"; //๋ฌต์ -> ๋ฌต์ s3 = "ํ๊ธธ๋"; //๋ช ์ -> ๋ฌต์ if(s3 == s1)System.out.println("s1 == s1 : true"); else System.out.println("s1 == s2 : false");
๐ true ๊ฐ ๋์จ๋ค.
๐ค ๋ฌต์์ ์ผ๋ก ์ฌ์ ์ธํ ๊ฒฝ์ฐ heap์์ญ์์ Spring pool๋ก ์ด๋ํ๋ ๊ฑธ๊น?
โ ๊ฐ์ ๋ฆฌํฐ๋ด๋ก ์ฌํ ๋น ํ๋ค๊ณ ํด์ heap์ ์ String pool๋ก ์ด๋ํ๋๊ฒ์ ์ฐ์ ์๋๋ค.
๋ค๋ง ๋ฆฌํฐ๋ด ๊ฐ์ผ๋ก ์ฌํ ๋น ํ ๊ฒฝ์ฐ
์ฐธ์กฐ ๋ณ์๋ Spring pool ์ ์๋ “ํ๊ธธ๋”์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ฒ๋๋ค.
new๋ก ์ธํด heap์์ญ์ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ๋ ๊ทธ๋๋ก ์กด์ฌํ๋
์ฐธ์กฐ๋ณ์๊ฐ ํด๋น ์ฃผ์๋ฅผ ์ฐธ์กฐ ํ์ง ์๊ฒ ๋๊ธฐ๋๋ฌธ์
๊ฒฐ๊ตญ ๊ฐ๋น์ง์ปฌ๋ ํฐ๋ก ์ธํด ์ ๊ฑฐ๋๋ค.