[Java 기초] 리턴이 있는 메소드와 없는 메소드의 차이점
안녕하세요~
이번 시간에는 리턴타입에 따라 달라지는 메소드형태에 대해 알아보려고 하는데요.
먼저 코드부터 볼까요?
리턴 타입에 따라 리턴이 생기고 없어지는 메소드
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 메소드 안에 작성하기!
▲영상으로 한번 더 복습하세요 :)