본문 바로가기

Java

java - overloading

overloading

 

< method signiture >

메소드 오버로딩의 핵심은 바로 메소드 시그니처(method signature)에 있습니다.

메소드 시그니처란 메소드의 선언부에 명시되는 매개변수의 리스트를 가리킵니다.

만약 두 메소드가 매개변수의 개수와 타입, 그 순서까지 모두 같다면, 이 두 메소드의 시그니처는 같다고 할 수 있습니다.

 

< define > 

메소드 오버로딩(overloading)이란 같은 이름의 메소드를 중복하여 정의하는 것을 의미합니다.

자바에서는 원래 한 클래스 내에 같은 이름의 메소드를 둘 이상 가질 수 없습니다.

 

하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메소드를 작성할 수 있습니다.

즉, 메소드 오버로딩은 서로 다른 시그니처를 갖는 여러 메소드를 같은 이름으로 정의하는 것이라고 할 수 있습니다.

 

이러한 메소드 오버로딩을 사용함으로써 메소드에 사용되는 이름을 절약할 수 있습니다.

또한, 메소드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 크게 신경을 쓰지 않고 호출할 수 있게 됩니다.

메소드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나입니다.

 

메소드 오버로딩의 대표적인 예로는 println() 메소드를 들 수 있습니다.

println() 메소드는 전달받는 매개변수의 타입에 따라 다음과 같이 다양한 원형 중에서 적절한 원형을 호출하게 됩니다.

 

< example > 

class Test {
	void display(int num1) { 
    	System.out.println(num1); 
   	    }
    //1      
	void display(int num1, int num2) { 
    	System.out.println(num1 * num2); 
        }
        
	static void display(int num1, double num2) { 
    	System.out.println(num1 + num2); 
        }
}

public class prog {
	public static void main(String[] args) {
		Test myfunc = new Test();
		myfunc.display(10);
		myfunc.display(10, 20);
		myfunc.display(10, 3.14);
        //2
		myfunc.display(10, 'a');
	}
}

위의 예제처럼 메소드의 오버로딩은 매개변수의 타입뿐만 아니라 매개변수의 개수를 달리해도 작성할 수 있습니다.

위 예제의 ②번 라인의 display() 메소드 호출은 영문 소문자 'a'의 아스키 코드값이 97이므로, int형으로 자동 타입 변환되어 ①번 라인의 display() 메소드가 호출될 것입니다.

byte형 → short형 → int형 → long형 → float형 → double형

                 char형 ↗

'Java' 카테고리의 다른 글

java - Scope  (2) 2023.03.13
java - overriding  (0) 2023.03.13
java - Parameters  (0) 2023.03.13
java - Constructors  (0) 2023.03.13
java - Methods  (1) 2023.03.13