[Java ์ดํดํ๊ธฐ] 6. ์๋ฐ์ ํจ์(๋ฉ์๋)๋? (2)
๐ฉท ๋ฉ์๋์ ์ข ๋ฅ
- ์๋ฐ์์ ๋ฉ์๋๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์ฃผ์ ์ ํ์ผ๋ก ๋ถ๋ฅํ ์ ์์ต๋๋ค. ์ธ์คํด์ค ๋ฉ์๋์ ์ ์ ๋ฉ์๋.
์ด ๋ ์ ํ์ ๋ฉ์๋๋ ์ฌ์ฉ ๋ฐฉ์, ์ ๊ทผ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ ์ฉ๋์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
1. ์ธ์คํด์ค ๋ฉ์๋ (Instance Methods)
์ธ์คํด์ค ๋ฉ์๋๋ ๊ฐ์ฒด์ ์ธ์คํด์ค์ ์ํ ๋ฉ์๋๋ก, ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ฐ์ดํฐ(ํ๋)์ ์ ๊ทผํ๊ณ ์กฐ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ค๋ฉด ๋จผ์ ํด๋น ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
์ด ๋ฉ์๋๋ค์ ํด๋์ค์ ํน์ ์ธ์คํด์ค์ ์ข ์์ ์ด๊ธฐ ๋๋ฌธ์,
ํด๋์ค์ ๊ฐ ์ธ์คํด์ค๋ ๋ค๋ฅธ ์ธ์คํด์ค์ ๋ฉ์๋์ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๐ ํน์ง
๊ฐ์ฒด์ ์ํ(์ธ์คํด์ค ๋ณ์)์ ์ ๊ทผํ๊ณ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
static ํค์๋ ์์ด ํด๋์ค ๋ด๋ถ์ ์ ์๋ฉ๋๋ค.
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ฐ์ฒด ์ธ์คํด์ค๊ฐ ํ์ํฉ๋๋ค.
public class MyNumber {
private int number; // ์ธ์คํด์ค ๋ณ์
// ์ธ์คํด์ค ๋ฉ์๋
public void setNumber(int number) {
this.number = number;
}
public int getNumber() {
return this.number;
}
}
// ์ฌ์ฉ ์
MyNumber myNumber = new MyNumber();
myNumber.setNumber(3); // ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ (๊ฐ ์ ์ฅ)
System.out.println(myNumber.getNumber()); // ์ธ์คํด์ค ๋ฉ์๋ ํธ์ถ (๊ฐ ์ถ๋ ฅ)
// ๊ฒฐ๊ณผ : 3
2. ์ ์ ๋ฉ์๋ (Static Methods)
์ ์ ๋ฉ์๋๋ ํด๋์ค์ ์ํ๋ฉฐ, ํน์ ์ธ์คํด์ค์ ์ข ์๋์ง ์์ต๋๋ค. ์ด ๋ฉ์๋๋ค์ static ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋๋ฉฐ,
ํด๋์ค ์ด๋ฆ์ ํตํด ์ง์ ํธ์ถํ ์ ์์ต๋๋ค.
์ ์ ๋ฉ์๋๋ ์ธ์คํด์ค ๋ณ์์ ์ง์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ค์ง ์ ์ ๋ณ์์ ๋ค๋ฅธ ์ ์ ๋ฉ์๋๋ง ์ ๊ทผํ ์ ์์ต๋๋ค.
๐ก static์ ํด๋์ค๊ฐ JVM์ ์ํด ์ฒ์ ๋ก๋ฉ๋ ๋ ์ด๊ธฐํ๋๊ณ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ฉ๋๋ค.
์ด๋ ๋ชจ๋ ํด๋์ค์์ ์ ๊ทผํ ์ ์๊ธฐ์, '๊ณต์ 'ํ๋ ์์ฑ์ ๊ฐ์ง๊ธฐ๋ ํฉ๋๋ค.
๐ ํน์ง
์ธ์คํด์ค ๋ณ์์ ์ ๊ทผํ ์ ์๊ณ , ์ค์ง ์ ์ ๋ณ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ , ํด๋์ค ์ด๋ฆ์ผ๋ก ์ง์ ํธ์ถํ ์ ์์ต๋๋ค.
์ ํธ๋ฆฌํฐ ํจ์ ๋๋ ํฌํผ ํจ์๋ฅผ ์์ฑํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
public class mySum {
// ์ ์ ๋ฉ์๋
public static int sum(int a, int b) {
return a + b;
}
}
// ์ฌ์ฉ ์
int sum = mySum.sum(5, 3); // ๊ฐ์ฒด ์์ฑ ์์ด ํด๋์ค ์ด๋ฆ์ผ๋ก ํธ์ถ
System.out.println(sum); // ์ถ๋ ฅ: 8
๐ฉท ๋ฉ์๋ ์ธ์ ์ ๋ฌ๋ฐฉ์
- ์๋ฐ์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํจ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ ํฌ๊ฒ ์ธ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค. Call by Value, Call by Reference, ๊ทธ๋ฆฌ๊ณ Call by Name.
- ๊ฐ๊ฐ์ ๋ฐฉ์์ ์ด๋ป๊ฒ ์ธ์๊ฐ ํจ์ ๋๋ ๋ฉ์๋์ ์ ๋ฌ๋๊ณ , ๊ทธ ํธ์ถ์ด ๋ณ์์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง์ ๋ํ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋ฅผ ๊ฐ์ต๋๋ค.
1. Call by Value (๊ฐ์ ์ํ ํธ์ถ)
๐
- Call by Value ๋ฐฉ์์์๋ ํจ์๋ก ์ ๋ฌ๋ ์ธ์์ ๋ณต์ฌ๋ณธ์ด ์์ฑ๋ฉ๋๋ค.
- ์ฆ, ํจ์ ๋ด๋ถ์์ ์ธ์์ ๊ฐ์ ๋ณ๊ฒฝํด๋ ์ธ๋ถ์ ๋ณ์์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
- ์ด ๋ฐฉ์์ ํจ์๊ฐ ๋ ๋ฆฝ์ ์ธ ์์ ์ ์ํํ ๋ ์ ์ฉํ๋ฉฐ, ์ธ๋ถ ๋ณ์๋ฅผ ์ค์๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
Example )
public class Test {
public static void increment(int number) {
number = number + 1;
System.out.println("Inside increment: " + number);
}
public static void main(String[] args) {
int x = 5;
increment(x);
System.out.println("After increment: " + x);
}
}
์ถ๋ ฅ :
Inside increment: 6
After increment: 5
2. Call by Reference (์ฐธ์กฐ์ ์ํ ํธ์ถ)
๐
- Call by Reference ๋ฐฉ์์์๋ ํจ์๋ก ์ ๋ฌ๋ ์ธ์์ ์ฐธ์กฐ(์ฃผ์)๊ฐ ์ ๋ฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํจ์ ๋ด์์ ์ธ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ํธ์ถํ ์ชฝ์ ๋ณ์๋ ์ํฅ์ ๋ฐ์ต๋๋ค.
- ์๋ฐ๋ ์์ํ Call by Reference๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๋์ , ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ผ๋ก ์ ๋ฌ(Call by Value of Reference)ํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
- ์ด๊ฒ์ ๊ฐ์ฒด์ ์ฐธ์กฐ(๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ณต์ฌ๋ณธ)๊ฐ ํจ์๋ก ์ ๋ฌ๋๋ฏ๋ก, ํจ์ ๋ด์์ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
Example )
public class Test {
public static void modify(Point point) {
point.x = 5;
System.out.println("Inside modify: " + point.x);
}
public static void main(String[] args) {
Point myPoint = new Point(1);
modify(myPoint);
System.out.println("After modify: " + myPoint.x);
}
}
class Point {
public int x;
public Point(int x) {
this.x = x;
}
}
์ถ๋ ฅ :
Inside modify: 5
After modify: 5
3. Call by Name
๐
- Call by Name์ ํจ์์ ์ธ์๊ฐ ์ค์ ๋ก ์ฌ์ฉ๋ ๋๊น์ง ๊ทธ ํ๊ฐ๋ฅผ ์ง์ฐ์ํค๋ ์ ๋ฌ ๋ฐฉ์์ ๋๋ค.
- ์ด ๋ฐฉ์์ ์ฃผ๋ก ์ด๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ผ๋ถ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์๋ฉ๋๋ค.
- ์๋ฐ์์๋ ์ง์ ์ ์ธ Call by Name ๋ฉ์ปค๋์ฆ์ ์ง์ํ์ง ์์ง๋ง, ๋๋ค ํํ์์ ํตํด ์ ์ฌํ ํจ๊ณผ๋ฅผ ๋ผ ์ ์์ต๋๋ค.
Example )
public class Test {
public static void compute(Supplier<Integer> supplier) {
System.out.println("Computed value: " + supplier.get());
}
public static void main(String[] args) {
int value = 5;
compute(() -> value + 5);
}
}
์ถ๋ ฅ :
Computed value: 10
์์ง ์ฐธ์กฐ์ ์ํ ํธ์ถ์ด๋ ๊ฐ์ฒด ์์ฑ ๋ฑ์ ๋ํด ์์ํ์๊ฒ ์ง๋ง,
์ด๋ฐ ์ฝ๋๋ ์ด๋ ๊ฒ ์ถ๋ ฅ๋๋๊ตฌ๋๋ง ์ดํดํด์ฃผ์๋ฉด ๋ฉ๋๋ค!
๋ค์ ํฌ์คํ ์์๋ ์ ์ด๋ฌธ, ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.