<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)이다.

오버로딩과 자바의 다형성(Polymorphism)

자바에서 다형성은 크게 두 가지 형태로 나뉜다:

구분 형태 예시
정적 다형성 오버로딩 (Overloading) 동일한 메서드 이름, 다른 매개변수
동적 다형성 오버라이딩 (Overriding) 상속을 통한 메서드 재정의

오버로딩은 컴파일 시점에 어떤 메서드가 호출될지 결정되므로 '정적 다형성'이라고 부른다. 반면, 오버라이딩은 런타임에 결정되므로 '동적 다형성'이다.

이러한 다형성은 자바의 객체지향 설계의 핵심 철학 중 하나이며, 다양한 객체가 동일한 메시지를 받되 각자의 방식으로 반응할 수 있게 한다.

오버로딩과 SOLID 원칙

오버로딩은 특히 OOP의 SOLID 원칙 중 일부와 밀접한 연관이 있다.

SRP (단일 책임 원칙 - Single Responsibility Principle)

OCP (개방/폐쇄 원칙 - Open/Closed Principle)