인프런 커뮤니티 질문&답변

liltjay님의 프로필 이미지
liltjay

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

void의 정확한 의미를 모르겠어요

해결된 질문

작성

·

3.2K

·

수정됨

1

안녕하세요 챕터 6 부분을 공부하고 있는데 void를 쓰는 경우와 안쓰는 경우의 차이가 잘 와닫지 않습니다. 리턴값이 없으면 void를 쓰고, 리턴값이 있으면 void를 안쓴다고 알고 있는데 리턴값부터 이해가 잘 가지 않네요!

예를 들어서

// 호텔 주소 public static String getAdress() {
return "서울시 어딘가";
}

셋째 줄에 sout "서울시 어딘가" 를 쓰는 것은 무엇이 다른건지요?

감사합니다 :)

답변 1

3

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
메소드는 처음 접하면 누구나 헷갈리게 마련입니다 😆 저도 그랬어요.
메소드의 생김새는 대략 이렇습니다.

반환형 메소드명(전달값) {
    ... 어떤 동작 ...
    return 반환값;
}

1) 반환값이 있는 메소드
메소드 내부에서 어떤 동작을 수행하고 나서 뭔가를 반환한다면, 반환형 위치에는 반환하려는 자료형 (int, float, String 등) 을 적어주면 됩니다. 그리고 return 뒤에는 반환하려는 값을 넣어주면 되구요.

2) 반환값이 없는 메소드
메소드 내부에서 어떤 동작을 수행하고 나서 아무것도 반환하지 않는다면, 반환형 위치에는 '비어 있다' 는 의미의 void 를 적어주면 됩니다. 그리고 이 경우 return 구문은 적지 않아도 되죠.

호텔에 전화를 걸어서 "주소가 어떻게 되나요?" 라고 물어본다면 우리는 당연히 직원으로부터 주소 정보를 안내받기를 기대할 것입니다. 이게 메소드에서는 반환값이며

String getAddress() {
    return "서울시 어딘가";
}

라는 코드 중 return 에 의해 "서울시 어딘가" 라는 주소를 알 수 있게 됩니다. 즉 메소드를 호출한 곳에서 주소값을 반환받아서 사용할 수 있게 되는 거죠.

만약 호텔 전화번호를 잘못 눌러서 없는 전화번호라면 "잘못된 전화번호입니다. 확인 후 다시 걸어주세요" 라고 한 뒤 전화는 자동으로 끊어질 것입니다. 이때는 수화기 너머로 어떤 정보를 기대할 수 있는 상황은 아니죠.

void wrongNumber() {
    System.out.println("잘못된 전화번호입니다. 확인 후 다시 걸어주세요.");
}

이 경우에는 이렇게 일방적인 통보식의 동작만 하고 별다른 반환값은 없습니다. 그래서 return 도 필요 없으며 더불어 반환형에는 void 로만 적어주면 되는 것이죠.

반환값이 있는 메소드는 main( ) 영역에서 이 메소드를 호출하여 특정 동작 수행 및 반환값을 받아서 main( ) 영역에서 계속 사용할 수 있도록 합니다. 그래서 아래와 같이 getAddress() 메소드로부터 받은 주소 정보를 address 변수에 담고 있다가 System.out.println( ) 문에서 사용할 수 있는 것입니다.

String address = getAddress();
System.out.println("호텔 주소 : " + address);

마치 햄버거 가게에서 햄버거를 주문하면 직원이 햄버거를 만들어서 주는 것과 같습니다. 햄버거를 주문(메소드 호출)하게 되면 주방(메소드 내부)에서 햄버거를 만들고(메소드 동작 수행) 만들어진 햄버거를 받게 되는 것(반환값)이죠.

학습에 도움되시길 바라겠습니다 😊
감사합니다.

liltjay님의 프로필 이미지
liltjay

작성한 질문수

질문하기