자바 5. 오버로딩 (메소드, 생성자)

Bluewiz_YSH·2022년 6월 29일
0

오버로딩

오버로딩(Overloading)은 단어 뜻 그대로 무언가를 위에 올려 쌓는다는 의미이다. 이 의미를 따라 메소드 오버로딩이면 똑같은 이름의 메소드를, 생성자 오버로딩이면 똑같은 이름의 생성자를 쌓아 여러 용도로 사용한다는 의미이다.

(1) 메소드 오버로딩

아래 예시 코드단을 입력해보자.

package first;

public class MethodOverloadClass
{
	//메소드 오버로딩
	static void prn (int x, int y, int z) { //prn(10, 20, 30);
		System.out.println(x + "\t" + y + "\t" + z);
	}
	
	static void prn (int x, int y) { //prn(40, 50);
		System.out.println(x + "\t" + y);
	}
	
	static void prn(int x) { //prn(60);
		System.out.println(x);
	}
	
	static void prn() { //prn();
		System.out.println();
	}
    
	public static void main(String[] args) 
	{
    
	prn(10, 20, 30);
	prn(40, 50);
	prn(60);
	prn();
        
	}

}

실행해보면 아래 사진처럼 결과가 나오는데 보다시피 클래스안에 선언된 메소드가 4개이다.

모두 static 메소드로 선언되었으며 각각 메소드 이름은 같지만 매개변수의 갯수가 각각 다르고
아래 실행되는 실행문도 다르다.

그래서 같은 이름의 prn이지만 매개변수 3개(10,20,30)/매개변수 2개(40,50)/매개변수 1개(10)/매개변수 없음()에 따라 각자 다른 메소드처럼 실행되어 결과값도 다르게 나오는것이다.

(2) 생성자 오버로딩

메소드 오버로딩과 같이 같은 이름의 생성자가 여러 존재하는것이 생성자 오버로딩이다.

아래 코드를 입력해보자.

package constructor;

public class Constructor_Ex02 //생성자는 객체 생성할때 딱 한번만 호출!
{

	public static void main(String[] args)
	{
		Point7 pt07 = new Point7(100, 200);
		System.out.println(pt07.x + ", " + pt07.y);
		pt07.showPoint();
		
		Point7 pt08 = new Point7(300, 400);
		System.out.println(pt08.x + ", " + pt08.y);
		pt08.showPoint();
		
		Point7 pt09 = new Point7();
		System.out.println(pt09.x + ", " + pt09.y);
		pt09.showPoint();
	}

}

class Point7 {
	int x; //멤버변수 필드 자동 초기화 0;
	int y;
	
	public Point7() {
		System.out.println("매개 변수가 없는 디폴트 생성자");
	}
	
	public Point7(int new_x, int new_y) {
		x = new_x; //생성자에서 매개변수로 받은 값을 멤버 변수로 대입 => 초기화
		y = new_y;
	}
	
	public void showPoint() {
		System.out.println(x + ", " + y);
	}
}

그러면 아래 사진과 같이 나오는데 천천히 보면, 전체적으로 Point7 클래스에 생성자가 매개변수가 없는 것과 매개 변수 두 개가 있는 것 (int new_x, int new_y) 이렇게 같은 이름의 두 개가 존재한다. 또한, showPoint 메서드를 가지고 있다.

이 Point7 클래스를 바탕으로 Constructor_Ex02 클래스에서는 각각 pt07, pt08, pt09 객체를 만들었는데, pt07과 pt08은 매개 변수가 두 개가 있는 생성자로 생성되었고 pt09는 매개 변수가 없는 생성자로 생성됨을 알 수 있다.

그렇게 마지막 출력되는 실행문으로는 pt07, pt08, pt09 모두 다 Point7의 멤버 변수 x와 y값을 출력함과 동시에 showPoint메서드까지 실행시켜주고 있다.(showPoint 메서드 또한 x값과 y값을 콘솔에 출력하는 기능을 가지고 있다.)

그래서 결과가 pt07, pt08의 x와 y값이 두번 나오고 마지막 pt09가 생성될때 매개 변수가 없을때 객체가 생성되면 출력 되기로 했던 "매개 변수가 없는 디폴트 생성자"가 찍히고 해당 pt09 객체의 x와 y 값이 두 번 찍히면서 마무리가 된것이다.

이처럼, 메소드/생성자 오버로딩은 같은 이름을 가진 메소드/생성자들이 여러개 있으면서 각각 받는 매개변수가 다르거나 예시에는 없었지만 매개변수의 자료형이 다르거나 매개 변수 갯수도 같고 자료형도 같으면 위치가 달라야한다. 다음장에서는 조건문 제어문 반복문에 대해 알아보겠다.

0개의 댓글