λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Java] λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜ Method Signature

좜처

ChatGPT

 

κ°œμš”

λ§€μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” λ©”μ„œλ“œλ₯Ό κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” 정보λ₯Ό μ˜λ―Έν•œλ‹€. λ©”μ„œλ“œμ˜ 이름, λ§€κ°œλ³€μˆ˜ νƒ€μž… 및 μˆœμ„œλ₯Ό ν¬ν•¨ν•˜λŠ” κ°œλ…μ΄λ‹€. μžλ°”μ—μ„œλŠ” 두 λ©”μ„œλ“œκ°€ 같은 이름을 가지고 μžˆμ–΄λ„ λ‹€λ₯Έ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό 가지면 λ‹€λ₯Έ λ©”μ„œλ“œλ‘œ κ°„μ£Όλœλ‹€. μ‹œκ·Έλ‹ˆμ²˜λŠ” λ©”μ„œλ“œμ˜ κ³ μœ μ„±μ„ κ²°μ •ν•˜κ³ , λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©κ³Ό 같은 κΈ°λŠ₯을 μ§€μ›ν•œλ‹€.

 

κ΅¬μ„±μš”μ†Œ

  1. λ©”μ„œλ“œ 이름 Method Name
  2. λ§€κ°œλ³€μˆ˜ νƒ€μž… Parameter Types
  3. λ§€κ°œλ³€μˆ˜μ˜ 개수 Number of Parameters

1. λ©”μ„œλ“œ 이름 Method Name

  • λ©”μ„œλ“œμ˜ κ³ μœ ν•œ 이름이닀.
  • 예 : caculate, printDetails, addNumbers

2. λ§€κ°œλ³€μˆ˜ νƒ€μž… Parameter Types

  • λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜ νƒ€μž…κ³Ό μˆœμ„œλ₯Ό ν¬ν•¨ν•œλ‹€.
  • λ§€κ°œλ³€μˆ˜μ˜ 이름은 μ‹œκ·Έλ‹ˆμ²˜μ— ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€.
  • 예 : (int, String), (double, double, int)

3. λ§€κ°œλ³€μˆ˜μ˜ 개수 Number of Parameters

  • λ§€μ„œλ“œκ°€ λ°›λŠ” λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜μ΄λ‹€.
  • λ©”μ„œλ“œμ˜ μ˜€λ²„λ‘œλ”©μ„ κ²°μ •ν•˜λŠ” μ€‘μš”ν•œ μš”μ†Œμ΄λ‹€.

예제 μ½”λ“œ

public class MathOperations {

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: add(int, int)
    public int add(int a, int b) {
        return a + b;
    }

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: add(double, double)
    public double add(double a, double b) {
        return a + b;
    }

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: add(int, int, int)
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: multiply(int, int)
    public int multiply(int a, int b) {
        return a * b;
    }

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: multiply(int, int, int)
    public int multiply(int a, int b, int c) {
        return a * b * c;
    }
}

 

  • add(int, int): 두 개의 μ •μˆ˜ν˜• λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” add λ©”μ„œλ“œ
  • add(double, double): 두 개의 μ‹€μˆ˜ν˜• λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” add λ©”μ„œλ“œ
  • add(int, int, int): μ„Έ 개의 μ •μˆ˜ν˜• λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” add λ©”μ„œλ“œ
  • multiply(int, int): 두 개의 μ •μˆ˜ν˜• λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” multiply λ©”μ„œλ“œ
  • multiply(int, int, int): μ„Έ 개의 μ •μˆ˜ν˜• λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ” multiply λ©”μ„œλ“œ

각 λ©”μ„œλ“œλŠ” μ„œλ‘œ λ‹€λ₯Έ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό 가지고 있기 λ•Œλ¬Έμ— μžλ°”μ—μ„œ μ˜€λ²„λ‘œλ”©λœ λ©”μ„œλ“œλ‘œ κ°„μ£Όν•œλ‹€.

 

λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ™€ μ˜€λ²„λ‘œλ”©

λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©μ€ 같은 이름을 가진 λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬ 개 μ •μ˜ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” κΈ°λŠ₯으둜, λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ˜ 차이λ₯Ό 톡해 κ΅¬ν˜„λœλ‹€.

 

μ˜ˆμ‹œ

public class Printer {

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: print(String)
    public void print(String message) {
        System.out.println(message);
    }

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: print(int)
    public void print(int number) {
        System.out.println(number);
    }

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: print(double)
    public void print(double number) {
        System.out.println(number);
    }
}

 

 

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ 'print' λ©”μ„œλ“œκ°€ μ—¬λŸ¬ 번 μ •μ˜λ˜μ–΄ 있으며, λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…κ³Ό κ°œμˆ˜κ°€ λ‹€λ₯΄κΈ°μ— 각각 λ‹€λ₯Έ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό κ°€μ§€κ²Œ λœλ‹€. 

  • print(String)은 λ¬Έμžμ—΄μ„ 좜λ ₯
  • print(int)λŠ” μ •μˆ˜λ₯Ό 좜λ ₯
  • print(double)은 μ‹€μˆ˜λ₯Ό 좜λ ₯

μ΄λŸ¬ν•œ μ˜€λ²„λ‘œλ”©μ„ 톡해 print λ©”μ„œλ“œλŠ” λ‹€μ–‘ν•œ νƒ€μž…μ˜ 데이터λ₯Ό 좜λ ₯ν•  수 μžˆλ‹€.

 

λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ™€ λ°˜ν™˜ νƒ€μž…

λ§€μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” λ°˜ν™˜ νƒ€μž…μ„ ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€. 즉, λ™μΌν•œ 이름과 λ§€κ°œλ³€μˆ˜λ₯Ό 가진 λ©”μ„œλ“œλŠ” μ„œλ‘œ λ‹€λ₯Έ λ°˜ν™˜ νƒ€μž…μ„ κ°€μ§ˆ 수 μ—†λ‹€. λ°˜ν™˜ νƒ€μž…λ§Œ λ‹€λ₯Έ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λ €κ³  ν•˜λ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

 

μ˜ˆμ‹œ

public class Example {

    // λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜: getData(int)
    public int getData(int a) {
        return a * 2;
    }

    // 컴파일 였λ₯˜ λ°œμƒ: λ™μΌν•œ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό 가진 λ©”μ„œλ“œκ°€ 이미 μ‘΄μž¬ν•©λ‹ˆλ‹€.
    /*
    public double getData(int a) {
        return a * 2.0;
    }
    */
}

 

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” 두 번째 getData λ©”μ„œλ“œλŠ” 컴파일 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¨λ‹€. λ™μΌν•œ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό 가진 λ©”μ„œλ“œκ°€ 이미 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— λ°˜ν™˜ νƒ€μž…λ§Œ λ‹€λ₯Έ λ©”μ„œλ“œλ₯Ό μΆ”κ°€ν•  수 μ—†λ‹€.

 

λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ™€ JVM

JVM은 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό μ‚¬μš©ν•΄ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•œλ‹€. λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.

1. λ‘œλ“œλœ ν΄λž˜μŠ€μ—μ„œ λ©”μ„œλ“œ μ°ΎκΈ° 

λ©”μ„œλ“œ 호좜 μ‹œ JVM은 λ‘œλ“œλœ 클래슀의 λ©”μ„œλ“œ ν…Œμ΄λΈ”μ—μ„œ ν•΄λ‹Ή λ©”μ„œλ“œ 이름과 μ‹œκ·Έλ‹ˆμ²˜λ₯Ό μ°Ύμ•„λ³Έλ‹€.

2. 동적 바인딩 Dynamic Linking

μ˜€λ²„λ‘œλ”©λœ λ©”μ„œλ“œκ°€ μžˆμ„ 경우, JVM은 호좜된 λ©”μ„œλ“œμ˜ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό κΈ°μ€€μœΌλ‘œ μ μ ˆν•œ λ©”μ„œλ“œλ₯Ό μ„ νƒν•œλ‹€.

3. λ©”μ„œλ“œ 호좜

μ„ νƒλœ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³  κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.

 

κ²°λ‘ 

λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” 각 λ©”μ„œλ“œλ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜κ³ , λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ˜€λ²„λ‘œλ”©ν•΄ μ½”λ“œμ˜ μœ μ—°μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ 높인닀. 이λ₯Ό 톡해 μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ‹€μ–‘ν•œ 상황에 λŒ€μ‘ν•  수 있으며, ν™•μž₯ κ°€λŠ₯ν•œ ꡬ쑰λ₯Ό μœ μ§€ν•  수 μžˆλ‹€.

 


λ©”μ†Œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” 심볼릭 λ ˆνΌλŸ°μŠ€μ΄λ‹€.

  • λ©”μ†Œλ“œ μ‹œκ·Έλ‹ˆμ²˜ ⊂ 심볼릭 레퍼런슀

ChatGPTμ—κ²Œ 이 κΈ€μ˜ 좜처λ₯Ό λ¬Όμ—ˆλ‹€.

λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ— λŒ€ν•œ 좜처

  1. Java Language Specification (JLS)
    • λ‚΄μš©: Java μ–Έμ–΄ 사양은 λ©”μ„œλ“œμ˜ μ •μ˜ 및 μ‹œκ·Έλ‹ˆμ²˜λ₯Ό ν¬ν•¨ν•œ μžλ°”μ˜ λͺ¨λ“  문법과 κΈ°λŠ₯을 κ³΅μ‹μ μœΌλ‘œ μ„€λͺ…ν•˜λŠ” λ¬Έμ„œμž…λ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” λ©”μ„œλ“œμ˜ 이름과 λ§€κ°œλ³€μˆ˜ νƒ€μž…μ˜ μˆœμ„œλ‘œ μ •μ˜λ©λ‹ˆλ‹€.
      • 리턴 νƒ€μž…μ€ λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ— ν¬ν•¨λ˜μ§€ μ•ŠμœΌλ―€λ‘œ, 같은 이름과 λ§€κ°œλ³€μˆ˜λ₯Ό 가진 λ‹€λ₯Έ 리턴 νƒ€μž…μ˜ λ©”μ„œλ“œλŠ” μ˜€λ²„λ‘œλ”©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    • 링크: Java Language Specification
  2. Effective Java by Joshua Bloch
    • λ‚΄μš©: 이 책은 Java의 λͺ¨λ²” 사둀λ₯Ό μ œμ‹œν•˜λ©°, λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©κ³Ό μ‹œκ·Έλ‹ˆμ²˜μ˜ μ€‘μš”μ„±μ„ κ°•μ‘°ν•©λ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©(overloading)을 μ§€μ›ν•˜λŠ” 핡심 μš”μ†Œμž…λ‹ˆλ‹€.
      • μ˜€λ²„λ‘œλ”© μ‹œ, μ„œλ‘œ λ‹€λ₯Έ λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό 가진 λ©”μ„œλ“œλŠ” λ™μΌν•œ 이름을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 링크: Effective Java on Amazon
  3. Java: The Complete Reference by Herbert Schildt
    • λ‚΄μš©: 이 책은 Java의 λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ„€λͺ…ν•˜λ©°, λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ™€ κ΄€λ ¨λœ μ˜ˆμ œμ™€ ν•¨κ»˜ μžμ„Έν•œ μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” λ©”μ„œλ“œ 호좜 μ‹œ μ •ν™•ν•œ λ©”μ„œλ“œλ₯Ό μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
      • νŒŒλΌλ―Έν„° νƒ€μž…κ³Ό μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ λ‹€λ₯Έ λ©”μ„œλ“œλ‘œ μΈμ‹λ©λ‹ˆλ‹€.
    • 링크: Java: The Complete Reference on Amazon
  4. "Java Programming" by Joyce Farrell
    • λ‚΄μš©: Java ν”„λ‘œκ·Έλž˜λ°μ„ 처음 λ°°μš°λŠ” μ‚¬λžŒλ“€μ„ μœ„ν•œ 이 책은 λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ˜ μ •μ˜μ™€ μ€‘μš”μ„±μ„ μ‰½κ²Œ μ„€λͺ…ν•©λ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” μžλ°”μ—μ„œ λ©”μ„œλ“œ κ°„μ˜ 차이λ₯Ό λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•œ μš”μ†Œμž…λ‹ˆλ‹€.
      • μ‹œκ·Έλ‹ˆμ²˜κ°€ λ™μΌν•œ λ©”μ„œλ“œλŠ” μ‘΄μž¬ν•  수 μ—†μœΌλ©°, 각 λ©”μ„œλ“œλŠ” κ³ μœ ν•œ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.
    • 링크: Java Programming on Amazon
  5. Oracle's Official Java Tutorials
    • λ‚΄μš©: Oracle의 곡식 μžλ°” νŠœν† λ¦¬μ–Όμ€ μžλ°”μ˜ κΈ°λ³Έ 문법과 κΈ°λŠ₯을 배우기 μœ„ν•œ 자료둜, λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜μ˜ κ°œλ…μ„ λͺ…ν™•νžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.
    • μ„€λͺ…:
      • λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λŠ” λ©”μ„œλ“œ μ˜€λ²„λ‘œλ”©κ³Ό λ‹€ν˜•μ„±(polymorphism)μ—μ„œ μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.
      • μ‹œκ·Έλ‹ˆμ²˜λŠ” λ©”μ„œλ“œμ˜ μ‹λ³„μžλ‘œ μž‘μš©ν•˜μ—¬, μ»΄νŒŒμΌλŸ¬κ°€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μ–΄λ–€ λ©”μ„œλ“œλ₯Ό 선택할지 κ²°μ •ν•©λ‹ˆλ‹€.
    • 링크: Oracle Java Tutorials