본문 바로가기

언어공부/Java

자바 메소드(Method) - 메소드 선언 / 메소드의 선언부 / 메소드의 구현부/ 지역변수/ 메소드의 호출

자바 메소드에 대해서 알아보자.

메소드(Method)

메소드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다. 어떤 값을 입력하면 이 값으로 작업을 수행해서 결과를 반환한다. 메소드는 입력값 또는 출력값(결과값)이 없을 수도 있으며, 심지어 입력값 및 출력값이 모두 없을 수도 있다.


메소드 정의

메소드는 크게 선언부(header)와 구현부(body)로 이루어져 있으며, 메소드를 정의한다는 것은 선언부와 구현부를 작성하는 것으로 뜻하며 아래와 같다.

 

반환타입 메소드이름 (타입 변수명, 타입 변수명, ...) >> 선언부 (header)

{                                            

        //메소드 호출시 수행될 코드

} >> 구현부 (body)                   

 

ex) int add(int a, int b)

{

         int result = a+b;

         return result; // 호출된 메소드로 결과를 반환한다.

}

 


메소드의 선언부 (header)

메소드의 선언부는 "반환타입", "메소드의 이름", "매개변수 선언"으로 구성되어 있다.

 

반환타입은 메소드의 작업수행 결과(출력)인 반환값(return value)의 타입을 적는다. 여기서 반환값이 없는 경우는 "void"를 적는다.

 

매개변수 선언에서 매개변수는 메소드가 작업을 수행하는데 필요한 값들(입력)을 제공받기 위한 것이며, 필요한 값의 개수만큼 변수를 선언하며 각 변수 간의 구분은 쉼표(,)를 사용한다. 값을 입력받을 필요가 없다면 매개변수를 적지 않는다.

 

매개변수에는 기본형 매개변수(변수의 값을 읽기만 함(read only)), 참조형 매개변수(변수의 값을 읽고 변경함(read&write))가 있다. 기본형으로 선언하면 단순히 저장된 값만 얻지만, 참조형으로 선언하면 값이 저장된 곳의 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능하다.

 

반환타입도 없고 매개변수가 없는 메소드는 아래와 같다. 해당 메소드는 작업을 수행하는데 필요한 입력도 결과인 출력도 없다.

ex) void printHello() {

          System.out.println("Hello");

     }

 


메소드의 구현부(body)

메소드의 선언부 다음에 오는 { }부분을 메소드의 구현부라고 하며, 여기에 메소드를 호출 했을 때 수행될 문장들을 넣는다.

 

메소드의 반환타입이 "void"가 아닌 경우, 구현부{ }안에 "return 반환값;"이 반드시 포함되어 있어야 한다. (사실 void인 경우에도 return ;으로 있어야 하지만 컴파일러가 자동 추가하기 때문에 생략이 가능하다.) 이 문장은 작업을 수행한 결과인 반환값을 호출한 메소드로 전달하는데, 이 값의 타입은 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 한다. 또한 return문은 단 하나의 값만 반환할 수 있으며 항상 결과값이 반환되도록 해야한다.

ex) int add(int x, int y) // 반환 타입은 int타입.

{

          int result = x+y;

          return result ; //반환되는 result는 int타입이어야 한다.

}

 

 

return문의 반환값으로 주로 변수가 오긴 하지만 항상 그런것은 아니다. "x+y"라는 수식도 올 수 있으며, 수식이 반환되는 것은 아니고, 이 수식을 계산한 결과가 반환된다.

 

또는 return abs(x-y); 도 가능하다. 메소드를 반환하는 것이 아닌 메소드 abs를 호출하고, 그 결과를 받아서 반환하는데 abs의 반환타입이 diff메소드의 반환타입과 일치하기 때문에 가능하다.

ex) int abs(int x)

{

    if(x>=0){

          return x;

   } else {

          return -x;

   }

}

int diff(int x, int y) // 반환 타입은 int타입.

{

          return abs(x-y) ; //반환되는 result는 int타입이어야 한다.

}

 


지역변수(local variable)

메소드 내에 선언된 변수를 지역변수(local variable)이라고 하며, 메소드 내에 선언된 변수들은 그 메소드 내에서만 사용할 수 있으므로 서로 다른 메소드라면 같은 이름의 변수를 선언해도 된다. 매개변수도 메소드 내에 선언 된 것으로 간주되므로 지역변수이다.

 


메소드의 호출

메소드를 정의했어도 호출되지 않으면 아무 일도 일어나지 않는다. 메소드를 호출해야만 구현부{ }의 문장들이 수행된다. (main메소드는 프로그램 실행 시 os에 의해서 자동적으로 호출된다.) 메소드 호출 방법은 아래와 같다.

ex) 메소드 이름(값1, 값2, ..) //메소드 호출 방법.

 

메소드를 호출할 때 ( )안에 지정해준 값들을 인자라고 하며, 인자의 개수와 순서는 호출된 메소드에 선언된 매개변수와 일치해야 한다. 그리고 인자는 메소드가 호출되면서 매개변수에 대입되므로, 인자의 타입은 매개변수의 타입과 일치하거나 자동 형변환이 가능해야 한다.