자바의 정석 - 기초편

Return 문, 반환값

ODaram 2022. 8. 5. 15:14

return 문

 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다.

 void printGugudan (ing 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);  

            }

            return;                              // 반환 타입이 void 이므로 생략 가능, 컴파일러가 자동추가

 }

 

반환 타입이 void 가 아닌경우, 반드시 return문 필요

  int multiply ( int x, int y) {

       int result = x * y; 

       return result;              // 반환 타입이 void가 아니므로 생략 불가

  }

 

 

  int max (int a, int b) {

     if ( a>b) 

        return a;           // 에러(: return 문이 없음) 조건식이 참일 때만 실행된다.
  }

      >> 조건문이 참일때는 return 이 있으나 거짓인 경우에 return문이 없음

      그래서 else를 추가해 거짓을 때 실행 하는 것을 넣어주어야함

else 추가

구구단 메서드 만들어서 출력해보기

class Ex6_4 {
	public static void main(String args[]) {
		MyMath mm = new MyMath();
		mm.printGugudan(3); // 구구단 3단을 출력
	}
 }

 class MyMath {
	 void printGugudan (int dan) {
		 for (int i=1; i<=9; i++) {
			 System.out.printf("%d * %d = %d%n",dan, i, dan*i );
		 }
         return;               //반환타입이 void이기 때문에 써도, 안써도 상관 X
	 }
 }

2~9 단이 아닌경우에는 출력되지 않도록 설정

class Ex6_4 {
	public static void main(String args[]) {
		MyMath mm = new MyMath();
		mm.printGugudan(3); // 구구단 3단을 출력
	}
 }

 class MyMath {
	 void printGugudan (int dan) {\
     	 if( !(2<=dan && dan <=9)){ // 입력받은 dan값이 2~9가 아니면
         	return;   				// 메서드 종료하고 돌아가기
         }
		 for (int i=1; i<=9; i++) {
			 System.out.printf("%d * %d = %d%n",dan, i, dan*i );
		 }
         return;               //반환타입이 void이기 때문에 써도, 안써도 상관 X
	 }
 }

 

 

두 값을 받아서 둘 중에 큰 값을 반환하는 메서드 작성

1) return 값을 줬음에도 이슈 발생하는 이유?

class Ex6_4 {
	public static void main(String args[]) {
		MyMath mm = new MyMath();
		long result5 = mm.big(5L, 0L);

		System.out.println("더 큰 값은(5L, 0L) = " + result5);
	}
 }

 class MyMath {
	long big(long a, long b) {
		if(a > b) {
			return a;   // 조건식이 참일때만 실행
		}
	}
 }

this method must return a result of type long

     Q. long 타입의 반환값을 지정해 줘도 왜 이슈가 발생할까?

    >> 조건식이 참일때만 실행하는 문장 하나만 있기 때문에

해결 하기 위한 방법

class Ex6_4 {
	public static void main(String args[]) {
		MyMath mm = new MyMath();
		long result5 = mm.big(5L, 0L);

		System.out.println("더 큰 값은(5L, 0L) = " + result5);
	}
 }

 class MyMath {
	long big(long a, long b) {
		if(a > b) {
			return a;   // 조건식이 참일때만 실행
		} else{
         return b;      // 조건식이 거짓일 때 실행
        }
	}
 }

  >> esle 를 넣어서 거짓일 때도 값을 반환 시킴

 

반환값 

(반환값 : return 옆에 있는 값)

메서드의 반환값이 void가 아닐때, return 문을 생략할 수 없음

기본적으로 int 와 반환값의 타입이 일치 해야함 (int로 자동형변환 될 수 있음:  char, byte, short)

 

메서드 사용 시 타입이 일치해야함!