프로그래밍 언어/JAVA

JAVA) 자바 오버로딩(Overloading)

luana_eun 2022. 2. 27. 21:36
728x90

오버로딩 개념

이름은 같지만 받는 매개변수가 다른 메서드를 만드는것. 

메서드가 하는 기능은 똑같은데, 처리 개수가 다르거나 자료형이 다를때 사용한다. 

오버로딩의 특징 1) 같은 기능 2) 다른 매개변수

 

무슨 말인지는 아래 오버로딩의 대표적인(?) 예시 하나로 설명해보려 한다. 

 


 

오버로딩 예시

엄청 자주 사용하는 System.out.println(); 에서 println()메서드도 오버로딩된 메서드다. 

 

println()은 우리가 괄호() 안에 무슨 자료형을 넣든 다 그대로 출력한다. 

사실 구조적으로 생각해보면 자료형마다 출력방법이 다 따로따로 있어야 하는데

예를들어 int를 출력할때는 intPrintln, String은 stringPrintln 이런식으로 따로따로 있다고 생각해보면 프로그래밍 하기가 되게 힘들어진다.

어차피 출력하는 같은 기능을 수행하는거면 똑같이 println이라는 이름으로 통일하는게 편하지 않나? 해서 등장한게 오버로딩!

 

실제로 println()메서드의 내부를 보면, 

=> 이런식으로

println이라는 같은 메서드 이름으로

매개변수는 boolean, int, float 등등

모든 데이터 타입에 대한 매개변수가 있다. 

 

이렇게 println()이 오버로딩 되어있기에

어떤 데이터타입을 넣든 해당 타입에 맞는

println()이 호출되어 출력할 수 있는것이다. 

 

 

 


 

오버로딩 작성 규칙

1) 함수명이 같으니까 매개변수는 달라야한다. 

   매개변수 개수가 다르거나 데이터타입이 다르거나.

 

2) 매개변수에 적힌 데이터타입 순서대로 받아야한다. 

    public void sum(int a, double b) { } 메서드는 매개변수 순서대로 sum(int형, double형)순서로 사용해야한다. 

	public static void main(String[] args) {
		TestClass tc = new TestClass();
		tc.sum(1, 2.0);
       		// int, double 순서로 매개변수 전달.
	}

class TestClass {
	public void sum(int a, double b) {
		System.out.println(a+b);
	}
}

3) 자동 형변환 되는것은 상관없다. 

    데이터타입이 작은것에서 큰것으로 가는 것은 자동으로 형변환이 된다. 

	public static void main(String[] args) {
		TestClass tc = new TestClass();
		tc.sum(1, 2);
       		// (int, int)로 작성해도 int는 double보다 범위가 작으므로
            	// 오류가 발생하지 않고 자동 형변환되서 2.0으로 들어간다. 
	}

class TestClass {
	public void sum(int a, double b) {
		System.out.println(a+b);
	}
}

 

 

 

728x90