큐범
Just do debug
큐범
전체 방문자
오늘
어제
  • 전체보기 (128)
    • 회고 (4)
    • JAVA (16)
      • JAVA 기초 (18)
      • JAVA Algorithm, Datastruct (13)
    • Spring (11)
    • Micro Service Architecture (3)
    • JPA (6)
    • gRPC (4)
    • Network (8)
    • Process (7)
    • Cloud (4)
    • Python (10)
    • Web(vue) (2)
    • UMC (1)
    • DB (9)
    • CS (1)
    • Clean Code (1)
    • TDD (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
큐범

Just do debug

JAVA

[JAVA] 오버로딩(overloading)

2021. 8. 11. 17:24

메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야한다. 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩(method overloading) 또는 오버로딩(overloading)

오버로딩의 조건

  1. 메서드 이름이 같아야한다.
  1. 매개변수의 개수 또는 타입이 달라야한다.

반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

오버로딩의 장점

package object_oriented_programming;

public class OverloadingTest {

	public static void main(String[] args) {
		MyMath3 mm =new MyMath3();
		System.out.println("mm.add(3, 3) 결과 : "+mm.add(3,3));
		System.out.println("mm.add(3L, 3) 결과 : " + mm.add(3L,3));
		System.out.println("mm.add(3, 3L) 결과 : "+mm.add(3,3L));
		System.out.println("mm.add(3L, 3L) 결과 : "+mm.add(3L,3L));
		
		int[] a = {100,200,300};
		System.out.println("mm.add(a) 결과 : "+mm.add(a));
	}
}

class MyMath3{
	int add(int a, int b) {
		System.out.print("int add(int a, int b) - ");
		return a+b;
	}
	
	long add(int a, long b) {
		System.out.print("long add(int a, long b) - ");
		return a+b;
	}
	long add(long a, int b) {
		System.out.print("long add(long a, int b) - ");
		return a+b;
	}
	long add(long a, long b) {
		System.out.print("long add(long a, long b) - ");
		return a+b;
	}
	
	int add(int[] a) {
		System.out.print("int add(int[] a) - ");
		int result = 0;
		for(int i=0; i<a.length; i++) {
			result += a[i];
		}
		return result;
	}
}
//결과
int add(int a, int b) - mm.add(3, 3) 결과 : 6
long add(long a, int b) - mm.add(3L, 3) 결과 : 6
long add(int a, long b) - mm.add(3, 3L) 결과 : 6
long add(long a, long b) - mm.add(3L, 3L) 결과 : 6
int add(int[] a) - mm.add(a) 결과 : 600

가변인자(varargs)와 오버로딩

가변인자 : 타입... 변수명

package object_oriented_programming;

public class VarArgsEx {

	public static void main(String[] args) {
		String[] strArr = {"100","200","300"};
		
		System.out.println(concatenate("","100","200","300"));
		System.out.println(concatenate("-",strArr));
		System.out.println(concatenate(",",new String[] {"1","2","3"}));
		System.out.println("["+concatenate(",",new String[0]+"]"));
		System.out.println("["+concatenate(",")+"]");
	}
	
	static String concatenate(String delim, String ... args) {
		String result = "";
		
		for(String str : args) {
			result+=str+delim;
		}
		
		return result;
	}
}
//결과
100200300
100-200-300-
1,2,3,
[[Ljava.lang.String;@1877ab81],
[]

concatenate메서드는 매개변수로 입력된 문자열에 구분자를 사이에 포함시켜 결합해서 반환한다.

가변인자를 선언한 메서드를 오버로딩하면, 메서드를 호출했을 때 이와 같이 구별되지 못하는 경우가 발생하기 쉽기 때문에 주의해야한다. 가능하면 가변인자를 사용한 메서드는 오버로딩하지 않는 것이 좋다.

 

출처 : JAVA의 정석 - (남궁성지음)

    'JAVA' 카테고리의 다른 글
    • [JAVA] 변수의 초기화
    • [JAVA] 생성자(Constructor)
    • [JAVA] 클래스 메서드(static메서드)와 인스턴스 메서드
    • [JAVA] 재귀호출(recursive call)
    큐범
    큐범

    티스토리툴바