Java

[Java] Overloading

wwxs 2024. 9. 6. 11:15

Overloading (오버로딩)

  • 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것

 

오버로딩의 성립 조건

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

오버로딩의 장점

  • 사용자가 매개변수의 순서를 외우지 않아도 사용 가능 (편의성)

오버로딩의 단점

  • 중복적으로 의미 없이 생성하는 경우, 실질적으로 필요한 구현 메서드 찾기에 어려움 (복잡성)
더보기
더보기
class Calc {
	int a, b;
	int c, d;
	double x, y;
	
	// 두 정수를 "더하는 메서드"
	int add (int a, int b) { return a + b; }
	
	// 실제 값 차이 여부와 반환타입의 차이 여부는 오버로딩과 관련 X
	// >> 반드시!! 매개변수의 개수 또는 타입이 달라야 함!!
	// long add (int c, int d) { return c + d; } - Error 
	
	// ===매개변수의 타입 차이===
	double add(double x, double y) { return x + y; }
	double add(int a, double y) { return a + y; }
	double add(double x, int b) { return x + b; }
	
	// ===매개변수의 개수 차이===
	int add (int a, int b, int c) { return a + b + c; }
	
	// cf) 오버 로딩 사용 이유
	// 1. 메서드가 수행하는 기본적인 작업이 동일할 때, 같은 이름 사용 가능
	// : - 코드를 더 명확하고 가독성 있게 작성 가능
	// 2. 코드의 재사용성이 높아짐
	// 3. 컴파일 시 타입 체크를 강화 - 올바른 매개변수 타입을 가진 메서드를 선택
}

public class Overloading01 {
	public static void main(String[] args) {
		Calc calculator = new Calc();
		System.out.println(calculator.add(10, 20));
		
		System.out.println(calculator.add(10.0, 20.5));
		System.out.println(calculator.add(10, 20.3));
		System.out.println(calculator.add(10.1, 20));
		
		System.out.println(calculator.add(10, 20, 30));
	}
}

 

(예제 코드)

더보기
더보기
// 음식점 클래스
// : 다양한 방법으로 주문을 받는 메서드 정의
class Restaurant {
	// 메서드 정의
	// : placeOrder 주문 메서드
	// >> 메뉴 이름(String dish)
	// >> 메뉴 이름, 수량 제공(int quantity)
	// >> 메뉴 이름, 특별 요청 사항 제공(String specialRequests)
	// >> 메뉴 이름, 수량 제공, 특별 요청 사항 제공
	void placeOrder(String dish){
		System.out.println("메뉴 이름: " + dish);
	}
	void placeOrder (String dish, int quantity) {
		System.out.println("메뉴 이름: " + dish + ", 수량 제공: " + quantity);
	}
	void placeOrder(String dish, String specialRequests) {
		System.out.println("메뉴 이름: " + dish + ", 특별 요청 사항 제공: " + specialRequests);
	}
	void placeOrder(String dish, int quantity, String specialRequests) {
		System.out.println("메뉴 이름: " + dish + ", 수량 제공: " + quantity + ", 특별 요청 사항 제공: " + specialRequests);
	}
	
	// >> 각 메서드에서 매개변수의 데이터값을 출력
}

public class Overloading02 {
	public static void main(String[] args) {
		// 인스턴스 생성
		Restaurant order1 = new Restaurant();
		order1.placeOrder("햄버거");
		order1.placeOrder("피자", 2);
		order1.placeOrder("파스타", "치즈 많이");
		order1.placeOrder("샐러드", 2, "드레싱 없이");
	}
}

 

'Java' 카테고리의 다른 글

[Java] Inheritance  (0) 2024.09.09
[Java] Constructor  (0) 2024.09.06
[Java] Method  (0) 2024.09.06
[Java] Object(객체)  (0) 2024.09.05
[Java] Array(배열)  (0) 2024.09.05