โ˜•Java

[Java ์ดํ•ดํ•˜๊ธฐ] 6. ์ž๋ฐ”์˜ ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๋ž€? (2)

Luvbit 2024. 5. 4. 14:12


 

๐Ÿฉท ๋ฉ”์„œ๋“œ์˜ ์ข…๋ฅ˜

 

- ์ž๋ฐ”์—์„œ ๋ฉ”์„œ๋“œ๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์œ ํ˜•์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์™€ ์ •์  ๋ฉ”์„œ๋“œ.

   ์ด ๋‘ ์œ ํ˜•์˜ ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉ ๋ฐฉ์‹, ์ ‘๊ทผ ๋ฐฉ์‹, ๊ทธ๋ฆฌ๊ณ  ์šฉ๋„์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


 

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

 

 

 

 

 

 

 

 

 

์•„์ง ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ์ด๋‚˜ ๊ฐ์ฒด ์ƒ์„ฑ ๋“ฑ์— ๋Œ€ํ•ด ์ƒ์†Œํ•˜์‹œ๊ฒ ์ง€๋งŒ,
์ด๋Ÿฐ ์ฝ”๋“œ๋Š” ์ด๋ ‡๊ฒŒ ์ถœ๋ ฅ๋˜๋Š”๊ตฌ๋‚˜๋งŒ ์ดํ•ดํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค!

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ œ์–ด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ฐพ์•„๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค.