IT
자바 Overloading(오버로딩)
자바에서 **Overloading(오버로딩)**은 같은 이름의 메서드를 매개변수의 수, 타입, 순서를 다르게 하여 여러 개 정의하는 것을 의미합니다.
이는 컴파일 타임에 결정되는 정적 바인딩이며, 메서드 호출의 유연성과 편의성을 높이는 중요한 문법입니다.
오버로딩이란?
-
하나의 클래스 안에서 동일한 이름의 메서드를 정의할 수 있도록 해주는 기능입니다.
-
**매개변수(parameter)**의 형태(개수, 타입, 순서)가 달라야 합니다.
-
반환값(return type)은 오버로딩의 조건이 되지 않습니다.
오버로딩의 목적
-
코드 가독성 향상
-
동일한 동작을 이름을 바꾸지 않고도 다양한 방식으로 처리 가능
-
유연한 메서드 제공
-
인자의 수나 타입에 따라 맞춤 처리를 쉽게 구현 가능
-
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 제작, 유틸리티 클래스 구현 시 자주 활용되므로, 다양한 사례를 직접 구현해보며 익히는 것이 좋습니다.
댓글
아직 댓글이 없습니다.
로그인 후 댓글을 남길 수 있습니다.