[JAVA] '=='๊ณผ 'equals()'์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ?

==? equals()?


๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋‘˜์€ ์–‘์ชฝ์— ์œ„์น˜ํ•œ ๊ฐ’ ํ˜น์€ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•œ ๊ฐ’์„ boolean type์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ •์ž‘ String ์ฐธ์กฐ๋ณ€์ˆ˜์— ๊ฐ™์€ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ ๋†“์€์ฑ„๋กœ, '==' ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๊ต๋ฅผ ํ•ด๋ณด๋ฉด ๋Š˜ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ดค์„ ๋•Œ == ์—ฐ์‚ฐ์ž์™€ equals() ๋ฉ”์„œ๋“œ ์‚ฌ์ด์—๋Š” ํฐ ์ฐจ์ด์ ์ด ์žˆ๋Š” ๊ฒƒ์ด ํ™•์‹คํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ  ์„ฑ๊ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ๋‘˜์˜ ์ฐจ์ด์ ์„ ์•Œ์•„์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

 

 

Call By Reference, Call By Value


== ์—ฐ์‚ฐ์ž์™€ equals() ๋ฉ”์„œ๋“œ ์‚ฌ์ด์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” Call By Reference(์ดํ•˜ CBR), Call By Value(์ดํ•˜ CBV) ์— ๋Œ€ํ•ด ํ™•์‹คํ•˜๊ฒŒ ์ดํ•ด๋ฅผ ํ•˜๊ณ  ์žˆ์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด CBR์€ ์–ด๋– ํ•œ ๋Œ€์ƒ์„ ๋ถˆ๋ €์„ ๋•Œ ์ฐธ์กฐ๊ฐ’, ์ฆ‰ ์ฃผ์†Œ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฉฐ CBV๋Š” ์ฃผ์†Œ๊ฐ’์ด ์•„๋‹Œ ๋Œ€์ƒ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’ ์ž์ฒด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. 

 

์ด CBR๊ณผ CBV์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜์™€ ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜๋Š” CBV์ด๋ฉฐ ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜๋Š” CBR์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณดํ†ต ๋ฉ”์„œ๋“œ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋˜๋ฉด, ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜๋Š” ์ž์‹ ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋˜๋ฉฐ ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜๋Š” ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋งŒ์•ฝ ์ฐธ์กฐ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ๋ฉ”์„œ๋“œ ์ง€์—ญ ๋‚ด์—์„œ๋งŒ ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋„˜๊ฒจ์ค€ ๋ณ€์ˆ˜ ๊ทธ ์ž์ฒด์—์„œ๋„ ๊ฐ’์ด ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐ’์„ ๋ฐ”๊ฟจ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๊ทธ ๋ฐ˜๋Œ€๋กœ ๊ธฐ๋ณธ ํƒ€์ž… ๋ณ€์ˆ˜๋Š” ๋ณต์‚ฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๊พผ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„˜๊ฒจ์ค€ ๋ณ€์ˆ˜ ๊ทธ ์ž์ฒด๋Š” ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

 

์ž˜๋ชป๋œ ์ •๋ณด๋ฅผ ์ž‘์„ฑํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Kotlin ์ชฝ์„ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ์ฑ…์—์„œ ์•Œ๊ฒŒ๋œ ์‚ฌ์‹ค์ธ๋ฐ, Java๋Š” CBR์ด ์•„๋‹Œ CBV๊ฐ€ ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.Java์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ „๋‹ฌ๋  ๋•Œ CBR์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๋„˜๊ฒจ์ง€๋Š” ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด์ง„ ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด ์ „๋‹ฌ ๋˜ํ•œ CBV ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ C์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ๋˜ํ•œ ์ฃผ์†Œ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด์„œ ๋„˜์–ด๊ฐ€๋Š” Call by Value ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. C์–ธ์–ด์—์„œ ๋˜ํ•œ Call by Reference ๋ฐฉ์‹์„ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜์ง€๋Š” ์•Š์ฃ . ๊ทธ๋Ÿฌ๋‚˜ ์˜๋ฏธ์ , ๊ฒฐ๊ณผ์ ์œผ๋กœ Call by Reference์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Call by Reference๋‹ค! ๋ผ๊ณ  ์„ค๋ช…ํ•˜๋Š” ๊ณณ๋„ ๋งŽ์Šต๋‹ˆ๋‹ค.

==๊ณผ equals์˜ ์ฐจ์ด์ 


==๊ณผ equals์˜ ๋น„๊ต ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ CBR๊ณผ CBV์— ๊ฐ€์žฅ ํฐ ์—ฐ๊ด€์ด ์žˆ์Šต๋‹ˆ๋‹ค. equals ๋ฉ”์†Œ๋“œ๋Š” ๋น„๊ตํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์˜ ๋‚ด์šฉ ์ž์ฒด๋ฅผ ๋น„๊ตํ•˜์ง€๋งŒ == ์—ฐ์‚ฐ์ž๋Š” ๋น„๊ตํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์˜ ์ฃผ์†Œ๊ฐ’์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ String ๋ณ€์ˆ˜ ๊ฐ„์˜ ๋น„๊ต์—์„œ ==์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ฃผ์†Œ๊ฐ’์ด ๋‹ค๋ฅด๋‹ˆ ํ•ญ์ƒ false๋ฅผ ๋ฆฌํ„ดํ•  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ฒƒ์ด์ฃ . ํ•˜์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋กœ equals()๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ๋„ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” String ๋ณ€์ˆ˜ ๊ฐ„์˜ ๋น„๊ต๋Š” ๋ฌด์กฐ๊ฑด true๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.