<aside>
오버로딩(Overloading)이란, 같은 이름의 메서드나 생성자를 여러 개 정의하되, 매개변수(parameter)의 개수, 타입, 순서를 다르게 하여 하나의 이름으로 다양한 동작을 수행할 수 있도록 하는 문법이다.
즉, 메서드 시그니처(method signature)가 다르면, 동일한 이름을 재사용할 수 있도록 허용함으로써 코드의 일관성과 사용 편의성을 높여준다.
public void print(String message) { ... }
public void print(int number) { ... }
public void print(String message, int repeat) { ... }
→ print
메서드는 하나처럼 보이지만, 다양한 입력 조건에 따라 다르게 동작한다.
이것이 바로 정적(컴파일 타임) 다형성(Static Polymorphism)이다.
자바에서 다형성은 크게 두 가지 형태로 나뉜다:
구분 | 형태 | 예시 |
---|---|---|
정적 다형성 | 오버로딩 (Overloading) | 동일한 메서드 이름, 다른 매개변수 |
동적 다형성 | 오버라이딩 (Overriding) | 상속을 통한 메서드 재정의 |
오버로딩은 컴파일 시점에 어떤 메서드가 호출될지 결정되므로 '정적 다형성'이라고 부른다. 반면, 오버라이딩은 런타임에 결정되므로 '동적 다형성'이다.
이러한 다형성은 자바의 객체지향 설계의 핵심 철학 중 하나이며, 다양한 객체가 동일한 메시지를 받되 각자의 방식으로 반응할 수 있게 한다.
오버로딩은 특히 OOP의 SOLID 원칙 중 일부와 밀접한 연관이 있다.