3.5 return문
메서드가 정상적으로 종료되는경우
- 메서드의 블록 {}의 끝에 도달했을 때- 메서드의 블록 {}을 수행 도중 return문을 만났을 떄
return문
- 현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아간다.- 반환값이 있는 경우 리턴타입과 반환하고자 하는 타입이 일치해야한다.
리턴타입 메서드이름 (타입 변수명, 타입 변수명)
{
//메서드 호출시 수행될 코드
}
int add(int a, int b) //반환값이 있는 경우
{
int result = a + b;
return result;
}
void power() //반환값이 없는 경우
{
power = !power;
}
return문 주의사항
- 반환값이 있는 메서드는 모든 경우에 return문이 있어야한다.- return문의 개수는 최소화하는 것이 좋다.
class Television
{
int channel = 7;
void channelUp() //인스턴스 메서드
{
channel++;
System.out.println("channel Up");
return;
// 리턴형이 보이드인 경우는 return 생략 가능
}
int channelDown()
{
channel--;
System.out.println("channel Down");
return channel;
//return 하게되면 호출할 곳으로 돌아간다!
}
}
class TvMain
{
public static void main(String[] args)
{
Television t1 = new Television();
System.out.println(t1.channel);
t1.channelUp(); //메서드 호출(동작)
System.out.println(t1.channel);
System.out.println(t1.channelDown());
int result = t1.channelDown(); // 연산수행식으로도 사용가능
System.out.println(result);
for (int i=10; i > t1.channelDown();i++)
{
System.out.println(i);
}
//이렇게도 사용가능
}
}
// 여기서 문제
// 인스턴스변수는 new로 생성후에 사용해야 한다고 했는데
// 이 경우는 t1.channel를 new로 생성하지 않고 사용함
// why?
/*
class Television
{
int channel = 1;
void channelUp() //인스턴스 메서드
{
Television t = new Television();
t.channel++;
}
}
이렇게 해야 할꺼같은데 왜?
만약 위코드 처럼하면 객체안에 다시 객체를 호출한꼴...
실세계로 보면 티비를 채널을 올리기위해 티비속의 티비의 채널을 올린꼴
허나 이렇게 사용 가능 하다는것을 보여준것 뿐임...
*/