[Java] 메소드 오버로딩 (Method Overloading)

2022. 8. 11. 16:51·Language/Java
728x90

오버로딩(Overloading)

자바에서 한 클래스 내에서 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.

한 클래스 내에 같은 이름의 메소드를 여러 개 정의하는 것을 "메소드 오버로딩(Method Overloading)" 또는 간단히 "오버로딩(Overloading)"이라 한다.

 

메소드 오버로딩 구분 요건은 아래와 같다.

  • 메소드 이름이 같아야 한다.
  • 매개변수의 개수, 타입 또는 순서가 달라야 한다.
  • 반환 타입은 관계 없다.

위의 조건을 만족시키지 못하는 메소드는 중복 정의로 간주되어 컴파일시에 에러가 발생한다. 그리고 오버로딩된 메소드들은 매개변수에 의해서만 구별될 수 있으므로 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

사용 예

// 매개변수 개수가 다른 경우의 메소드 오버로딩
class Mt01 {
	void p(int a, int b) {
		System.out.println(a + "\t" + b);
	}

	void p(int a) {
		System.out.println(a);
	} // 전달인자 개수를 다르게 한 메소드 오버로딩
}

public static void main(String[] args) {

	Mt01 m = new Mt01();
    
	m.p(100);
	m.p(100, 200);
}
// 메소드이름이 같아도 인자의 개수가 다르기 때문에 알아서 인식된다.
// 매개변수 타입이 다른 경우의 메소드 오버로딩
class Mt02 {
	int abs(int a) {
		if(a < 0) {
			a = -a;
		}
		return a;
	}

	double abs(double a) {
		if(a < 0) {
			a = -a;
		}
		return a;
	}
} // 매개 변수 자료형 타입이 다르다.

public static void main(String[] args) {

	Mt02 m = new Mt02();
    
	System.out.println("-10의 절대값 = " + m.abs(-10));
	System.out.println("-10.3의 절대값 = " + m.abs(-10.3));
// 메소드이름이 같아도 인자의 자료형 타입이 다르기 때문에 알아서 인식된다.
// 매개변수 순서가 다른 경우의 메소드 오버로딩
class Mt03 {
	long add(int a, long b) {
		return a+b;
	}

	long add(long a, int b) {
		return a+b;
	}
} // 매개변수 순서를 다르게 한 메소드 오버로딩

public static void main(String[] args) {

	Mt03 mt = new Mt03();
    
	System.out.println(mt.add(1, 2L));
	System.out.println(mt.add(2L, 1));

}
// 메소드 이름이 같아도 인자의 순서가 다르기 때문에 알아서 인식된다

 

컴파일 에러 예

// 반환타입은 오버로딩 구현하는데 아무런 영향을 주지 않아 컴파일 에러가 발생한다.
class Mt04 {
	void z(int a) {
	System.out.println(a);
    }
    
	int z(int a) {
	return a;
	} // 메소드 명 앞에 리턴타입을 다르게 한 오버로딩 문법은 적용 안된다.
} 
// 리턴타입을 다르게 한 오버로딩 문법은 적용 안된다.

자바 가변인자(Varargs, Variable Argument List)

자바 1.5에서 추가 된 가변인자 문법이다. "자료형타입...배열명" 형식으로 이 문법은 매개변수 개수가 다른 메소드가 오버로딩 된 경우 그 인자 개수만큼 가변인자로 받아서 배열로 처리하면 한 개의 메소드만 정의하면 된다.

 

가변인자 문법을 사용하지 않으면 인자개수만큼 중복 메소드명을 오버로딩 시켜야한다. 그만큼 불필요한 코드라인이 늘어나므로, 가변인자를 이용해 한 개의 메소드만 정의하면 코드줄 수가 줄어든다.

void z(int ... arr) { // 가변인자를 이용해 메소드를 생성.
	System.out.println("인자 개수 = " + arr.length);
	for(int i = 0; i < arr.length; i++) {
		System.out.print(arr[i] + " ");
	} 
	System.out.println("\n========================");
}

public static void main(String[] args) {
	Mt05 m = new Mt05();
	m.z(10);
	m.z(10, 20);
	m.z(10, 20, 30);
} // 메인 메소드에서 z메소드 호출.
// 출력 결과

인자 개수 = 1
10
========================
인자 개수 = 2
10 20
========================
인자 개수 = 3
10 20 30
========================

정리

오버로딩 성립되기 위한 조건

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

'Language > Java' 카테고리의 다른 글

[Java] 실습 (Overriding Overloading)  (0) 2022.08.12
araFarm  (0) 2022.08.11
[Java] extends, implements의 차이  (0) 2022.08.11
[Java] 다차원 배열 (multi-dimensional array)  (0) 2022.08.11
[Java] 해시테이블 (Hashtable)  (0) 2022.08.11
'Language/Java' 카테고리의 다른 글
  • [Java] 실습 (Overriding Overloading)
  • araFarm
  • [Java] extends, implements의 차이
  • [Java] 다차원 배열 (multi-dimensional array)
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    객체
    event
    타입스크립트
    리액트
    Java
    제어문
    파이썬
    next.js
    JavaScript
    자바스크립트
    web
    HTML
    MySQL
    CSS
    object
    react
    TypeScript
    Python
    array
    변수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
[Java] 메소드 오버로딩 (Method Overloading)
상단으로

티스토리툴바