λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
β˜•Java

[Java μ΄ν•΄ν•˜κΈ°] 5. μžλ°”μ˜ ν•¨μˆ˜(λ©”μ†Œλ“œ)λž€? (1)

by Luvbit 2024. 5. 4.


🩷 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
    }
}

 

 

 

 

 

 

 

 

ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ„ λ”μš± 효율적으둜 κ΄€λ¦¬ν•˜κΈ° μ‰¬μš΄ μž‘μ—…μœΌλ‘œ λ§Œλ“­λ‹ˆλ‹€!
λ‹€μŒ ν¬μŠ€νŠΈμ—μ„œλ„ ν•¨μˆ˜μ— λŒ€ν•΄μ„œ μ΄μ–΄λ‚˜κ°€κ² μŠ΅λ‹ˆλ‹€.
πŸ™‡‍♀️