가변인자

wnstjq·2023년 2월 14일
0

java

목록 보기
4/5
post-thumbnail

개요

  • 로또 미션 중 가변인자에 대한 리뷰를 받아서 가변인자에 대해 정리하고자 한다
private static List<Integer> getNumbers(int... numbers) {
        return Arrays.stream(numbers)
                .boxed()
                .collect(Collectors.toUnmodifiableList());
	}

가변인자란?

  • 메서드의 매개변수의 개수를 유동적으로 지정하는 형식

  • 기존 자바에서 메서드의 매개변수 개수가 고정적이였으나 jdk1.5부터 동적으로 지정해 줄 수 있다.

  • 가변 인자는 타입 변수명과 같은 형식으로 선언하며, PrintStream클래스의 printf()가 대표적인 예이다.

public PrintStream printf(String format, Object... args) { ... } 
  • 위와 같이 가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야 한다. 그렇지 않으면, 컴파일 에러가 발생한다. 가변인자인지 아닌지를 구별할 방법이 없기 때문에 허용하지 않는 것이다.

  • 쉽게 말하면, 내부적으로 배열을 생성해놓고 내부적으로 배열을 이용하는 것이다. 하지만 이렇게 되면 호출될 때마다 계속 생성되는 것이다

    • 그럼 배열을 사용하면 되는 거 아닌가? → 배열로 하게 되면 인자를 생략할 수 없다.

가변인자의 활용

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

-> String concatenate (String... str) { ... }

가변인자를 신중하게 사용하자

  • 가변 인자 자체 성능 문제점이 발생할 수 있다
    • 메서드가 호출 될 때마다 새로 할당되고 초기화 되기 때문
  • 가변 인수 자체를 오버로딩 x
    • 어떤 메서드를 사용하는지 구분하기 힘들다
  • 배열 타입 매개변수와 혼용 x
    • 내부적으로 배열을 생성하기 때문에 동시에 사용 불가능
profile
공부방

0개의 댓글