[Java] 오버로딩

Minuuu·2023년 1월 31일
0

Java

목록 보기
13/18

1. 오버로딩

한 클래스 안에 같은 이름의 메서드 여러 개를 정의하는 것

2. 오버로딩의 예

우리는 Hello, World!를 출력할 때 println("Hello, World!")를 사용했다
3이라는 숫자값을 출력하려면 println(3)을 사용했다
위와 같이 서로 다른 데이터타입인데 어떻게 둘다 잘 작동했을까?
-> println()이 오버로딩된 메소드이기 때문

void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(int x)
...

PrintStream 클래스는 어떤 종류의 매개변수를 지정해도 출력할 수 있도록
위와 같이 오버로딩된 println메서드를 정의해놓고 있다.

3. 오버로딩의 조건

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

위의 println()만 봐도 모두 매개변수의 타입이 다른 것을 확인할 수 있다
즉 매개변수의 갯수, 타입에 따라 다른 메서드가 호출되는 것이 오버로딩이다.

4. 오버로딩의 장점

같은 역할의 메서드를 같은 이름으로 쓸 수 있다(메서드 이름의 절약)

만약 이름만으로 구별했다면

printlnchar()
printlnString()
printlnInt()

위와 같이 이름이 변경되어야 할 것

5. 가변인자와 오버로딩

기존에는 메서드의 매개변수 개수가 고정적이었으나 JDK 1.5부터 동적으로 지정 가능

public PrintStream printf(String format, Object... args){...}

printf()가 대표적인 예이다
Object... args가 가변인자이며, 항상 마지막 매개변수이어야 한다

예시로 문자열을 결합하는 메서드를 작성한다면 아래와 같이된다

concatenate(String s1, String s2){...}
concatenate(String s1, String s2, String s3){...}
concatenate(String s1, String s2, String s3, String s4){...}

->concatenate(String...str){...} 가변인자를 이용한 메서드

단, 가변인자는 내부적으로 배열을 이용하기에 비효율적이므로
꼭 필요한 경우에만 가변인자를 사용하자

profile
꾸준히 한걸음씩 나아가려고 하는 학부생입니다 😄

0개의 댓글