๋ด๊ฐ ๋๋ฌด ์๋ฐ์ ๊ธฐ์ด์ ๋ํด์ ๊ณต๋ถ๋ฅผ ์ ๋๋ก ์ํ๋ค๊ณ ์๊ฐํด์ ๋ค์ ์ ๋ฆฌํ๊ฒ ๋์๋ค..
Call By Value ? Call By Reference ?
๋ฉ์๋์์ ์ธ์๊ฐ์ ๋ฐ์ ๋,
๊ฐ์ ์ํ ํธ์ถ์ธ์ง, ์ฐธ์กฐ์ ์ํ ํธ์ถ์ธ์ง ๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์๋ฐ๋ Call By Value
๋ฐฉ์์ด๋ค.
public class Test{
static void changeString(String s){
s = new String("new");
}
public static void main(String[] args){
String a = "old";
System.out.println(a);
changeString(a);
System.out.println(a); // old? new? ๋ญ๊ฐ ์ถ๋ ฅ๋ ๊น
}
}
์คํ๊ฒฐ๊ณผ
old
old
์? ์ old๊ฐ ์ถ๋ ฅ๋์ง? String์ ์ฐธ์กฐ๋ณ์๋ผ์ ์ฃผ์๊ฐ์ ๋๊ฒจ์ ์ฐธ์กฐ๊ฐ์ด ๋ฐ๋์ค ์์๋๋ฐ ๊ทธ๊ฒ ์๋์๋ค.
ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ s๋ ์ธ์๊ฐ์ ์ฃผ์๋ฅผ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ, ์ธ์์ ๊ฐ์ ๋ณต์ฌํด์ ๋ฐ๋๋ค.
๊ฐ์ String a ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ๋ฅผ ํ๊ณ ์๋ค.
์ด๋ ๊ฒ String a
์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ณ ์์ง๋ง,
changeString
๋ฉ์๋ ๋ด์์ ์ฐธ์กฐ ๊ฐ์ ๋ณ๊ฒฝํด๋ ๋ฉ์๋๊ฐ ๋ซํ๋ฉด ๋ณ๊ฒฝ ๋ด์ฉ์ด ๋ค ์ฌ๋ผ์ง๋ฏ๋ก ์ค์ ๊ฐ a์ ์ํฅ์ ์ค ์๊ฐ ์๋ค.
๋ค๋ฅธ ์๋ก, Call By Reference๊ฐ ์๋์ง Member ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ ํ์ธํด๋ณด์.
public class Member{
String name;
public Member(String name){
this.name = name;
}
public static void changeMember(Member m){
m = new Member("new");
}
public static void main(String[] args){
Member member = new Mebmer("old");
System.out.println(member.name);
changeMember(member);
System.out.println(member.name); // new๊ฐ ์ถ๋ ฅ ๋ ๊น?
}
}
์คํ๊ฒฐ๊ณผ
old
old
๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ์๋ฉด,
๊ฐ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ๊ณ ์์ง๋ง, ๊ธฐ์กด member์ ์ฃผ์๊ฐ์ ๋ณต์ฌํด์ ๋ฐ์๊ธฐ ๋๋ฌธ์,
new Member("new")๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ m์ด ์ฐธ์กฐ๋ฅผ ํ๊ณ ์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ด๊ฒ์ด ์๋ฐ๊ฐ Call By Value ๋ฐฉ์์ด๋ผ๋ ๊ฒ์ ์ฆ๋ช ํ๋ค.
ํ์ง๋ง Call By Reference ๋ฐฉ์์ฒ๋ผ ๋ณด์ด๊ฒ(?) ํ ์ ์๋ค.
public class Test{
static class Member{
String name;
public Member(String name){
this.name = name;
}
}
static void changeName(Member m1){
m1.name = "new";
}
public static void main(String[] args){
Member m = new Member("old");
System.out.println(m.name);
changeName(m);
System.out.println(m.name);
}
}
์คํ ๊ฒฐ๊ณผ
old
new
๋ง์ฐฌ๊ฐ์ง๋ก m1์ m์ ์ฃผ์๋ฅผ ๋ณต์ฌ๋ฐ์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ด์ง๋ง,
์ฐธ์กฐ ๋์ด์ง๋ ๊ฐ์ ๋ฐ๊ฟ์ค์ ๋ง์น Call By Referece๊ฐ ์ด๋ฃจ์ด์ง ๊ฒ ์ฒ๋ผ ๋ณด์ฌ์ง๊ฒ ๋๋ค.
์ ๋ฆฌ ํ์๋ฉด...
์๋ฐ๋ ๊ธฐ๋ณธํ ํ์
๋ณ์์ ์ฐธ์กฐํ ํ์
๋ณ์๊ฐ ์๋๋ฐ ๋ ๋ค Call By Value
๋ฐฉ์์ผ๋ก ์ธ์๊ฐ์ ๋ฐ๋๋ค.
๋์ ๊ธฐ๋ณธํ ํ์
์ ๊ทธ ๊ฐ์ ๋ณต์ฌํด์ ์ฃผ์ง๋ง,
์ฐธ์กฐํ ํ์
์ ๊ฐ์ ๋ ํผ๋ฐ์ค(์ฃผ์)๊ฐ ์ ์ฅ๋๋ ๊ฒ์ด๋ฏ๋ก ๊ทธ ๊ฐ์ ๋ ํผ๋ฐ์ค๊ฐ ๋ณต์ฌ ๋์ด์ง๋ค.
๊ฒฐ๋ก ์ ์๋ฐ๋ Call By Value
๋ฐฉ์์ด๋ค..