IMG-LOGO
공지사항 :

자바 Overloading(오버로딩)

lmkfox - 2025-07-17 06:45:14 11 Views 0 Comment

자바에서 **Overloading(오버로딩)**은 같은 이름의 메서드를 매개변수의 수, 타입, 순서를 다르게 하여 여러 개 정의하는 것을 의미합니다.

이는 컴파일 타임에 결정되는 정적 바인딩이며, 메서드 호출의 유연성과 편의성을 높이는 중요한 문법입니다.


오버로딩이란?

  • 하나의 클래스 안에서 동일한 이름의 메서드를 정의할 수 있도록 해주는 기능입니다.

  • **매개변수(parameter)**의 형태(개수, 타입, 순서)가 달라야 합니다.

  • 반환값(return type)은 오버로딩의 조건이 되지 않습니다.


오버로딩의 목적

  1. 코드 가독성 향상

    • 동일한 동작을 이름을 바꾸지 않고도 다양한 방식으로 처리 가능

  2. 유연한 메서드 제공

    • 인자의 수나 타입에 따라 맞춤 처리를 쉽게 구현 가능

  3. API 사용성 증가

    • 개발자 입장에서 다양한 입력값을 쉽게 처리할 수 있도록 돕는 구조 제공


오버로딩의 문법 조건

조건 항목

설명

메서드 이름

같아야 함

매개변수 개수

다르거나

매개변수 타입

다르거나

매개변수 순서

다르면 오버로딩 성립

반환 타입

같거나 달라도 무관 (단, 반환 타입만 다르면 오버로딩 안 됨)


예제 코드

public class Calculator {

    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }

    public String add(String a, String b) {
        return a + b;
    }
}

호출 예시

Calculator cal = new Calculator();
System.out.println(cal.add(1, 2));           // int형 → 3
System.out.println(cal.add(1.5, 2.5));       // double형 → 4.0
System.out.println(cal.add(1, 2, 3));        // 3개 int → 6
System.out.println(cal.add("Hello, ", "World"));  // 문자열 → "Hello, World"


오버로딩과 오버라이딩의 차이

항목

오버로딩 (Overloading)

오버라이딩 (Overriding)

적용 대상

같은 클래스 내부

상속 관계 (부모 → 자식 클래스)

메서드 이름

같음

같음

매개변수

개수/타입/순서가 다름

동일해야 함

반환 타입

무관

동일 또는 하위 타입

접근 제어자

무관

부모보다 좁을 수 없음

바인딩 시점

컴파일 시 (정적 바인딩)

실행 시 (동적 바인딩)


오버로딩 유의사항

  • 오버로딩은 함수 시그니처(이름 + 매개변수) 기준으로 성립합니다.

    즉, 반환 타입만 다르고 매개변수 구성이 같다면 컴파일 에러가 발생합니다.

// 오류 예시
public int print(String s) { return 1; }
public double print(String s) { return 2.0; } // 오류 발생: 반환 타입만 다름


생성자 오버로딩

자바에서는 생성자도 오버로딩할 수 있습니다.

public class Person {
    String name;
    int age;

    public Person() {
        this.name = "이름 없음";
        this.age = 0;
    }

    public Person(String name) {
        this.name = name;
        this.age = 0;
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}


마무리

자바의 오버로딩은 같은 기능을 다양한 형태로 제공하여 코드의 재사용성과 가독성을 높이는 데 매우 유용합니다.

라이브러리 설계, API 제작, 유틸리티 클래스 구현 시 자주 활용되므로, 다양한 사례를 직접 구현해보며 익히는 것이 좋습니다.


댓글