void 와 return

박영준·2023년 2월 27일
0

Java

목록 보기
45/111

void

  • return 필수 X
  • Java 에서 메서드의 경우, 리턴값이 어떤 형태(타입)인지 반드시 표시해야만 한다.
    (그렇지 않을 경우, 오류가 발생)
    • 그리고 리턴값이 없을 때 void 를 사용하는 것

1. 다중 파라미터

public static void 메서드이름(변수형 파라미터1, 변수형 파라미터2) {
   .....
}

// setter는 무엇에 어떤값을 넣기 위함 → 그래서, return 이 없다. (return 없이, 원하는 작업을 하고 끝)
public void setName(String name) {
   this.name = name;
}

메서드가 연산을 수행에 2개 이상의 파라미터가 필요하다면, 콤마로 구분하여 선언 가능

2. 파라미터를 갖는 메서드의 호출

  1. 메서드 정의

    public static void 메서드이름( 변수형 파라미터1, 변수형 파라미터2) {
       .....
    }
  2. 메서드 호출

    메서드이름(1,2);

메서드를 정의하면서 파라미터가 명시되어 있다면, 해당 메서드를 호출하면서 파라미터를 전달해주어야 한다.

3. 리턴값이 없는 메서드

public class Main03 {

		// 메서드의 리턴값을 변수에 저장
		int a = f1(100);
		System.out.println(a);

		// 리턴값을 출력에 사용
		System.out.println(f2(10));
	}

	public static int f1(int x) {
		int y = x+1;
		return y;
	}
	
	public static int f2(int x) {
		return x*x +1;
	}
}

void
리턴값이 없다는 의미

return

  • void 타입을 사용하지 않을 경우, 반드시 return 값을 반환해야 한다

    • void 의 경우, 컴파일러가 자동으로 메서드 마지막에 return; 을 추가한다.
  • return문이 실행되면, 메소드는 즉시 종료

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

    return VS break

    • return: 해당 함수의 탈출 --> 메소드 즉시 종료
    • break: 반복문(for, while...)의 탈출 --> while문 뒤에 추가적인 실행문이 있을 경우, break문을 사용할 수 있음

1. 값을 반환하는 메서드

public static 리턴형 메서드이름( 변수형 파라미터1, ... , 변수형 파라미터 n) {
    return 리턴값;
}

// getter의 역할은 무엇을 가져오기위함
public String getName() {
   return name;
}

리턴(return)
메서드의 연산결과를 메서드 자신이 호출된 위치에 반환하는 것

2. 리턴을 사용해서 반환값을 외부로 꺼내놔야 하는가?

메서드에 들어있는 정보를 화면에 출력하지말고, '파일에 저장 or 이메일로 전달하라' 고 명령했을 때,
해당 메서드는 파일에 저장 or 이메일로 전달 기능이 없으므로, 다른 메서드를 또 생성해서 처리를 해야한다.

이 경우는 부품으로써 메서드의 가치가 떨어진다.
그렇기 때문에 리턴값으로 해당 값을 외부로 꺼내놓고, 메서드를 사용해서 자유롭게 외부에서 활용한다.

void 와 return

1. 메서드간의 상호 호출

public class Main04 {

	public static void main(String[] args) {
		System.out.println(f2(100));
	}
	
	public static int f1(int x) {
		return x+1;
	}
	
	public static int f2(int x) {
		// 다른 메서드의 호출
		return f1(x) + 1;
	}
}

호출된 메서드(f1(x))가 값을 리턴(x+1)하는 경우, 리턴받은 값을 다른 연산(f1(x) + 1)에 사용 가능

f1(int x)이 x+1 을 return 하고,
f2(int x)가 f1(x) + 1 을 return 하므로, 이것은 x+1 + 1 을 return 하는 것과 같다.

2.

// ① setName("옥강이") 로 함수를 호출하게 되면, private String name = null; 의 name 값이 "옥강이"라는 값을 저장
public void setName(String name) {
	this.name = name;
}

// ② getName() 을 불러오면, 아까 저장해두었던 name 변수인 "옥강이"를 가져온다
public String getName() {
	return name;
}

// ③ Stirng 의 변수 str 에 getName() 함수의 리턴값인 "옥강이" 를 받아서 저장
String str = getName(); 
System.out.println(str);
  1. 만약 ① 을 바로 return 받고 싶다면
public void setName(String name) {
	this.name = name;
    
    return this;
}

3.

private static void moveDice (ind a) {
	Point cur = que.poll();
    
    int nr = dr[a - 1] + cur.r;
    int nr = dc[a - 1] + cur.c;
    
    if (!check(nr, nc))
    	return;
}

void 반환타입을 return 하게 된다면, 반환값 없이 메서드문을 빠져나간다.

4.

public class ReturnVoidTest {
	
    // Stirng 타입
	public String returnMethod(String paramValue) { 		
		String returnValue = paramValue; 		// 2. returnMethod 안의 로컬 변수인 returnValue 에 "call"을 넣어 초기화
		
		return returnValue; 		// 3. 값 "call" 을 반환
	}
	
    // void 타입
	public void voidMethod() { 		
		System.out.println("no return");
	}

	// void 타입
	public static void main(String[] args) {
		ReturnVoidTest rvt = new ReturnVoidTest(); 		// 객체화
		
		System.out.println(rvt.returnMethod("call")); 		// 1. "call"을 넣어, returnMethod 호출
		rvt.voidMethod();		// voidMethod 호출
	}
}

5.

class Method5_2 {
    void gugudan(int dan) {
        if (!(dan >= 2 && dan <= 9)) {
            System.out.println(dan + "단은 없습니다.");
            return;
        }
        System.out.println(dan + "단 시작!");
        for (int i = 1; i < 10; i++) {
            System.out.println(dan + "*" + i + " = " + dan * i);
        }
        System.out.println();
    }

    boolean checkMax(int x, int y) {
        if (x > y) {
            return true;
        } else {
            return false;
            // return 반드시 필요합니다. 만약 없으면 조건문이 false 일 경우, void 가 아닌데 return 문이 없음으로 Error
        }
    }

}

class Method5_2Main {
    public static void main(String[] args) {
        Method5_2 method = new Method5_2();

        method.gugudan(2);
        method.gugudan(5);
        method.gugudan(10);
        method.gugudan(9);

        System.out.println("method.checkMax(10, 8) = " + method.checkMax(10, 8));
        System.out.println("method.checkMax(5, 9) = " + method.checkMax(5, 9));
    }
}

참고: Java 메소드 :: 리턴값이 있는 메소드와 리턴값이 없는 메소드 (void와 return)
참고: 자바 초보자가 void에 대해서 질문합니다.
참고: 자바 void return 메소드 뜻부터 호출까지
참고: void와 return

profile
개발자로 거듭나기!

0개의 댓글