Notice
Recent Posts
Recent Comments
Link
«   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
Tags
more
Archives
Today
Total
관리 메뉴

나의 IT일지

메서드 오버로딩 본문

프로그래밍 언어/Java

메서드 오버로딩

세레프 2023. 4. 5. 07:25

 프로그램은 여러 명령어와 여러 연산자를 통해 작성된다. 그리고, 여러 명령어와 여러 연산자들을 메서드로 묶여서 사용되는 경우가 많은데, 이러한 명령어, 연산자, 메서드를 실행하는 것로딩이라고 한다.

 그리고 명령어, 연산자, 매서드는 한 타입의 값에만 적용되는 것이 아닌, 여러 타입의 값에 같은 이름으로 같은 기능을 실행하는 경우가 있는데 이를 오버로딩이라고 한다. 예시로, 산술 연산자는 정수형 산술연산자, 실수형 산술연산자로 구분되어 있지 않고, 같은 기호의 산술연산자를 사용한다.

package pack0405;

public class Code1 {
	
	public static void main(String[] args) {
    
    int a=100,b=200;
    float c=10.2f,d=10.3f;
    
    System.out.println(a+b);
    System.out.println(c+d);

    }

 

 

메서드 오버로딩

 JVM은 함수를 구분할 때 다음과 같은 방법으로 메서드를 구분한다.

  • 함수명
  • 함수의 매개변수의 개수
  • 함수의 매개변수의 타입

 그래서 일반적으로 매서드를 사용할 때, 보통은 메서드명을 구분해서 사용한다. 하지만 같은 기능을 가진 메서드일 경우, 같은 이름으로 정의하는 경우가 있다. 이를 메서드 오버로딩이라고 하는데, 메서드 오버로딩이란 이름이 같은 메서드를 여러 개 정의하지만 매개변수의 개수와 타입은 다르게 정의하는 것으로, 하나의 이름으로 같은 기능을 다른 타입의 변수에 사용할 때 사용한다.

 대표적인 예시가 println매서드인데, println매서드는 호출할 때 주어진 매개값이 타입에 따라 java.io.PrintStream클래스에 오버로딩 된 println메서드 중 하나를 호출한다.

 매서드 오버로딩의 특징으로는 다음과 같다.

  • 매개변수의 타입이 일부 일치 하지 않을경우 자동 타입변환이 가능한지 검사

 JVM은 일차적으로 매개변수의 타입을 확인하지만, 해당 매개변수의 값이 타입변환이 가능한지 확인한다. 값의 타입 변환이 가능한 경우, 해당 값의 타입을 변환한 뒤에 해당 메서드를 선택해서 실행한다. 

  • 리턴 타입만 다르고 매개변수가 동일한 경우, 컴파일 오류가 발생

 JVM이 매서드를 선택할 때, 리턴 타입은 매서드의 구분기준에 들어가지 않는다. 따라서 리턴타입이 다르더라도, 메서드명, 매개변수의 개수, 매개변수의 타입이 전부 일치할 경우에는 같은 매서드로 인식된다.

package pack0405;

public class Code1 {
	
	public static void main(String[] args) {
		System.out.println("int+int");
		sum(100,200);
		System.out.println("float+float");
		sum(10.2f,10.3f);
		System.out.println("String+String");
		sum("hello","world");
		System.out.println("int+float");
		sum(100,200.0f);
		System.out.println("int+int+int");
		sum(300,400,500);
		
	}
	static void sum(int x,int y){
		System.out.println(x+y);
	}
	static void sum(float x,float y){
		System.out.println(x+y);
	}
	static void sum(int x,int y,int z){
		System.out.println(x+y+z);
	}
	static void sum(String x,String y){
		System.out.println(x+y);
	}

}

 매개변수의 타입이 서로 다름에도, 같은 매서드명을 사용해서 명령어를 실행하는 것을 알 수 있다. 이는 같은 메서드명이지만, 매서드에 사용되는 매개변수마다 따로따로 설정해서 나타나는 현상이다. 즉, "sum(100,200)"은 "sum(int,int)"를 사용하며, "sum(10.2f,10.3f)"는 "sum(float,float)"매서드를 사용하게 된다.

'프로그래밍 언어 > Java' 카테고리의 다른 글

클래스  (0) 2023.04.07
객체 지향 프로그래밍  (0) 2023.04.06
메서드  (0) 2023.04.04
배열 지원 함수  (0) 2023.03.31
다차원 배열  (0) 2023.03.30
Comments