[OOP] 오버로딩 & 메서드 시그니처 (overloading & method signature)

2023. 9. 2. 16:00· CS🖥️/OOP
목차
  1. 오버로딩
  2. Overload

 

오버로딩

오버로딩이란 메서드의 이름이 같지만 매개변수의 (개수, 타입)이 다른 경우를 말합니다.

즉, 같은 메서드 이름을 가지면서 매개변수의 타입 또는 개수가 다른 여러 개의 메서드를 정의할 수 있는 기능을 의미합니다.

이렇게 오버로딩된 메서드들은 컴파일러에 의해 메서드 호출 시 전달되는 인자의 타입 및 개수에 따라 적절한 메서드가 선택되어 실행됩니다.

이때, 로버로딩된 메서드들은 메서드 시그니처가 달라야 합니다. 

 

메서드 시그니처란?

  • 메소드 이름
  • 파라미터 수
  • 파라미터 타입의 순서

다음의 조건을 모두 만족하면 메서드의 signature가 같다고 할 수 있다.

 

Example

아래 두 메서드는 같은 signature라고 할 수 있다.

 public MyClass {   
    
    public String myMethod(String s1, Integer i1) {
        ....
    }
    
    private String myMethod(String s2, Integer i2) {
        ....
    }
 }

비록 파라미터의 이름이 다르지만, 이는 메서드 시그니처의 조건에 포함되지 않는다.

중요한 점은 메소드 시그니처가 같은 메서드가 같은 클래스에 2개 이상 존재 할 수 없다는 것이다.

따라서 위 클래스는 컴파일에러가 발생한다.

 

=> 여기서 알아야 할 점은 반환형은 메서드 시그니처에 포함되지 않는다.

만약 반환형이 메서드 시그니처에 포함된다면 jvm이 판단기준이 어려워진다.

메서드 시그니처(이름, 파라미터 수, 타입의 순서)가 모두 같은 두 개의 메서드가 반환형이 

1. Integer

2. Double 라고 가정한다면

System.out.println(myMethod());

라고 할 때, JVM은 어떤 메서드를 호출해야 할지 결정하지 못한다.

따라서 반환형은 메서드 시그니처에 포함되지 않는다.

=> 결론: 오버로딩할 때 반환타입은 같아야 한다.

 

Overload


// 1번
public static int getPower(int number){
        int result = number * number;
        return result;
    }
// 2번
public static int getPower(String strNumber){
        int number = Integer.parseInt(strNumber);
        return number;
    }
// 3번
public static int getPower(int number, int exponent){
        int result = 1;
        for (int i = 0; i < exponent; i++) {
            result *= number;
        }
        return result;
    }

1,2,3은 각각 메서드의 시그니처가 다른 오버로딩된 3개의 메서드이다. 

2번은 매개변수의 타입이 다르고

3번은 타입과 개수까지 다르다.

 

다시 한번,

말하면 메서드 오버로딩(overloading)이란 같은 이름의 메서드를 중복하여 정의하는 것이다.

    public static void main(String[] args) {
        // 메소드 오버로딩
        // 같은 이름의 메소드를 여러 번 선언 가능
        // 1. 전달값의 타입이 다르거나
        // 2. 전달값의 갯수가 다르거나

        // ==> 만약 반환형이 double형인 메서드를 하나 더 만들 시
        // is alreay defined 라고 에러 메시지를 발생하며
        // 다른 반환형의 함수를 정의할 수 없다고 나온다.

        System.out.println(getPower(3));
        System.out.println(getPower(4));
        System.out.println(getPower(3, 3));
        }

따라서 같은 class파일에서 컴파일하여도 잘 됨을 알 수 있다.

 


추가적으로 오버로딩할 때, 중복되는 부분을 제거할 수 있다.

   public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }

    public void setOprands(int left, int right, int third){
        this.left = left;
        this.right = right;
        this.third = third;
    }

이런 식으로 되어있다면, left와 right는 중복되는 코드이다.

따라서 this 키워드를 이용하여 

    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }

    public void setOprands(int left, int right, int third){
        this.setOprands(left, right);
        this.third = third;
    }

중복이 제거된 클린 한 코드를 만들 수 있다.

'CS🖥️ > OOP' 카테고리의 다른 글

[OOP] 오버라이딩 & 오버로딩 비교하기(핵심정리)  (0) 2023.09.02
[OOP] 오버라이딩 (overriding)  (0) 2023.09.02
[OOP] 상속과 생성자 & super  (0) 2023.09.02
  1. 오버로딩
  2. Overload
'CS🖥️/OOP' 카테고리의 다른 글
  • [OOP] 오버라이딩 & 오버로딩 비교하기(핵심정리)
  • [OOP] 오버라이딩 (overriding)
  • [OOP] 상속과 생성자 & super
code_wizard
code_wizard
헛둘헛둘
code_wizard
코드의 신비: 컴퓨터 마법사의 일기
code_wizard
전체
오늘
어제
  • 분류 전체보기 (61)
    • 생각정리 (2)
    • Project (7)
      • Caston Design (5)
      • 상명대 축제 2023 "비상(飛上)" (1)
      • 취뽀Lab (1)
    • Solo Project (4)
      • 소셜로그인+JWT (4)
    • Back-end (4)
      • Spring (4)
      • Test (0)
    • DevOps (1)
      • Docker (1)
    • Tip💡 (2)
    • CS🖥️ (5)
      • Operating System (1)
      • Network (0)
      • OOP (4)
    • Programming (35)
      • Data Structure (3)
      • Algorithm(Python) (26)
      • Java (1)
      • Python (5)
    • DeepLearning (1)
    • sw마에스트로 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SWEA
  • 오버라이딩
  • super
  • 경사하강법
  • 평균오차제곱
  • 백준
  • BFS
  • 오블완
  • 그리디알고리즘
  • 티스토리챌린지
  • java
  • 리트코드
  • Docker
  • 캡스톤디자인
  • Baekjoon
  • jpa
  • 오버로딩
  • 20115번
  • 구현
  • SW마에스트로
  • 문자열
  • MSE
  • 프로그래머스
  • 축제사이트
  • 21966번
  • 도커커맨드

최근 댓글

최근 글

hELLO
code_wizard
[OOP] 오버로딩 & 메서드 시그니처 (overloading & method signature)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.