Categories: Java 언어Korean

Java 총 정리[41. 재귀 메소드]

재귀 메소드

지금까지 여러 가지 메소드에 대한 내용을 공부하고 문제를 풀어봤습니다. 이제 메소드 관련해서 마지막 내용을 설명을 드리려고 합니다. 우선 이 내용은 메소드에 대한 형태나 구조를 이해가 확실하다면 이해를 더 빨리 할 수 있고 굳이 설명을 하지 않아도 되지만 대부분 어려워하기 때문에 이번 걸음에서 다루려고 합니다. 이 글을 끝까지 읽어주세요.

메소드의 동작 방식은 FILO이고 Stack구조로 이루어져 있습니다. 이 전제로 생각을 하신다면 분명 이해를 잘 하실 수 있습니다. 이번 걸음에서 이야기 할 내용은 메소드가 메소드 명령문 안에서 본인 메소드를 다시 호출 하는 방식에 대한 내용을 설명을 하려고 합니다. 대부분 이렇게 이야기를 들으시면 많이 당황 하시고 어려워 하실 수 있습니다. 하지만 이 글을 끝까지 읽고 함께하신다면 분명 이해를 하고 잘 활용을 하실 수 있습니다.

메소드에서 본인 메소드를 다시 호출을 하는 것을 재귀 메소드 또는 재귀 메소드 호출이라고 부릅니다. 여기서 본인이 본인을 부르게 되면서 메소드를 이해하고 사용을 할 때 많은 어려움을 겪으실 수 있습니다. 하지만 재귀 메소드는 종종 많이 볼 수 있는 메소드 호출 방식이고 사용 방식입니다. 그렇기 때문에 메소드 기본 개념인 Stack구조로 이해를 한다면 좀 더 이해를 쉽게 하실 수 있습니다. 당연히 이 글을 끝까지 읽으신다면 메소드의 마지막 내용을 공부하고 실력이 향상 되실 수 있습니다.

재귀 메소드 란?

재귀 메소드란 메소드가 호출이 되어서 그 메소드 명령문을 실행을 할 때 다시 본인 메소드를 부르는 것은 재귀 호출을 하게 됩니다. 그렇게 동작을 한다면 다시 본인 메소드가 불리고 그리고 다시 본인 메소드를 부르게 되는 현상들이 발생을 합니다. 이때 이 재귀 메소드를 이해를 하기 위해서는 몇 가지를 꼭 알아야만 합니다.

  1. 계속 본인 메소드만 부르면 메소드를 나갈 수 있는 방법이 없기 때문에 꼭 나갈 수 있는 다른 조건이 있어야 합니다.
  2. 메소드가 호출 되고 다시 본인 메소드를 호출을 하게 되면 그 메소드는 다른 메소드 호출 하는 것과 똑같이 Stack구조로 쌓여서 FILO형식으로 동작을 합니다.
  3. 재귀 메소드를 사용해서 본인 본인을 부르게 되면 반복문과 같은 효과를 낼 수 있습니다.

※ 꼭 같은 메소드라도 메모리 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가 됩니다.

함께 보면 좋은 글

§ Java 첫 걸음 변수와 자료형
§ Java 두 걸음 연산자
§ Java 세 걸음 형 변환
§ Java 네 걸음 Eclipse 설치
§ Java 다섯 걸음 Eclipse 개발 준비
§ Java 여섯 걸음 출력
§ Java 일곱 걸음 출력
§ Java 여덟 걸음 문제 풀기 1
§ Java 아홉 걸음 한글 깨짐
§ Java 열 걸음 제어문
§ Java 열 한걸음 if문
§ Java 열 두걸음 switch문
§ Java 열 세걸음 while문
§ Java 열 네걸음 for문
§ Java 열 다섯걸음 중첩 및 주의 사항
§ Java 열 여섯걸음 문제 1
§ Java 열 일곱걸음 문제 2
§ Java 열 여덟걸음 break continue
§ Java 열 아홉걸음 random
§ Java 스물 걸음 별 찍기 1
§ Java 스물 한걸음 별 찍기 2
§ Java 스물 두걸음 가위 바위 보 게임
§ Java 스물 세걸음 배열
§ Java 스물 네걸음 배열 활용
§ Java 스물 다섯걸음 Rando 활용 문제
§ Java 스물 여섯걸음 숫자 야구 게임
§ Java 스물 일곱 걸음 배열 숫자 야구 게임
§ Java 스물 여덟 걸음 다차원 배열
§ Java 스물 아홉 걸음 다차원 배열 심화
§ Java 서른 걸음 다차원 배열 문제
§ Java 서른 한 걸음 가변 배열
§ Java 서른 두 걸음 메소드(함수)
§ Java 서른 세 걸음 메소드형태
§ Java 서른 네 걸음 메소드 기초활용
§ Java 서른 다섯 걸음 메소드 문제1
§ Java 서른 여섯 걸음 메소드 구조 및 활용
§ Java 서른 일곱 걸음 메소드문제 2
§ Java 서른 여덟 걸음 Call by Value
§ Java 서른 아홉 걸음 Call by Reference
§ Java 마흔 걸음 메소드 숫자 야구 게임
Dolphin

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

4개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

5개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

5개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

6개월 ago

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화 이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에…

6개월 ago

Java 총 정리[92. 쓰레드 join()]

쓰레드 join() 이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름…

6개월 ago

This website uses cookies.