IMCAT.DEV
로그인 가입
Java 입문 객체지향

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

코드 한 줄씩 동작 설명:

  1. public class OverloadingExample { : OverloadingExample 클래스를 정의합니다.
  2. public int add(int a, int b) { : 정수를 받는 add 메서드를 정의합니다.
  3. return a + b; : 두 정수를 더해서 반환합니다.
  4. public double add(double a, double b) { : 실수를 받는 또 다른 add 메서드를 정의합니다.
  5. return a + b; : 두 실수를 더해서 반환합니다.
  6. public static void main(String[] args) { : 프로그램의 시작점인 main 메서드를 정의합니다.
  7. OverloadingExample example = new OverloadingExample(); : OverloadingExample 클래스의 인스턴스를 생성합니다.
  8. System.out.println(example.add(5, 10)); : 정수 5와 10을 더한 결과를 출력합니다.
  9. System.out.println(example.add(5.5, 10.5)); : 실수 5.5와 10.5를 더한 결과를 출력합니다.
  10. 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. 정리

    • 메서드 오버로딩은 동일한 이름의 메서드를 다양한 매개변수로 정의할 수 있는 기능이다.
    • 이를 통해 코드의 간결성과 재사용성을 높일 수 있다.
    • 실생활의 비유처럼, 메서드 오버로딩은 같은 행동을 다양한 방식으로 수행할 수 있게 해준다.
    • 주의해야 할 점은 매개변수의 타입과 개수를 신중하게 고려해야 한다.
    • 다음에 학습하면 좋은 주제:

    • 메서드 오버라이딩
    • 가변 인자(Varargs) 사용법
    • 인터페이스와 추상 클래스의 차이