foxpacking

Programming Lessons

Java 언어 Korean

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

재귀 메소드

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

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

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

재귀 메소드 란?

재귀메소드사진New

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

  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

About Author

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You may also like

Korean Programming 기초

IT 개발자 VS 프로축구선수 비교?

IT 개발자와 프로축구선수의 같은 점과 다른 점? 프로그래밍 공부를 하시면서 개발자로 취업을 하려고 하는데 과연 취업을 할 수 있을까? IT
Korean 클라우드

AWS 로그인 불가능, AWS고객 센터 이메일 문의 결과는?

AWS 고객센터 이메일 문의 솔직후기 AWS를 사용하기 위해 로그인을 하는 경우 이메일로 코드 번호를 보내지만 이메일로 받을 수 없는 상황이거나