Signature 에 관하여

2025. 1. 22. 21:22·java

Java에서 **시그니처(Signature)**는 메서드를 고유하게 식별하는 중요한 요소입니다. 메서드 오버로딩이나 클래스의 설계에서 시그니처를 이해하는 것은 필수적입니다. 이 글에서는 Java 시그니처의 개념, 구성 요소, 관련 사례와 함께 자세히 알아보겠습니다.

1. Java 시그니처란?

시그니처(Signature)는 메서드의 이름과 매개변수 리스트를 결합한 것으로, 메서드를 고유하게 식별합니다. 컴파일러는 시그니처를 기준으로 동일한 클래스 내에서 메서드를 구분합니다.

시그니처의 구성 요소

  • 메서드 이름
  • 매개변수의 순서, 타입, 개수

반환 타입과 접근 제어자는 시그니처에 포함되지 않습니다.

예제

public class SignatureExample {
    // 서로 다른 시그니처를 가진 메서드들
    public void print(String message) {
        System.out.println(message);
    }

    public void print(int number) {
        System.out.println(number);
    }

    public void print(String message, int number) {
        System.out.println(message + " " + number);
    }
}

위의 예제에서 print 메서드는 이름이 동일하지만 매개변수 리스트가 달라서 각각 고유한 시그니처를 가집니다.


2. 메서드 시그니처의 특징

2.1 반환 타입은 시그니처에 포함되지 않음

반환 타입은 메서드 오버로딩을 구분할 수 없습니다. 다음 코드는 컴파일 오류를 발생시킵니다:

public class InvalidSignature {
    // 컴파일 오류: 반환 타입만 다른 메서드는 오버로딩 불가
    public int calculate(int a) {
        return a * 2;
    }

    public double calculate(int a) { // 오류 발생
        return a * 2.0;
    }
}

2.2 접근 제어자와 예외는 시그니처에 영향을 주지 않음

다음 코드도 컴파일 오류를 발생시킵니다:

public class InvalidAccessModifier {
    public void display(String text) {}

    private void display(String text) {} // 오류 발생: 시그니처가 동일함
}

3. 메서드 오버로딩과 시그니처

**메서드 오버로딩(Method Overloading)**은 동일한 이름의 메서드를 시그니처를 기준으로 구분하는 기능입니다. 이는 다양한 매개변수 조합으로 동일한 동작을 수행할 수 있는 유연성을 제공합니다.

오버로딩 예제

public class OverloadingExample {
    public void greet() {
        System.out.println("Hello, World!");
    }

    public void greet(String name) {
        System.out.println("Hello, " + name + "!");
    }

    public void greet(String name, int age) {
        System.out.println("Hello, " + name + ". You are " + age + " years old.");
    }
}

위 코드에서는 greet 메서드가 매개변수의 조합에 따라 다양하게 정의될 수 있습니다.


4. 메서드 시그니처와 오버라이딩

**메서드 오버라이딩(Method Overriding)**은 부모 클래스의 메서드를 하위 클래스에서 재정의하는 기능입니다. 이때, 시그니처가 정확히 동일해야 합니다.

오버라이딩 예제

class Parent {
    public void show() {
        System.out.println("Parent class method");
    }
}

class Child extends Parent {
    @Override
    public void show() {
        System.out.println("Child class method");
    }
}

위 코드에서 show 메서드는 시그니처가 동일하므로 오버라이딩됩니다. 만약 시그니처가 다르면 별개의 메서드로 취급됩니다.

5. 생성자와 시그니처

**생성자(Constructor)**도 메서드와 동일하게 시그니처를 가지고, 이를 기반으로 오버로딩됩니다.

생성자 오버로딩 예제

public class ConstructorExample {
    private String name;
    private int age;

    public ConstructorExample(String name) {
        this.name = name;
    }

    public ConstructorExample(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

위 예제에서 생성자는 서로 다른 시그니처를 가지므로 동일한 클래스에 함께 정의될 수 있습니다.


6. 결론

Java 시그니처는 메서드와 생성자를 고유하게 식별하는 중요한 요소입니다. 이를 기반으로 메서드 오버로딩과 오버라이딩이 동작하며, 프로그램의 유연성과 유지보수성을 높이는 데 중요한 역할을 합니다.

'java' 카테고리의 다른 글

정적 바인딩과 동적 바인딩에 관하여  (0) 2025.02.04
Java 상속에 관하여  (0) 2025.02.03
BufferedReader와 Scanner의 차이 및 비교  (0) 2025.01.21
숏서킷 연산에 관하여  (0) 2025.01.20
Interface 에 관하여  (1) 2025.01.19
'java' 카테고리의 다른 글
  • 정적 바인딩과 동적 바인딩에 관하여
  • Java 상속에 관하여
  • BufferedReader와 Scanner의 차이 및 비교
  • 숏서킷 연산에 관하여
heejunp
heejunp
희준개발
  • heejunp
    희준개발
    heejunp
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • java (16)
      • spring (1)
        • test (0)
      • web (1)
      • cloud (1)
      • database (2)
      • algorithm (7)
      • OS (2)
      • sonarqube (0)
      • ai (1)
      • 기타 (2)
      • 사고 (1)
      • go (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    heejunp
    Signature 에 관하여
    상단으로

    티스토리툴바