학습
Java 메서드 오버로딩
Java 메서드 오버로딩 — 초급
메서드 오버로딩
1. 도입 (왜 배워야 하는가)
메서드 오버로딩은 Java 프로그래밍에서 매우 중요한 개념입니다. 이는 동일한 이름의 메서드를 여러 개 정의할 수 있게 해주기 때문입니다. 실무에서는 다양한 상황에서 비슷한 기능을 수행해야 할 때가 많습니다. 예를 들어, 숫자와 문자열을 인자로 받아 처리하는 메서드가 필요할 수 있습니다. 만약 오버로딩을 모른다면, 서로 다른 이름의 메서드를 여러 개 만들어야 하므로 코드가 복잡해지고 유지보수가 어려워집니다.
메서드 오버로딩을 통해 코드를 간결하고 이해하기 쉽게 유지할 수 있습니다. 또한, 코드의 가독성을 높여 팀원들이 코드를 쉽게 이해할 수 있도록 도와줍니다.
2. 핵심 개념 설명
메서드 오버로딩은 동일한 이름을 가지면서 매개변수의 타입이나 개수가 다른 메서드를 여러 개 정의할 수 있는 기능입니다. 이를 통해 코드의 재사용성을 높일 수 있습니다.
실생활 비유로, 메서드 오버로딩은 '전화 걸기'와 같다고 할 수 있습니다. 예를 들어, 전화번호를 입력할 때 '010-1234-5678'나 '02-123-4567' 같은 서로 다른 형식의 번호를 갖는 전화기를 사용할 수 있습니다. 하지만 전화 걸기라는 기능은 동일합니다. 이렇게 메서드 오버로딩을 통해 같은 기능을 다양한 방식으로 사용할 수 있습니다.
| 개념 | 설명 |
|---|---|
| 메서드 이름 | 메서드를 구분하는 이름 |
| 매개변수 타입 | 메서드가 받는 인자의 타입 |
| 매개변수 개수 | 메서드가 받는 인자의 개수 |
3. 기본 코드 예제
아래는 메서드 오버로딩의 기본적인 예제입니다.
public class OverloadingExample {
// 정수를 더하는 메서드
public int add(int a, int b) {
return a + b;
}
// 실수를 더하는 메서드
public double add(double a, double b) {
return a + b;
}
public static void main(String[] args) {
OverloadingExample example = new OverloadingExample();
System.out.println(example.add(5, 10)); // 정수 더하기
System.out.println(example.add(5.5, 10.5)); // 실수 더하기
}
}
실행 결과:
15
16.0
코드 한 줄씩 동작 설명:
public class OverloadingExample {:OverloadingExample클래스를 정의합니다.public int add(int a, int b) {: 정수를 받는add메서드를 정의합니다.return a + b;: 두 정수를 더해서 반환합니다.public double add(double a, double b) {: 실수를 받는 또 다른add메서드를 정의합니다.return a + b;: 두 실수를 더해서 반환합니다.public static void main(String[] args) {: 프로그램의 시작점인main메서드를 정의합니다.OverloadingExample example = new OverloadingExample();:OverloadingExample클래스의 인스턴스를 생성합니다.System.out.println(example.add(5, 10));: 정수 5와 10을 더한 결과를 출력합니다.System.out.println(example.add(5.5, 10.5));: 실수 5.5와 10.5를 더한 결과를 출력합니다.- 메서드 오버로딩은 동일한 이름의 메서드를 다양한 매개변수로 정의할 수 있는 기능이다.
- 이를 통해 코드의 간결성과 재사용성을 높일 수 있다.
- 실생활의 비유처럼, 메서드 오버로딩은 같은 행동을 다양한 방식으로 수행할 수 있게 해준다.
- 주의해야 할 점은 매개변수의 타입과 개수를 신중하게 고려해야 한다.
- 메서드 오버라이딩
- 가변 인자(Varargs) 사용법
- 인터페이스와 추상 클래스의 차이
4. 실전 활용 예제
예제 1: 쇼핑몰에서 장바구니 추가 기능
public class ShoppingCart {
public void addItem(String item) {
System.out.println(item + "이(가) 장바구니에 추가되었습니다.");
}
public void addItem(String item, int quantity) {
System.out.println(item + "이(가) " + quantity + "개 장바구니에 추가되었습니다.");
}
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
cart.addItem("사과"); // 단일 아이템 추가
cart.addItem("바나나", 3); // 다수 아이템 추가
}
}
상황 설명: 위의 예제는 쇼핑몰에서 고객이 장바구니에 제품을 추가하는 기능을 구현한 것으로, 하나의 아이템만 추가할 때와 여러 개를 추가할 때 두 가지 방법을 제공합니다.
예제 2: 계산기
public class Calculator {
public int multiply(int a, int b) {
return a b;
}
public double multiply(double a, double b) {
return a b;
}
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.multiply(3, 4)); // 정수 곱셈
System.out.println(calc.multiply(2.5, 4.0)); // 실수 곱셈
}
}
상황 설명: 계산기 프로그램에서 정수와 실수를 모두 곱하는 기능을 제공하여 사용자에게 더 유용한 서비스를 제공합니다.
5. 흔한 실수와 주의사항
실수 1: 매개변수 타입만 다르게 오버로딩하기
public class Example {
public void test(int a) {
System.out.println("정수: " + a);
}
public void test(double a) { // 오류 발생
System.out.println("실수: " + a);
}
}
잘못된 코드: test(int a)와 test(double a)는 서로 다른 타입이지만, 같은 메서드 이름을 사용하므로 Java는 이를 구분할 수 있습니다.
올바른 코드:
public class Example {
public void test(int a) {
System.out.println("정수: " + a);
}
public void test(String a) {
System.out.println("문자열: " + a);
}
}
실수 2: 매개변수 개수만 다르게 오버로딩하기
public class Example {
public void display() {
System.out.println("메서드 호출");
}
public void display(String msg) {
System.out.println(msg); // 오류 발생
}
}
잘못된 코드: 메서드의 이름이 동일하더라도, 매개변수 개수만 다르게 하여도 문제가 발생할 수 있습니다.
올바른 코드:
public class Example {
public void display() {
System.out.println("메서드 호출");
}
public void display(String msg, int count) {
System.out.println(msg + " " + count + "회");
}
}
6. 정리
다음에 학습하면 좋은 주제: