728x90

메서드를 사용하다 보면 '가변 인자'를 사용할 때가 있다.
가변 인자를 사용하면 해당 원소들은 어떻게 처리될까?
가변 인자 기능은 JDK1.5부터 사용이 가능해졌다. 그전까지는 메서드의 매개변수 개수가 고정적이었으나 해당 업데이트 이후부터 매개변수 개수를 "동적"으로 지정할 수 있게 된 것이다.
가변 인자는 '매개변수 타입... 변수명' 형식으로 선언한다.
// 예시
String concatenate(String... str) {...}
가변인자의 기능 원리는, 가변 인자가 내부적으로 '배열'을 생성하고 매개변수에 들어온 원소들을 해당 배열에 배치한다.
아래 예제에서 변수명 args는 개발자가 입력한 매개변수들로 만들려는 배열의 이름과 동일하다.
public String[] method1(String... args) {
return args;
}
그렇다면 만들어진 배열을 컬렉션 프레임워크 중 하나인 List<E>로 변환은 어떻게 할까?
이때 Arrays 클래스의 정적 메서드인 asList(E[ ] t) 메서드를 사용한다. asList()의 반환 타입은 List<E>이다. 따라서 해당 메서드를 사용하면 만들어진 배열이 컬렉션 프레임워크의 List<E>로 바뀐다.
하지만, 한계가 있다. Arrays.asList(E[] t);는 정적 메서드이기 때문에 변환된 리스트의 원소 개수 변경이 불가능하다. 만약 원소 추가 및 삭제를 시도하면 런타임 에러가 발생할 것이다.
따라서 Arrays.asList 메서드를 사용해 변환된 리스트는 add()와 remove() 메서드는 사용할 수 없다. 대신 원소의 개수는 변화시키지 않는 set(int index, E e)는 가능하다.
'Java' 카테고리의 다른 글
| [Java] 배열과 리스트 사이의 변환 방법들 ( feat. Arrays.asList() ) (0) | 2022.09.01 |
|---|---|
| [Java] String 클래스의 .split() 메서드 사용하기 (0) | 2022.08.31 |
| [Java] System.out.printf() 메서드 사용법 (feat. String.format()) (0) | 2022.08.29 |
| [Java] '재귀 함수'를 사용해서 내부 객체를 탐색하기 (feat. 족보 구현) (0) | 2022.05.23 |
| [OOP] 객체지향 개발 5대 원칙, 'SOLID'란 무엇인가? (1) | 2022.04.13 |