Method

최준호·2021년 7월 6일
0

java

목록 보기
5/25

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 (가변 인자)

      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개");
          }
      }

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

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

메서드 오버로딩

오버로딩이라는 것은 하나의 클래스 내에서 같은 이름을 가지는 메서드가 여러개 정의되는 것을 말한다. 이것이 가능한 것은 컴파일할 때 컴파일러에 의해 각 메서드들이 구별되며 기준은 인자가 되기 때문이다. 오버로딩의 목적은 일관된 작업이며 그것으로 프로그램의 신뢰가 높아지게 된다. 그 예로 자주 사용하게 되는 (기본 자료형).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으로 변경되어진 걸 확인할 수 있다. 이처럼 메서드의 이름은 동일하지만 매개변수의 타입이나 갯수등을 변경하여 사용하는 것을 오버로딩이라한다.

profile
해당 주소로 이전하였습니다. 감사합니다. https://ililil9482.tistory.com

0개의 댓글