JAVA - 객체지향언어 오버로딩 그리고 예제

2022. 7. 28. 21:513층 1구역 - 개발의 장/JAVA

객체지향언어 그러니까 클래스를 만들면서 오버로딩과 오버라이딩에 대해 듣게 된다.

인터넷강의나 책 같은 곳을 보다보면 꽤 자주 볼 수 있는 단어인데, 얘네는 대체 어떤 역할을 할까??

 

 

1. 오버로딩(OverLoading)??

오버로딩은

같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술을 말한다.

 

 

이게 대체 무슨 말 일까?

 

설명을 풀어보도록 하자.

필자가 게임을 하는데, 데미지가 나오질 않아서

무기 강화를 하려고 한다.

 

근데 무기 강화 시스템이 좀 특이하다.

최대 강화 수가 +9인데

 

+1~5은 골드(in게임 재화)로 강화하고,

+6~8은 보석(in게임 강화재료)으로 강화하고,

+9는 엘리트몬스터의 전리품으로 강화를 한다.

 

여기서 메서드는 '무기 강화' 을,

in게임의 재화, 강화재료, 몬스터의 전리품들은 '매개변수의 유형' 을,

강화 수의 커트라인은 '매개변수의 개수' 를 뜻한다고 생각하면 될 듯 하다.

 

이제 예제를 보자.

 

1-1. 예제

 

Print.java

package constructor;

public class Print {
	public static void printArr() {
		System.out.println();
	}

	public static void printArr(int[] arr) {
		for (int a : arr)
			System.out.println(a);
	}

	// static은 선택 오버로딩을 할때
	public static void printArr(String[] strs) {
		for (String s : strs)
			System.out.println(s);
	}

	public static void printArr(double[] doubles) {
		for (double d : doubles)
			System.out.println(d);
	}
}

위와 같이 printArr는 같은데 소괄호 안에 있는 매개들이 다르지 않은가?

이게 오버로딩이다.

 

PrintMain.java

package constructor;

public class PrintMain {

	public static void main(String[] args) {
		int[] scores = { 100, 13, 44 };
		String[] name = { "김변수", "이상수", "박참조" };
		double[] doubles = { 1.1, 2.2, 3.3 };

		Print.printArr(scores);
		Print.printArr();
		Print.printArr(name);
		Print.printArr();
		Print.printArr(doubles);
		// 오버로딩(Overloading) : 같은 이름의 메서드 여러개를 가지면서
		// 매개변수의 유형과 개수가 다르도록 하는 기술

		// 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를
		// 하위 클래스가 '재정의'해서 사용

	}

}

 

오버로딩이 아닌 예제

int add(int x, int y, int z) {
int result = x + y + z;
return result;
}
long add(int a, int b, int c) {
long result = a + b + c;
return result;
}
// 반환타입은 다르지만 매개변수의 자료형과 개수는 같기에 오버로딩이 아닙니다.

 

오버로딩의 다른 예제

int add(int x, int y, int z) {
int result = x + y + z;
return result;
}

long add(int a, int b, long c) {
long result = a + b + c;
return result;

}

int add(int a, int b) {
int result = a + b;
return result;
}

// 오버로딩의 조건에 부합하는 예제입니다.