안녕하세요~ 

이번 시간에는 리턴타입에 따라 달라지는 메소드형태에 대해 알아보려고 하는데요.

먼저 코드부터 볼까요?

리턴 타입에 따라 리턴이 생기고 없어지는 메소드

class Math {
	int result = 0;
	
	void plus1(int num) {
		this.result = num + 10;
	}	
	int plus2(int num) {
		this.result = num + 10;
		return result;
	}
	int plus3(int num) {
		int result = 0;
		result = num + 10;
		return result;
	}
}

public class Main {
	public static void main(String[] args) {
		Math m = new Math();
		
		m.plus1(10);
		m.plus2(10);
		m.plus3(10);
	}
}

 리턴이 없는 plus1 메소드, 리턴이 있는 plus2와 plus3 메소드를 사용하여 입력한 값에 10을 더한 값을 출력하고자 합니다.

 분명히 실행을 했는데 콘솔창에는 아무것도 안 나오네요.. 같이 해결해볼까요?!

오늘의 핵심 키워드

1.  리턴타입이 void일 때는 return이 필요하지 않다. 따라서 단순 동작만 필요할 때 사용한다.

2. 리턴타입이 void가 아닐 때는 무조건 return이 필요하다.  (int면 정수, String이면 문자 등)

3. 콘솔창에 출력할 때는 print메소드 안에 작성해야한다. return값이 있어도 print메소드 안에 넣지 않으면 콘솔창에서 볼 수 없다.


콘솔창에 출력하기 위해 print 메소드를 사용하고 그 안에서 plus 메소드들을 호출하게 되면 다음과 같은 문제가 발생합니다.

 plus1 메소드가 들어간 println 메소드에서만 오류가 발생했는데요.

차이점을 잘 생각해보면 유일하게 리턴타입이 void이기 때문에 return값이 없어서 print메소드에서 출력할 값이 없어서 발생한 오류입니다.

리턴값은 없지만 필드에 저장했기 때문에 필드 자체를 출력하면 똑같은 동작처럼 사용할 수 있습니다.

[1] plus1 메소드가 실행되어 m 객체에 있는 필드 result에 매개변수로 들어간 10에 10을 더한 값 20이 저장되어 그대로 출력된 모습입니다.

[2] plus2 메소드는 리턴타입이 int이므로 정수를 무조건 return해주어야 하고 필드 result에 20을 저장하여 리턴한 값 20이 출력된 모습입니다. 

[3] plus3 메소드는 필드 result가 아닌 메소드 안에서 선언한 지역변수 result에 20을 저장하고 리턴한 값 20을 출력한 모습입니다.



최종 완성본

class Math {
	int result = 0;
	
	void plus1(int num) {
		this.result = num + 10;
	}	
	int plus2(int num) {
		this.result = num + 10;
		return result;
	}
	int plus3(int num) {
		int result = 0;
		result = num + 10;
		return result;
	}
}

public class Main {
	public static void main(String[] args) {
		Math m = new Math();
		
		m.plus1(10);
		System.out.println("plus1 결과 : " + m.result);
		System.out.println("plus2 결과 : " + m.plus2(10));
		System.out.println("plus3 결과 : " + m.plus3(10));		
	}
}


꼭 봐야되는 마무리 꿀팁!

  • 메소드 실행과 동시에 나온 값을 사용해야될 때가 아니면 void 타입으로 선언하기!
  • 콘솔창에 출력하고 싶은 내용은 print 메소드 안에 작성하기!

▲영상으로 한번 더 복습하세요 :)