JAVA 2011. 6. 2. 00:33
지금까지의 예제들을 보면 매소드가 main 매소드 하나였다. 하지만 클래스 안에 하나 이상의 

매소드를 쓸 수 도 있다. 다음 예제를 살펴보자.

class MethodTest {
public static void main(String args[]){
printCharater('*', 30);
System.out.println("Hello, Java");
printCharater('-', 30);
}

static void printCharater(char ch, int num) {
for(int i = 0; i < num; i++)
System.out.print(ch);
System.out.println();
}
}

붉은 색의 main 매소드와 녹색의 printCharater 매소드가 있다. 앞에서 말한 적이있는데

클래스는 main 매소드를 꼭 가져야 하며 이 매소드는 클래스가 실행될 때 처음 실행되는 

부분이다. 그러므로 main 매소드는 자동으로 실행이 되지만 printCharater  매소드는 

어디에선가 호출을 해줘야만 수행을 한다. 위의 소스를 보면 

printCharater('*', 30);  
printCharater('-', 30);  

이 두 줄이 각각 printCharater  매소드를 실행시키는 매소드 호출문이 된다.

프로그램을 위에서부터 수행하는 도중 매소드 호출문을 만나면 실행의 흐름을 

해당 매소드로 이동하여 그 매소드를 다 읽고 다시 돌아와서 나머지를 수행한다. 

위에서 보면 main 매소드를 들어와 printCharater('*',30);을 만나 매소드가 호출되면

녹색의 printCharater 매소드를 전부 수행하고 다시  printCharater('*',30);으로 돌아와

다음줄인 System.out.println("Hello, Java"); 를 실행한다.

때로는 매소드를 실행하는데 필요한 데이터를 매소드를 호출하는 쪽에서 매소드로 

넘겨주어야 할 때가 있다. 이럴 때 넘어가는 값을 파라미터(Parameter) 라고 하며 

위 예제처럼  printCharater('*',30); 소괄호 안에있는 두 가지가 파라미터가 된다.

이렇게 넘겨주면 받는 쪽에선 static void printCharater(char ch , int num);

이런식으로 받는데 잘 보면 char라는 타입과 int 타입을 받는다, 

위에서 매소드에 데이터를 넘겨줄 때에는 이 데이터타입에 맞게 넣어야 하며 타입이 

일치하지않으면 수행하지 않는다, 타입에 맞게 순서대로 넣는 것이 중요하다.

매소드 호출문 작성방법

매소드 이름 ( 파라미터1, 파라미터2);

파라미터 갯수는 많아도 상관없지만, 받는 쪽에서도 그만큼의 갯수와 타입이 맞아야한다.

위 소스 를 수행해보면 아래와 같은 결과가 나온다. 

******************************
Hello Java.
------------------------------
이유는 충분히 아실만하게 위에 설명했는데 이해가 안가신다면 난감효..

리턴값을 받는 매소드 호출문 

어떤 매소드는 주어진 일만 실행하는 것이 아니라 실행의 결과를 호출한 쪽으로 돌려준다.

그런 결과를 매소드 리턴값 (return value) 이라고 하는데 이런 리턴값을 받으려면 

다음과 같이 작성해야한다.

변수  = 매소드이름 ( 파라미터1, 파라미터2);
예) sum = add(1,2);

예제를 보자.

class MethodTest2 {
public static void main(String args[]){
int result;
result = add(3,4);
System.out.println(result);
}

static int add(int num1, int num2) {
int sum;
sum = num1 + num2;
return sum;
}
}

int 형의 result 변수에 add매소드를 호출한다 파라미터를 3,4 를 넘겼다 .

add매소드를 가보면 타입에 맞게 num1,num2로 파라미터를 받는다.

그럼 순서대로 num1엔 3이 , num2엔 4가 대입된다. 이제 add 매소드에서

num1 과 num2 를 사용하여 연산을 수행한다. 예제를 보면 이 둘을 더하여 sum이라는

변수에 담는다. 그럼 sum은 7이 될 것이다. 그러고 return sum; 을 한다.

return은 매소드의 호출부로 값을 되돌려 주는 것이다. 다시말해 

이 의미는  result = add(3,4); 여기서 add(3,4)가 호출부이기 때문에 return sum; 의 

sum이 add(3,4) 자리에 들어간다. 즉 result = 7 과 같은 의미이다.  
 
System.out.println(result); 이렇게 찍어보면 역시나 7이 딱 찍힌다.

여기서 주의 할점은   result = add(3,4); 이처럼 호출부를 담는 result 라는 변수는 

int 형인데 이 타입을 호출받는 매소드도 이 타입이여야한다.

static int add(int num1, int num2) { 여기서의 int 가 그 이유이다.

만약 호출부에서 

String arr;
arr = str("A, "B");

이런식으로 문자형으로 보내면 받는 쪽의 매소드도

static String str(String ar1, String ar2) 이여야 한다. 기억해야놔야 할 것 같다 

호출부를 담는 변수의 타입에 맞게 매소드 타입도 맞춰줘야 된 다는 것을.

참고로 리턴 값이 없어도 되는 매소드는 return; 이런식으로 따로 넘겨줄 값을 적지않고

세미콜론(;) 으로 마무리짓는다, 이렇게 하면 맨처음 예제에서도 보았듯 호출부로

되돌아가기만 한다. 그리고 방금 말했던 타입을 넣는 부분엔 void 라는 것을 쓴다.

맨처음 예제의 static void printCharater(char ch, int num) 에서의 void가 그 이유이다.

printCharater 라는 매소드에는 리턴해주는 값이 없기때문이다. 

void가 붙으면 이 매소드는 리턴값이 없고 그냥 작업을 다하면 호출부로 되돌아가는구나

라고 알고있으면 될 것 같다. 

이것 만 알고 있어도 소스 흐름을 읽는데 많은 도움이 되고 이해할 수 있었다.

이해 안가는 부분이 없을 때까지 봐둬야 겠다. 설명이 구려서 이해를 못 할지도 모르겠다.. ☞☜













출판사 : 한빛미디어 , 저자 : 김윤명 님의 뇌를 자극하는 Java프로그래밍에서 공부한 내용입니다. 
posted by 젊은쎄오
: