자바 (ref. 자바의정석)

오버로딩(overloading) - JAVA

쿠쿠s 2022. 2. 14. 12:14

 

오버로딩이란?

메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별이 되어야 합니다. 자바에서 같은 이름을 가진 메서드가 있어도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있습니다.

즉,  한 클래스 내에 하나의 메서드 이름으로 여러 기능을 구현하는 것이 오버로딩 입니다.

 

 

 

하지만 메서드의 이름이 같다고 해서 오버로딩이라 하지는 않고 아래 두 조건을 충족해야 합니다.

1. 메서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.

* 주의할 점은 해당 조건을 만족 시키지 못하면 컴파일 에러가 나고, 오버로딩은 오직 매개변수에 의해서 구별 되기 때문에 반환 타입은 오버로딩 구현에 영향을 주지 못합니다.

 

 

 

 

오버로딩의 대표적인 예는 println 메서드입니다. println 의 메서드를 사용할 때 괄호 값만 지정하면 출력하는데 불편함 없이 사용하셨을 것입니다. 하지만 실제로는 println의 매개변수의 타입에 따라 호출되는 메서드가 달라집니다.

 

 

 

println에서 사용할 수 있는 매개변수들

 

 

 

 

IDE 에서 확인을 해보면 수많은 매개변수가 들어갈 수 있고 실제 println 내부로 들어가서 확인하면

 

 

 

 

위와 같이 오버로딩이 구현이 되어있습니다. 이처럼 오버로딩을 사용을 하면 얻는 장점들이 있습니다.

 

만약 이름으로 메서드가 구분이 되었다면, 모든 메서드의 이름이 달라져야 하고 메서드를 만드는 사람도 힘들고, 사용하는 사람들도 이름을 전부 구분을 해서 기억을 해야 하기 때문에 부담이 됩니다. 

 

하지만 오버로딩을 사용하므로 println 이라는 하나의 이름으로 정의를 하게 되므로 기억하기 쉽고 메서드의 기능을 파악하기 쉽습니다. 그리고 메서드의 이름을 짓는 고민을 덜해 코드의 생산성이 높아집니다.

 

 

 

 

 

 

'자바 (ref. 자바의정석)' 카테고리의 다른 글

상속(inheritance) - JAVA  (0) 2022.02.16
생성자 (Constructor) - JAVA  (0) 2022.02.15
클래스변수, 인스턴스변수, 지역변수 - JAVA  (0) 2022.02.09
배열의 복사 - JAVA  (0) 2022.02.08
for each 문 - JAVA  (0) 2022.02.07