336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
자바 1.5에서 가변 인자 메서드(Variable arity method)라고 부르는 varargs 메서드가 추가되었다. 이 메서드는 지정된 자료형의 인자를 0개 이상 받을 수 있다.
가변인자가 없었다면 컬렉션이나 배열을 통해 사용했다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public final class Test { public static void display(List<String> list) { for(String s: list) { System.out.println(s); } } public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("ktko"); list.add("kyungtae"); list.add("Ko KyungTae"); display(list); } } |
1.5 부터 추가된 가변인자를 사용하게 된다면 ? 아래와 같이 파라미터 변수에 ...을 파라미터 변수명 앞에 붙여주면 된다.
1 2 3 4 5 6 7 8 9 10 11 | public final class Test { public static void display(String ...strs) { for(String s: strs) { System.out.println(s); } } public static void main(String[] args) { display("ktko", "kyungtae", "Ko KyungTae"); } } |
가변인수는 컴파일러의 눈속임과 비슷하다. 파라미터의 앞에 ...을 붙여주면 컴파일러가 파라미터를 배열 형식으로 바꾸어버리고, 매개변수로 주어지는 변수들을 모아서 객체로 만들어버린다.
이 것을 확인하려면 jad 역컴파일러를 이용해서 보면 쉽게 알 수 있다.
가변인자를 사용하면 무조건 가변인자만 사용할 필요는 없다. 아래 예제를 보면 String로 선언된 나이, 그리고 가변인자를 선언한 strs를 보면 처음 파라미터로 들어온 age는 배열이 아닌 것으로 사용된다.
가변인자를 사용할 때 주의할 점 2가지가 있다.
1. 가변인자는 여러개 사용될 수없다.(직접 해보았는데 아니라면 댓글을..) 그리고 가변인자는 항상 파라미터 마지막에 있어야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 | public final class Test { public static void display1(String age, String ...strs) { System.out.println("age : " + age); for(String s: strs) { System.out.print(s + " "); } } public static void main(String[] args) { display1("30", "ktko", "kyungtae", "Ko KyungTae"); } } |
2. 가변인자를 사용하게 되면 인자를 넣지 않아도 정상적으로 실행이 된다. 의도치 않은 결과를 일으킬 수 있기 때문에 가변 인자를 사용할 때 가변인자의 길이를 가지고 Exception을 호출하거나, 사용자가 인지하고 방어적 코드를 기재해야한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public final class Test { public static void varargsTest1(String ...args) { } public static void varargsTest2(String args) { } public static void main(String[] args) { varargsTest1(); varargsTest2(); //실행하기 전에 Error } } |
'Java 개발 이야기' 카테고리의 다른 글
자바 강한참조(Strong Reference)와 약한참조(Weak Reference) (0) | 2018.10.03 |
---|---|
자바 박싱(boxing)과 언박싱(unboxing) (0) | 2018.09.27 |
자바 제네릭(Generic) 개념과 사용법 1탄 (0) | 2018.09.12 |
자바 Map 출력하기 (0) | 2018.05.16 |
자바 @SuppressWarnings 사용하기 (0) | 2018.05.01 |