지금까지 여러 가지 메소드에 대한 내용을 공부하고 문제를 풀어봤습니다. 이제 메소드 관련해서 마지막 내용을 설명을 드리려고 합니다. 우선 이 내용은 메소드에 대한 형태나 구조를 이해가 확실하다면 이해를 더 빨리 할 수 있고 굳이 설명을 하지 않아도 되지만 대부분 어려워하기 때문에 이번 걸음에서 다루려고 합니다. 이 글을 끝까지 읽어주세요.
메소드의 동작 방식은 FILO이고 Stack구조로 이루어져 있습니다. 이 전제로 생각을 하신다면 분명 이해를 잘 하실 수 있습니다. 이번 걸음에서 이야기 할 내용은 메소드가 메소드 명령문 안에서 본인 메소드를 다시 호출 하는 방식에 대한 내용을 설명을 하려고 합니다. 대부분 이렇게 이야기를 들으시면 많이 당황 하시고 어려워 하실 수 있습니다. 하지만 이 글을 끝까지 읽고 함께하신다면 분명 이해를 하고 잘 활용을 하실 수 있습니다.
메소드에서 본인 메소드를 다시 호출을 하는 것을 재귀 메소드 또는 재귀 메소드 호출이라고 부릅니다. 여기서 본인이 본인을 부르게 되면서 메소드를 이해하고 사용을 할 때 많은 어려움을 겪으실 수 있습니다. 하지만 재귀 메소드는 종종 많이 볼 수 있는 메소드 호출 방식이고 사용 방식입니다. 그렇기 때문에 메소드 기본 개념인 Stack구조로 이해를 한다면 좀 더 이해를 쉽게 하실 수 있습니다. 당연히 이 글을 끝까지 읽으신다면 메소드의 마지막 내용을 공부하고 실력이 향상 되실 수 있습니다.
재귀 메소드 란?
재귀 메소드란 메소드가 호출이 되어서 그 메소드 명령문을 실행을 할 때 다시 본인 메소드를 부르는 것은 재귀 호출을 하게 됩니다. 그렇게 동작을 한다면 다시 본인 메소드가 불리고 그리고 다시 본인 메소드를 부르게 되는 현상들이 발생을 합니다. 이때 이 재귀 메소드를 이해를 하기 위해서는 몇 가지를 꼭 알아야만 합니다.
계속 본인 메소드만 부르면 메소드를 나갈 수 있는 방법이 없기 때문에 꼭 나갈 수 있는 다른 조건이 있어야 합니다.
메소드가 호출 되고 다시 본인 메소드를 호출을 하게 되면 그 메소드는 다른 메소드 호출 하는 것과 똑같이 Stack구조로 쌓여서 FILO형식으로 동작을 합니다.
재귀 메소드를 사용해서 본인 본인을 부르게 되면 반복문과 같은 효과를 낼 수 있습니다.
※ 꼭 같은 메소드라도 메모리 Stack구조에 적재 될 때는 다른 메소드라고 생각을 하고 이해를 하시면 더욱 도움이 됩니다.
재귀 메소드 예제 및 설명
public class SelfCallTest {
static int abc(int num) {
if(num == 0) {
return 0;
}
else {
return abc(num-1) + num;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int num = abc(5);
System.out.println(num);
}
}
위 소스를 분석하면 main메소드에서 abc를 호출하게 되면 처음에 Stack에는 abc(5)가 들어가게 되고 그 다음은 abc(4) 이렇게 계속 쌓이게 됩니다. 그리고 마지막에 abc(0)이 호출되면 return을 0을 주기 때문에 이때부터 Stack구조에 메소드가 쌓이지 않고 계속 결과 값을 return을 하면 이전에 불렀던 메소드로 돌아가는 동작을 하게 됩니다. 이렇게 되면 결국에는 1+2+3+4+5가 되게 됩니다. 결국 결과는 15가 됩니다.