Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

메소드 다중 정의(method overloading) 본문

Java

메소드 다중 정의(method overloading)

빌드이너프 2023. 2. 4. 14:25
클래스를 이용하기 위해 보통 클래스로부터 객체를 생성해야함
한 클래스로부터 여러 개의 객체들을 생성할 수 있고, 이 객체들을 구별할 수 있어야함
-> 이를 위해 객체를 가리키는 참조변수를 사용한다
참조 변수를 이용하여 객체가 제공하는 서비스를 이용하고, 이것이 객체 지향 프로그래밍의 핵심 중의 하나이다

 

메소드 다중 정의(method overloading)

  • 한 클래스내에 같은 이름을 가지는 두 개 이상의 메소드들이 있을 수 있다
  • 한 클래스 내에 같은 이름을 가지는 메소드를 여러 개 정의하는 것을 메소드 다중 정의라고 부름
  • 비슷한 메소드들을 다른 유형의 데이터를 가지고 실행할 필요가 있을 때 유용함
  • 예로 문자열과 정수 등과 같은 다양한 유형의 데이터를 출력할 필요가 있다, 이를 위해 System 클래스는 여러 개의 println 메소드를 제공함

다중화된 메소드들은 다음 조건 중 하나를 만족해야함

  1. 형식 매개 변수들의 수가 서로 다름
  2. 형식 매개 변수들의 수가 같을 때는 형식 매개 변수들 중 적어도 하나의 데이터형이 다름

두 가지로 나누기를 수행하는 프로그램

// 두 가지로 나누기를 수행함
public class Dibvision {
    // 정수형 나누기
    public static int divide(int amount, int number)
    {
        return amount / number;
    }

    // 실수형 나누기
    public static double divide(double amount, double number)
    {
        return amount / number;
    }

    public static void main(String[] args) {
        int result1 = divide(10, 4);
        double result2 = divide(10.0, 4.0);

        System.out.println("정수형 나누기 결과: " + result1);
        System.out.println("실수형 나누기 결과: " + result2);
    }
}

출력 결과

정수형 나누기 결과: 2
실수형 나누기 결과: 2.5

클래스 Division 내에 divide 메소드가 두 개 존재

public static int divide(int amount, int number) {...}
public static double divide(double amount, double number) {...}
  • 위 메소드들은 같은 이름을 가지고 매개 변수들의 수도 같음
  • 그러나 첫 번째 메소드는 매개변수들의 데이터 형이 int 형, 두 번째 메소드는 매개변수들의 데이터형이 double 형
  • 따라서 main 메소드에서 다음 호출문은 첫 번째 divide 메소드가 대응됨 int result1 = divide(10, 4)
  • 다음 호출문은 두 번째 divide 메소드가 대응됨 double result2 = divide(10.0, 4.0);

다음 메소드들은 같은 클래스내에 정의할 수 없음

public double add(int x, int y) {...}
public int add(int x, int y) {...}
  • 두 개의 메소드들이 반환형을 제외하고 머리부가 같은 경우는 허용되지 않음
  • 허용되지 않는 이유: 메소드 호출문이 어느 add 메소드에 대응하는지 판별할 수 없기 때문

'Java' 카테고리의 다른 글

객체와 참조  (0) 2023.02.06
생성자 메소드(Default constructor)  (0) 2023.02.06
접근자 메소드(get method) / 변경자 메소드(set method  (1) 2023.02.04
접근 수정자(Access Modifier) public / private  (0) 2023.02.03
클래스  (0) 2023.02.03