NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Java 15-5. 메소드 가변 인자. (...)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 자바 메소드의 마지막이군요. 이 외에도 알아볼 내용은 많지만, 기본적인 내용은 가변 인자를 마지막으로 마치며 나머지 내용들은 좀 더 심도있게 알아볼 수 있는 시간을 갖도록 하겠습니다.

     

    ... 키워드를 사용하면 여러개의 인수를 사용하는 메소드 가변 인자를 지정할 수 있습니다. 가변 인자 선언에 지정된 형식의 심표로 구분된 인수 목록 또는 지정된 형식의 인수 배열을 보낼 수 있습니다. 인수 없이 보낼수도 있는데 이때는 가변 인자 목록의 길이는 0이 됩니다. 메소드 선언에서 가변 인자 키워드 다음에는 매개 변수를 추가할 수 없으며 가변 인자 키워드는 메소드 선언에 한번만 사용할 수 있습니다.

     

    다음 예제에서는 ... (가변 인자) 매개 변수에 인수를 보낼 수 있는 다양한 방법을 보여줍니다.

    package ObjectOrientedProgramming;
     
    public class MethodArguments {
        static int Sum(int... args) {
            System.out.print("Summing... ");
            int sum = 0;
            for (int i = 0; i < args.length; i++) {
                if (i > 0)
                    System.out.print(", ");
                System.out.print(args[i]);
                sum += args[i];
            }
            System.out.println();
            return sum;
        }
     
        public static void main(String[] args) {
            int sum = Sum(3, 4, 5, 6, 7, 8, 9, 10);
            System.out.printf("Sum : %s%n", sum);
            int[] myIntArray = { 5, 6, 7, 8, 9 };
            sum = Sum(myIntArray);
            System.out.printf("Sum : %s%n", sum);
            sum = Sum();
            System.out.printf("Sum : %s%n", sum);
        }
    }
    

     

     

    위 코드를 실행한 결과는 아래 스크린샷과 같습니다.

    MeDLi8K.png

     

     

    이 키워드는 잘 사용되지 않습니다. 이유는 가변 인자를 사용함으로써 얻는 장점보다 단점이 더 크기 때문입니다. 물론, 같은 형식의 인자들을 나열하는 것보다는 간편할 수 있지만, 메소드를 정의할 때 인자의 이름도 의미를 가지기 때문에 가독성면에서 그리 좋은 선택은 아닙니다. 명명된 인수를 사용할 때 얻는 이점과 Java에서 제공하는 Documentation기능 등등... 장점을 사용하지 못한다는 것은 손실이 큽니다. 위의 코드에서 알 수 있듯이 배열을 초기화 한 후 전달해도 결과는 같기 때문에 가변 인자는 대안적 선택일수밖에 없습니다.

    Mnn2IZN.jpg

     

     

    그렇더라도, 단순 형식의 반복문 처리에서는 효율적이기도 합니다. 불특정한 요소의 개수로 인해 메소드를 오버로딩하는 방식보다는 Object 형식의 가변 인자를 사용하고, 메소드 내부에서 처리할수도 있습니다. 논외이기는 하지만, 메소드를 만들 때 예외에 대한 처리는 메소드의 내부에서 처리하는게 정답입니다. 불특정 다수가 사용한다면 누군가는 이 메소드를 사용하기 전에 인자를 검증할것이고 누군가는 메소드가 검증해주기를 기대할수도 있습니다. 메소드 외부와 내부 모두 예외에 대한 검증을 한다는 것은 중복된 작업처럼 보일수도 있으나, 가장 좋은 방법이기도 합니다.

     

    다음 시간에...

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.