โ˜•Java

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

Luvbit 2024. 5. 4. 13:56


๐Ÿฉท Java์˜ ํ•จ์ˆ˜๋ž€?

Java์—์„œ์˜ ํ•จ์ˆ˜๋Š” ๋ณดํ†ต ๋ฉ”์†Œ๋“œ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ, ๋ฉ”์†Œ๋“œ๋Š” ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” 
๊ธฐ๋Šฅ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿ’› ๋ฉ”์„œ๋“œ์˜ ์ •์˜

- ์ž๋ฐ”์—์„œ์˜ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์†Œ๋“œ(method)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ, ๊ฐ์ฒด์˜ ํ–‰๋™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

- ์ž๋ฐ”๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค์˜ ์ผ๋ถ€๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

- ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ(์†์„ฑ)์™€ ๊ธฐ๋Šฅ(๋ฉ”์†Œ๋“œ)์„ ํ•จ๊ป˜ ์บก์Аํ™”ํ•˜์—ฌ, ๋ชจ๋“ˆ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ, ์ •๋ณด ์€๋‹‰ ๋“ฑ์˜ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ฃผ์š” ์›์น™์„ ์‹คํ˜„ํ•ฉ๋‹ˆ๋‹ค.

- ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

 

๐Ÿค ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ)์˜ ์ข…๋ฅ˜

  ํ‘œ์ค€ ํ•จ์ˆ˜
(Standard Functions)
์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜
(User-Defined Functions)
์ •์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋‚ด์žฅ๋˜์–ด
์žˆ๋Š” ํ•จ์ˆ˜
ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด
์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ํ•จ์ˆ˜
ํŠน์ง• ๋‚ด์žฅ ๊ธฐ๋Šฅ, ์‹ ๋ขฐ์„ฑ, ์ด์‹์„ฑ ๋งž์ถคํ˜• ๊ตฌํ˜„, ์œ ์—ฐ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ
์˜ˆ์‹œ Math.sqrt(double a),
System.out.println(String x), 
Arrays.sort(array)
ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ํ•จ์ˆ˜

 

 

 

 

 

๐ŸคŽ  ๋ฉ”์†Œ๋“œ์˜ ์ค‘์š”์„ฑ

1. ๋ชจ๋“ˆ์„ฑ(Modularity)

ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์€, ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ๋Š” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ณ , ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.
๊ฐ ํ•จ์ˆ˜๋Š” ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์†ํ™”ํ•˜๊ณ , ์˜ค๋ฅ˜๋ฅผ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

2. ์žฌ์‚ฌ์šฉ์„ฑ(Reusability)

์ผ๋‹จ ์ž˜ ์„ค๊ณ„๋œ ํ•จ์ˆ˜๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด, ๊ทธ ํ•จ์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ํ”ผํ•˜๊ณ , ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, ์ˆ˜ํ•™ ๊ณ„์‚ฐ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋™์ผํ•˜๊ฒŒ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์ •๋ณด ์€๋‹‰(Information Hiding)

ํ•จ์ˆ˜๋Š” ์„ธ๋ถ€ ๊ตฌํ˜„์„ ์ˆจ๊ธฐ๋ฉด์„œ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ทธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์•Œ ํ•„์š” ์—†์ด, ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜๊ณ  ๊ธฐ๋Œ€ํ•˜๋Š” ์ถœ๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Š” ์‹œ์Šคํ…œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ ๋„ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

4. ์œ ์ง€ ๋ณด์ˆ˜์„ฑ(Maintainability)

ํ•จ์ˆ˜๋กœ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ๊ฐ ๋ถ€๋ถ„์ด ์ž˜ ์ •์˜๋˜์–ด ์žˆ์–ด ํ”„๋กœ๊ทธ๋žจ์„ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ๊ด€๋ จ ํ•จ์ˆ˜๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ „์ฒด ์ฝ”๋“œ ๊ธฐ๋ฐ˜์— ๋Œ€ํ•œ ์ดํ•ด ์—†์ด๋„ ๋ณ€๊ฒฝ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ(Testability)

ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๊ฐ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.
์ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์œผ๋กœ, ๊ฐ ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ์ •ํ™•ํžˆ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•จ์ˆ˜๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•จ์œผ๋กœ์จ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ์„ฑ์„ ํ–ฅ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. ์ถ”์ƒํ™”(Abstraction)

ํ•จ์ˆ˜๋Š” ๋ณต์žกํ•œ ์ž‘์—…์„ ์ถ”์ƒํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋ณต์žกํ•œ ๋กœ์ง์„ ํ•จ์ˆ˜ ๋’ค์— ์ˆจ๊ธฐ๊ณ , ๊ฐ„๋‹จํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด์ ์ธ ์„ค๊ณ„๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ๋” ๋†’์€ ์ˆ˜์ค€์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 


 

๐Ÿฉต ๋ฉ”์†Œ๋“œ์˜ ๊ตฌ์กฐ

-  ๋ฉ”์†Œ๋“œ๋Š” ํด๋ž˜์Šค ๋‚ด์— ์ •์˜๋˜๋ฉฐ, ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค.

   ๋ฉ”์†Œ๋“œ๋Š” ํ˜ธ์ถœ(call)๋  ๋•Œ ์‹คํ–‰๋˜๋ฉฐ, ์ž…๋ ฅ(๋งค๊ฐœ๋ณ€์ˆ˜), ์ฒ˜๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ์ถœ๋ ฅ(๋ฐ˜ํ™˜๊ฐ’)์˜ ์ˆœ์„œ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

์ ‘๊ทผ์ œ์–ด์ž ๋ฐ˜ํ™˜ํƒ€์ž… ๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜๋ชฉ๋ก) {
    // ์‹คํ–‰ ์ฝ”๋“œ
    return ๋ฐ˜ํ™˜๊ฐ’;
}

 

  • ์ ‘๊ทผ์ œ์–ด์ž(Access Modifier): ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค (public, protected, private, ์ƒ๋žต ๊ฐ€๋Šฅ).
  • ๋ฐ˜ํ™˜ํƒ€์ž…(Return Type): ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ void๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฉ”์†Œ๋“œ๋ช…(Method Name): ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜๋ชฉ๋ก(Parameter List): ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ํ•„์š”ํ•œ ์ž…๋ ฅ๊ฐ’์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜ํ™˜๊ฐ’(Return Value): ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ํ›„ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. void์ธ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

Example ) 

1. ๋ฉ”์†Œ๋“œ ์ •์˜

public class MySum {

    // ๋‘ ์ •์ˆ˜์˜ ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
    public int sum(int num1, int num2) {
        int sum = num1 + num2;
        return sum;
    }
}

 

 

2. ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

public class Main {
    public static void main(String[] args) {
        MySum mySum = new MySum(); 
        // ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ›„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ํ•˜๋‹จ ์ฐธ์กฐ
        int result = mySum(5, 3);
        System.out.println("Result: " + result);  // ์ถœ๋ ฅ: Result: 8
    }
}

 

 

 

 

 

 

 

 

ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ์ž‘์—…์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค!
๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋„ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์ด์–ด๋‚˜๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.
๐Ÿ™‡‍โ™€๏ธ