관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch6 - 20 ~ 22[return문, 반환값,호출스택] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch6 - 20 ~ 22[return문, 반환값,호출스택]

소소한나구리 2023. 11. 16. 19:28

1) return문

  • 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아감
  • 반환타입이 void가 아닐 경우 메서드 마지막에 return문을 반드시 작성
  • 반환타입이 void일 경우 컴파일러가 자동으로 추가하므로 생략이 가능하지만 반환타입이 void라는것은 어차피 반환할 값이 없도록 메서드를 정의했다는 뜻임
  • 메서드에 조건문이 있다면 참,거짓일때 모두 return문을 작성해야하며 둘 중 하나만 return문을 작성할 경우 에러 발생
// 리턴 예시
void printGugudan(int dan) {
	if (!(2 <= dan && dan <= 9))
		return;	// dan의 값이 2~9가 아닌경우, 호출한 곳으로 리턴

// 리턴문 생략
	for(int i=1; i<=9; i++) {
		System.out.printf("%d * %d = %d%n", dan, i, dan * i);
		// 반환 타입이 void이므로 return문 생략가능
    }
}


// 리턴 생략 불가(반환타입 void 아님)
int multiply(int x, int y) {
	int result = x * y;
	
	return result;	// 반환 타입이 void가 아니므로 생략불가
}

// 리턴문 에러 상황
int max(int a, int b) {
	if (a > b)
		return a;	// 조건식이 참일 경우만 실행 되어 에러발생
}

// 리턴문 에러 수정
int max(int a, int b) {
	if (a > b)
		return a;	// 조건식이 참일 때, 거짓일 때 모두 return문을 작성해야함
	}else {
		return b;
}

 

(1) 반환값

  • 반환값의 타입, 반환타입, 결과를 담을 변수의 타입이 모두 일치해야함
  • 자동형변환 기능 적용 가능
int result = mm.add(3, 5); // 결과를 담을 변수의 타입

int add(int x, int y) {	// 메서드의 반환타입
	int result = x + y;
	return result;      // 반환값의 타입
}

2) 호출 스택(call stack)

  • 스택: 밑이 막힌 상자처럼 하나씩 차곡차곡 쌓이는 자료구조
  • 메서드 수행에 필요한 메모리가 제공되는 공간

(1) 메서드가 호출되어 동작하는 방식

  • 메서드가 호출 -> 호출스택에 메모리 할당 -> 종료되면 해제
  • 아래 있는 메서드(먼저 호출된 메서드)가 위의 메서드(매서드 내부에서 호출된 메서드)를 호출
  • 맨 위의 메서드(제일 마지막에 호출된 메서드) 하나만 실행되고 나머지는 대기
  • 멀티 스레드일 경우 스택이 여러개 생기므로 여러 메서드를 동시에 실행할 수 있음 (스레드 1당 스택 1)

 

** 출처 : 남궁성의 정석코딩_자바의정석