Java์ ๋ณ์๋ ๊ฐ์ด ํฌํจ๋ ์ปจํ
์ด๋์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ณ์๋ฅผ "์ ๋ฌ"ํ๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น? ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ๊ณผ ์ฐธ์กฐ ๋ฐ์ดํฐ ์ ํ์ ์ฐจ์ด์ ์ ๋ฌด์์
๋๊น?
์ด์ ๋ํด์๋ ๋์ค์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ๋จผ์ ๊ฐ๋จํ ๊ณผ์ ๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค. ์ด ์ฝ๋์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
int ั
= 3;
int ั = ั
;
1ํ์์๋ int ์ ํ์ ๋ณ์ x๊ฐ ์์ฑ๋๊ณ ๊ฐ 3์ด ํ ๋น๋ฉ๋๋ค. 2ํ์์๋ int ์ ํ์ ๋ณ์ y๊ฐ ์์ฑ๋๊ณ ๋ณ์ x ์ ๊ฐ์ด ํ ๋น๋ฉ๋๋ค . ๋ฏธ๋์๋ ๋ณ์ x ๊ฐ y ์ ์ด๋ค ์์ผ๋ก๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค . Java๋ x (3) ์ ๊ฐ์ ๋ณต์ฌ ํ๊ณ ํด๋น ๋ณต์ฌ๋ณธ์ y ์ ๋ฐฐ์นํฉ๋๋ค . ์ด๋ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์
๋๋ค. ํ๋์ ๋ณ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ์ฐ์ง ์์ต๋๋ค. ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ณ์์ ํ ๋น๋ฉ๋๋ค. ํํ์ y = x; " x๋ฅผ y ์ ์ฐ๊ธฐ"๋ฅผ ์๋ฏธํ์ง ์์ต๋๋ค . ์ด๋ " x ๋ด๋ถ์ ๊ฐ์ ๋ณต์ฌ ํ๊ณ ํด๋น ๋ณต์ฌ๋ณธ์ y ์ ์ด๋ค "๋ ์๋ฏธ์
๋๋ค. ๋์ค์ ๋ณ๊ฒฝํ๋ฉด y :
ั = 34;
์ด๊ฒ์ด x ์ ์ํฅ์ ๋ฏธ์น ๊น์ ? ๋น์ฐํ ์๋์ง. x ์ ๊ฐ์ ์ฌ์ ํ โโ3์
๋๋ค. ๋์ค์ x๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค .
ั
= 90;
์ด๊ฒ์ด y ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น ๊น์ ? ์ ๋ผ์. ํ ๋น์ด ์ด๋ฃจ์ด์ง ํ์๋ ์ด๋ค ์์ผ๋ก๋ ๊ด๋ จ์ด ์์ต๋๋ค(๊ฐ ๋ณต์ฌ). ์ฐธ์กฐ ์ ํ์ ์ด๋ป์ต๋๊น? ์ด๋ป๊ฒ ์๋ํ๋์? ๊ทธ๋ ๊ฒ ์ด๋ ต์ง๋ ์์ต๋๋ค. ์ค์ ๋ก ๊ท์น์ ๋์ผํฉ๋๋ค. ๋งํฌ๋ ๋์ผํ ์์
์ ์ํํฉ๋๋ค. ์ฆ, ๋งํฌ์ ๋ณต์ฌ๋ณธ์ ์ป์ต๋๋ค. ๊ทธ๋์ ๋ด๊ฐ ์ด๋ ๊ฒ ๋งํ๋ค๋ฉด:
Cat A = new Cat ();
Cat B = A;
๋งํฌ A๊ฐ ๋งํฌ B ๋ก ๋ณต์ฌ๋ฉ๋๋ค. ์ด๋ ๊ฐ์ฒด์๋ ์ ์ฉ๋์ง ์์ต๋๋ค. ์ฌ์ ํ ๊ฐ์ฒด๊ฐ ํ๋๋ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๋์ผํ Cat ๊ฐ์ฒด๋ฅผ ์ ์ดํ๋ โโ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ฐธ์กฐ๊ฐ ์์ต๋๋ค . ์ด์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. Java๋ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ผ๋ก ์ ๋ฌํฉ๋๋ค. ์ธ์ ๋. ์ด๋ "๊ฐ์ ๋ณต์ฌํ๊ณ ๋ณต์ฌ๋ณธ์ ์ ๋ฌํ๋ค"๋ ์๋ฏธ์
๋๋ค. ๊ธฐ๋ณธ ์ ํ์ ๊ฒฝ์ฐ ์ฝ์ต๋๋ค.
int ั
= 5;
doStuff (ั
); / / ะะตัะตะดะฐัั ะบะพะฟะธั ั
(meaning 5) ะฒ ะผะตัะพะด doStuff
doStuff ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
void doStuff (int ั) {
/ / ะะตะนััะฒะธั ั 'y'
}
x ๊ฐ์ ๋ณต์ฌ๋ณธ , ์ฆ 5๊ฐ doStuff() ๋ฉ์๋ ์ ์ ๋ฌ๋ฉ๋๋ค . doStuff() ๋ฉ์๋์๋ y ๋ผ๋ ์์ฒด ๋ณ์๊ฐ ์์ต๋๋ค . y ๋ณ์๋ ์๋กญ๊ณ ๋ค๋ฅธ ๋ณ์์
๋๋ค. x ๋ฅผ ๋ฉ์๋์ ์ ๋ฌํ๋ ์์ ์ x ์ ์๋ ๋ด์ฉ์ ๋ณต์ฌ๋ณธ์ ์ฌ์ฉํฉ๋๋ค . ์ด์ ๋ถํฐ y ์ x๋ ์๋ก ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. y ๋ฅผ ๋ณ๊ฒฝํด๋ x ์๋ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค .
void doStuff (int ั) {
ั = 27; / / ะญัะพ ะฝะต ะฒะปะธัะตั ะฝะฐ 'ั
'
}
๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. x ๋ฅผ ๋ณ๊ฒฝํ๋ฉด y ๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค . ์ด ๊ฒฝ์ฐ x ๊ฐ ํ ์ ์ผํ ์ผ์ ํด๋น ๊ฐ์ ๋ณต์ฌํ์ฌ doStuff() ๋ฉ์๋์ ์ ๋ฌํ๋ ๊ฒ์ด์์ต๋๋ค . "๊ฐ ์ ๋ฌ"์ ์ฐธ์กฐ์์ ์ด๋ป๊ฒ ์๋ํฉ๋๊น? ๋๋ฌด ๋ง์ ์ฌ๋๋ค์ด "Java๋ ๊ธฐ๋ณธ ์ ํ์ ๊ฐ์ผ๋ก ์ ๋ฌํ๊ณ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ๋ก ์ ๋ฌํฉ๋๋ค."๋ผ๊ณ ๋งํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ทธ๋ค์ด ๋งํ๋ ๊ฒ์ด ์๋๋๋ค. Java๋ ๋ชจ๋ ๊ฒ์ ๊ฐ์ผ๋ก ์ ๋ฌํฉ๋๋ค. ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝํ
์ธ ์ ๋ณต์ฌ๋ณธ์ ์ป์ ์ ์์ต๋๋ค. ๋งํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝํ
์ธ ์ ์ฌ๋ณธ๋ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋งํฌ ๋ด์ฉ์ด ๋ญ๊ฐ์? ๋ฆฌ๋ชจ์ฝ. ์์ค์ ๊ด๋ฆฌ/์ ๊ทผํ๊ธฐ ์ํ ์์ค์
๋๋ค. ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ฉ์๋์ ์ ๋ฌํ๋ฉด ์ฐธ์กฐ์ ๋ณต์ฌ๋ณธ์ด ์ ๋ฌ๋ฉ๋๋ค. ์๊ฒฉ ์ ์ด ํด๋ก . ๊ทธ ๋ฌผ์ฒด๋ ์ฌ์ ํ ๊ทธ๊ฒ์ด ๋ง๋ค์ด์ก๋ ๋๋ฏธ โโ์์ ์์ ๋๊ตฐ๊ฐ๊ฐ ๋ฆฌ๋ชจ์ฝ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ์์ค์์๋ ์ด๋ฅผ ์ ์ดํ๊ธฐ ์ํด ์ผ๋ง๋ ๋ง์ ๋ฆฌ๋ชจ์ฝ์ด "ํ๋ก๊ทธ๋จ"๋์ด ์๋์ง ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ์ด๊ฒ์ ๊ด์ฌ์ ๊ฐ๋ ์ ์ผํ ์ฌ๋์ ๊ฐ๋น์ง ์์ง๊ฐ์ ํ๋ก๊ทธ๋๋จธ์ธ ๋น์ ๋ฟ์
๋๋ค. ๊ทธ๋์ ๋น์ ์ด ๋งํ ๋ :
Cat A = new Cat ();
doStuff (ะ);
void doStuff (Cat B) {
/ / ะัะฟะพะปัะทะพะฒะฐะฝะธะต B
}
Cat ๊ฐ์ฒด ๋ ํ๋๋ง ์์ต๋๋ค . ๊ทธ๋ฌ๋ ์ด์ ๋ ๊ฐ์ ์๊ฒฉ ์ ์ด(๋งํฌ)๊ฐ ๋์ผํ Cat ๊ฐ์ฒด์ ์ก์ธ์คํ ์ ์์ต๋๋ค . ์ด์ B๊ฐ Cat ๊ฐ์ฒด ์ ์ํํ๋ ์์
์ A ๊ฐ ๊ฐ๋ฆฌํค๋ Cat ์ ์ํฅ์ ์ฃผ์ง๋ง A ์ ๋ด์ฉ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค ! ์ ๋งํฌ B ( A ์์ ์ง์ ๋ณต์ฌ๋จ )๋ฅผ ์ฌ์ฉํ์ฌ Cat์ ๋ณ๊ฒฝํ ์ ์์ง๋ง A๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ๋๋์ฒด ๋ฌด์จ ๋ป์ด์ผ? A ๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ง๋ง A ์ ์ฐธ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค . ์ด๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด๋ null ๋ก ๋ฆฌ๋๋ ์
ํฉ๋๋ค . ๋ฐ๋ผ์ B ์ ์ฐธ์กฐ ( B ๊ฐ ์ฐธ์กฐ ํ๋ ์ค์ Cat ๊ฐ์ฒด ๊ฐ ์๋๋ผ ์ฐธ์กฐ ์์ฒด์ ๊ฐ)๋ฅผ ๋ณ๊ฒฝํ๋ฉด A ์ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค . ๊ทธ ๋ฐ๋. ๊ทธ๋์:
Cat A = new Cat ();
doStuff (ะ);
void doStuff (Cat B) {
B = new Cat (); / / ะะต ะฟะพะฒะปะธัะตั ะฝะฐ ัััะปะบั A
}
์ด๋ ๋จ์ํ B๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋ ์๋ฏธ์
๋๋ค. A ๋ ์ฌ์ ํ ํ๋ณตํ๋ค. ๊ทธ๋ผ ์ ๋ง์ ๋ฐ๋ผํ์ธ์. Java๋ ๋ชจ๋ ๊ฒ์ ๊ฐ์ผ๋ก ์ ๋ฌํฉ๋๋ค. (์ข์์, ํ ๋ฒ ๋... ๋๋์ ๊ฐ์ง๊ณ ์.) Java๋ ๋ชจ๋ ๊ฒ์ ๊ฐ์น๋ก ์ ๋ฌํฉ๋๋ค. ๊ธฐ๋ณธ ์ ํ์ ๊ฒฝ์ฐ ํ์ฌ ๊ฐ์ ๋ณต์ฌ๋ณธ์ ์ ๋ฌํ๊ณ , ๊ฐ์ฒด ์ฐธ์กฐ์ ๊ฒฝ์ฐ ์ฐธ์กฐ ๋ณต์ฌ๋ณธ(์๊ฒฉ ์ ์ด)์ ์ ๋ฌํฉ๋๋ค. ๋น์ ์ ๊ฒฐ์ฝ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฐ์ฒด๋ ํ์ ์ ์ฅ๋ฉ๋๋ค. ์ธ์ ๋. ์ด์ ์ปคํผ๋ฅผ ๋ฌ๋ฟ ๋์ฌ์ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์ธ์! ์๋ณธ ๊ธฐ์ฌ.
GO TO FULL VERSION