최근 개발을 하다가 stack overflow 글을 보다가 특정 메소드에서 String ...data라는 방법으로 파라미터를 전달하는 코드를 보게 되었는데, 여태까지 그렇게 파라미터를 전달하는 것은 처음 봤기때문에 한번 공부도 할겸, 정리도 할겸해서 정리해보려고 한다.
먼저 가변인자는 JAVA 1.5이상 버전부터 사용가능하다고 하고, (데이터타입 ...변수명)으로 작성함으로 써 가변인자를 사용할 수 있는데, 가변인자를 통해 변수를 전달하면 컴파일러는 내부적으로 배열을 생성한다고 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Test { public static void main(String [] args) { new Test().sum(1,5,8,99); } public void sum(int ...a) { System.out.println(a.length); // 결과 : 4 System.out.println(a instanceof int[]); // 결과 : true Arrays.stream(a).sum(); // -> cannot find sysmbol 오류 발생 } } | cs |
콘솔창에 찍어본 결과를 보면 알 수 있듯 배열로 처리되기떄문에 a의 길이는 4가나왔고, 데이터 타입은 정수형 배열이다. (당연히 데이터가 1개여도 1개의 값이 들어있는 배열이다.)
보다보니 값이 배열로 처리된다면 당연히 Arrays.stream을 사용할 수 있을줄 알았는데, 가변인자로 전달할 경우 사용이 불가능한 것 같다.
그렇다면 가변인자는 어디서 사용하면 좋은가? 라는 질문에 내 생각에는 오버로딩 메소드를 작성할 때 인자수를 늘리기보다는 처음 만들 때 가변인자를 이용해서 작성하면 코드수를 줄일 수 있지 않을까 생각한다.
이후에 나도 실무에서 사용해보고 추가적으로 내용을 추가할 예정이다.
'JAVA' 카테고리의 다른 글
JAVA 입력과 출력(Scanner, BufferedReader..) (0) | 2020.12.17 |
---|---|
JAVA에서 리스트안의 원소를 중복제거하는 방법? (0) | 2020.11.04 |
HttpResponse와 Unirest를 이용한 외부 데이터 요청 (0) | 2020.06.17 |
JAVA 문자열 자르기 2 (substring 사용법) (0) | 2020.06.02 |
JAVA 문자열 자르기(split) (0) | 2020.04.17 |