●return문
return문은 현재 실행중인 메서드를 종료하고 호출 한 메서드로 되돌아 간다. 또한 반환값의 유무에 상관없이 모든 메서드에는 하나의 return문을 갖는다. 그런데 반환타입이 'void'인 경우 return문이 없어도 아무런 컴파일 오류가 없었다. 그 이유는 void가 반환타입으로 사용될 경우 컴파일러가 자동으로 메서드의 마지막에 'return;'을 추가해주었기 때문이다.
void printGugudan(int dan) {
for(int i=1li <= 9; i++) {
System.out.printf(%d * %d = %d%n", dan, i, dan * i);
}
// return; // 반환타입이 void이므로 생략가능, 컴파일러가 자동추가
}
하지만 반환타입이 void가 아닐 경우 무조건 return을 가져야 한다. 만약 return문이 없으면 컴파일 (error: missing return statement)가 발생한다.
int multiply(int x, int y) {
int result = x * y;
return result; //반환타입이 void가 아니므로 생략불가
}
또한 return문을 조건식의 결과가 참이 때만 실행된다.
int max(int a, int b) {
if(a > b)
return a;
}
max의 매개변수 a,b가 있을 때 a가 b보다 크다면 if의 조건식은 참이지만, 그 반대라면 거짓이 된다. 그런데 a가 b보다 크다는 보장이 없다. a가 b보다 크면 참인 결과가 반환되지만 a가 b보다 작으면 거짓인 결과가 반환된다. 결과값이 변수에 따라 달라지기 때문에 위와 같은 코드를 실행하면 컴파일 오류가 발생한다.
int max(int a, int b) {
if(a > b)
return a;
else
return b;
}
그래서 조건문이 실행되기 위해선 다음과 같이 if문의 else블럭에 return문을 추가해서, 항상 결과값이 반환되도록 해야한다.
●반환값
int add(int x, int y) {
int result = x + y;
return result;
}
↓
int add(int x, int y) {
return x + y;
}
return문의 반환값으로 주로 변수(result)가 오긴 하지만 항상 그런건 아니다. 아래 코드와 같이 수식을 통해 반환값을 적용할 수 있다. 이 수식을 계산한 결과가 반환값이 된다.
int diff(int x, int y) {
int result = abs(x-y);
return result;
}
↓
int diff(int x, int y) {
return abs(x-y);
}
메서드 abs의 반환타입이 메서드 diff의 반환타입과 일치하기 때문에 아래와 같이 표현할 수 있다. 이와 같이 반환값으로 메서드가 오는 것도 가능하다.
int abs(int x) {
if(x>=0) {
return x;
} else {
return -x;
}
}
↓
int abs(int x) {
return x>=0 ? x : -x;
}
간단한 메서드의 경우 위의 코드와 같이 if문 대신 조건연산자를 사용하는 것도 가능하다.
출처: 자바의 정석(저자: 남궁성, 출판사:도우출판
'java > 객체지향' 카테고리의 다른 글
[객체지향] 메서드 간의 호출과 참조 (0) | 2021.07.09 |
---|---|
[객체지향] static 메서드와 인스턴스 메서드 (0) | 2021.07.09 |
[객체지향] 메서드 (0) | 2021.07.08 |
[객체지향] 변수 (0) | 2021.07.06 |
[객체지향] 객체 (0) | 2021.07.05 |