ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Method
    개인 공부/java 2021. 6. 11. 07:52
    728x90
    반응형

    Method란

    메서드는 클래스의 행위를 표현하는 것으로 클래스 내의 함수로 볼 수 있다. 지금까지 공부했던 필드 변수들이 물체라면 그 물체들의 행동을 만들어주는 것이 메서드이다. 메서드는 입력값(매개변수=parameter)가 있고 그 입력값을 받아서 무언가의 결과를 반환해낸다. 그 유명한 input이 있으면 output이 있다. 메서드란 클래스의 기능으로써 무조건 클래스 안에 선언해야한다.

    매개변수(=parameter)의 전달과 반환의 방식

    • Call by value

      메서드에서 매개변수를 받아서 값만 사용하고 전달 받은 매개변수의 값에는 영향을 미치지 않는 방식이다. 또한 대부분 매개변수로 기본 자료형을 받는다.

        class Test{
            public int increase(int n){
                n++;
                return n;
            }
      
            public static void main(String[] args){
                int val1 = 1;
                Test test = new Test();
                int val2 = test.increase(val1);
                System.out.println("val1 = "+val1+", val2 = "+val2);
            }
        }

      다음과 같은 코드에서 val1을 매개변수 int n으로 전달하여 값을 증가시키고 반환하였다. 그리고 결과 값을 확인해보면 val1=1, val2=2 가 나오는데 그 이유는 매개변수로 사용된 val1을 복사한 int n의 값을 증가시켜서 반환하여 val2의 값이 되었기 때문이다. 이렇게 매개변수의 값만을 사용하는 방식을 Call by value라고 한다.

    • Call by reference

      메서드에서 매개변수를 실인자로 사용할 경우를 의미한다. 매개변수는 대부분 일반 객체 또는 배열들을 사용한다.

        class Test2{
            public void increase(int[] n){
                for(int i=0; i<n.length; i++){
                    n[i]++;
                }
            }
      
            public static void main(String[] args){
                Test2 test = new Test2();
                int[] val = {1,2,3};
                test.increase(val);
      
                for(int n : val){
                    System.out.println("result > "+n);
                }
            }
        }

      위의 Call by value와는 다르게 이번 코드에서는 실제 배열의 값들이 증가되어서 출력되어진다. 그 이유는 매개변수로 사용된 참조변수의 주소값을 그대로 매개변수에게 복사되어 참조변수가 기억하고 있는 객체값이 직접적으로 변경되는 것이다. 실제 객체의 값과 매개변수의 인자 값이 가지는 주소값이 같기 때문에 이를 Call by reference라고 한다.

    • Varargs (가변 인자)

      Varargs란 지금까지 예제들은 매개변수의 갯수가 정해져있었고 매개변수의 갯수를 일치하게 넣어주지 않는다면 오류가 발생했다. 하지만 가변 인자를 사용하면 어떤 때에는 2개의 매개변수를 사용하고 또 어떤 때에는 3개의 매개변수를 사용하여 메서드를 호출할 수 있다.

        class Test3{
            public void argTest(String... n){
                for(String s : n){
                    System.out.println("s > "+s);
                }
            }
      
            public static void main(String[] args){
                Test3 test = new Test3();
                test.argTest("varargs","test","3개");
                test.argTest("varargs","test","하나더","4개");
            }
        }

      다음과 같이 매개변수의 자료형에 ...을 붙여서 선언해주면 같은 자료형으로는 몇개든 넣어도 메서드를 호출할 수 있도록 사용할 수 있다.

    메서드 오버로딩

    오버로딩이라는 것은 하나의 클래스 내에서 같은 이름을 가지는 메서드가 여러개 정의되는 것을 말한다. 이것이 가능한 것은 컴파일할 때 컴파일러에 의해 각 메서드들이 구별되며 기준은 인자가 되기 때문이다. 오버로딩의 목적은 일관된 작업이며 그것으로 프로그램의 신뢰가 높아지게 된다. 그 예로 자주 사용하게 되는 (기본 자료형).valueOf() 메서드가 있는데 valueOf(매개변수)의 매개변수는 각 다른 기본 자료형들이 모두 들어간다.

    class Test4{
        public static void main(String[] args){
            int val1 = 100;
            Long val2 = 200L;
            String val3 = "300";
    
            System.out.println(String.valueOf(val1));
            System.out.println(String.valueOf(val2));
            System.out.println(Integer.valueOf(val3)+1);
        }
    }

    위의 코드를 실행해보면 int 타입의 val1과 Long 타입의 val2가 모두 String으로 변경되어진 걸 확인할 수 있다. 이처럼 메서드의 이름은 동일하지만 매개변수의 타입이나 갯수등을 변경하여 사용하는 것을 오버로딩이라한다.

    728x90
    반응형

    '개인 공부 > java' 카테고리의 다른 글

    static 변수와 static 메서드 그리고 static 초기화  (0) 2021.06.17
    생성자와 this  (0) 2021.06.14
    캡슐화와 변수의 개념  (0) 2021.06.09
    Class와 객체(Object)  (0) 2021.06.08
    JVM이란  (0) 2021.06.06
Designed by Juno.