drexqq

[Java, 자바] Overloading(오버로딩) 본문

Back-End/Java

[Java, 자바] Overloading(오버로딩)

drexqq 2020. 6. 1. 19:13
728x90
반응형

Java의 Overloading에 대해서 알아보자.

 

자바에서 다형성을 지원하는 방법은 오버로딩(Overloading)과 오버라이딩(Overriding) 2가지로 볼 수 있다.

 

오버로딩(Overloading)과 오버라이딩(Overriding) 이름이 굉장히 비슷해서 헷갈리기 쉽다.

 

그 중 오버로딩(Overloading)에 대해서 알아보겠다.

 

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

 

오버로딩(Overloading)은 메소드 오버로딩과 생성자 오버로딩이 있지만 둘 다 같은 개념이라고 보면 쉽겠다.

 

같은 이름의 함수를 여러 개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답하게 한다.

 

package overload;

public class mainClass {
	
	public static void main(String[] args) {
		/*
		 	Overload - 함수명은 같고 매개변수의 자료형이나 인수의 갯수가 다른 것을 의미한다.
		 	ex) parseInt ...
		 	
		 	image drawing -> 알파(투명), 불투명
		 	
		 	imageDraw(int x, int y, int a)
		 	
		 	imageDraw(int x, int y)
		 	
		 */
		int num1 = Integer.parseInt("123");
		int num2 = Integer.parseInt("1010", 2);
		
		System.out.println(num1);
		System.out.println(num2);
		
		/*
		 	C언어
		 	unsigned = 0 ~ 255
		 	signed byte = -128 ~ 127
		 */
		
		funcName();
		funcName('A');
		funcName(123);
		funcName('B',456);
		funcName(78,'C');
	}
	/*
	 	결론적으로 말하면 메소드 오버로딩은 매개변수를 사용한다.
	 	
	 	즉 *매개변수*가 다르면 이름이 같아도 서로 다른 메소드가 되는 것이다.
	 	반면에 매개변수는 같지만 *리턴타입*이 다르면 오류가 발생한다.
	 	
	 	메소드의 반환값은 메소드를 호출하는 시점에서 전달되지 않는 정보이기 때문에 오버로딩의 대상이 될 수 없다.
	 */
	/*
	 	return값x
	 	가인수가 다르게 되도 자료형이 같으면 같은 함수로 인식
	 */
	// overload 예제
	static void funcName() {
		System.out.println("funcName() 호출");
	}
	static void funcName(char c) {
		System.out.println("funcName(char c) 호출"+c);
	}
	static void funcName(int i) {
		System.out.println("funcName(int i) 호출"+i);
	}
	static void funcName(char c, int i) {
		System.out.println("funcName(char c, int i) 호출"+c+","+i);
	}
	static void funcName(int i, char c) {
		System.out.println("funcName(int i, char c) 호출"+i+","+c);
	}
}

 

예제와 같이 funcName이라는 함수 여러개를 선언했지만 각각 파라미터값을 다르게해서 다른 값을 호출할 수 있게 되는것이다.

 

 

728x90
반응형
Comments