본문 바로가기

프로그래밍/자바

[JAVA] 자바 오버로딩 (Overloading), 가변인자 (varargs)

※ 공부하면서 새롭게 알게 된 점 위주로 정리 (Java의 정석 3판)

오버로딩 : 같은 이름의 메서드를 매개변수 개수 혹은 타입을 다르게 여러 개 정의 

 

오버로딩 예시
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }

위의 예시와 같이 매개변수의 순서가 다른 경우 역시 오버로딩으로 간주된다.

그러나 add(3,3)과 같이 호출하게 된다면, 두 메서드 중 어느 메서드가 호출된 것인지 알 수 없기 때문에 컴파일 에러가 발생하므로 주의해야한다.

 

오버로딩 장점

 

  • 같은 기능을 수행하는 메서드를 매개변수 별로 일일히 다르게 이름을 지정 할 필요가 없다.
  • 따라서 매개변수가 다르더라도 메서드의 이름이 같기 때문에 같은 기능을 수행하는 메서드임을 예측 할 수 있다.
  • 메서드의 이름을 절약할 수 있다.

 


가변인자 (variable arguments) : 메서드의 매개변수를 동적으로 지정 가능

 

가변인자 특징

 

  • ' 타입... 변수명 ' 형식으로 선언
  • 가변인자 외에도 매개변수가 더 있다면, 가변인자를 맨 마지막에 선언 (그렇지 않는다면 컴파일 에러
  • 호출 할 때 인자가 없어도 가능하다.
  • 배열도 인자가 될 수 있다. (내부적으로 배열을 이용하기 때문)
  • 가변인자가 선언된 메서드를 호출 할 때마다 배열이 생성되므로 비효율적이다. 따라서 필요한 경우에만 사용하는것이 좋다.
가변인자 예시
String concat(String s1, String s2)
String concat(String s1, String s2, String s3)
String concat(String s1, String s2, String s3, String s4)
String concat(String... str)

위의 3개의 메서드를 가변인자를 사용하여 한개의 메서드로 작성할 수 있다.

 

매개변수 '가변인자' vs '배열'
String concat(String[] str)

String s = concat(new String[0]);
String s = concat(null);

가변인자는 호출 할 때 인자가 없어도 가능하지만 매개변수가 배열일 경우 호출 할 때 반드시 인자를 지정해줘야 하기 때문에 3,4줄과 같이 선언해줘야하는 불편함이 존재한다.

 

cf) C언어와 달리 Java에서는 길이가 0인 배열 생성 가능

 


가변인자와 오버로딩
String concat(String delim, String... args)
String concat(String... args)

두개의 메서드는 구분되지 않아서 컴파일 에러가 발생하게 된다.

따라서 가변인자를 사용한 메소드는 가급적 오버로딩하지 않는 것이 좋다.

'프로그래밍 > 자바' 카테고리의 다른 글

22-11-06 배운 내용  (0) 2022.11.07
22-10-30 배운내용  (0) 2022.10.30
[JAVA] 자바 클래스, 인스턴스  (0) 2022.09.27
[JAVA] 자바 변수, static  (0) 2022.09.14
[JAVA] 자바 클래스 (Class)  (0) 2022.09.14
Recent Posts
Popular Posts