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

imminpie님의 프로필 이미지
imminpie

작성한 질문수

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

Continue

_11_Continue 에서 증감연산자 질문있습니다!

작성

·

221

0

package chap_04;

public class _11_Continue {
    public static void main(String[] args) {

        int max = 20;       // 최대 음료 판매 수량
        int sold = 0;       // 현재 음료 판매 수량
        int noShow = 17;    //  대기번호 17번 손님이 노쇼

        for(int i = 0; i <= 50; i++) {
            System.out.println(i + "번 손님, 주문하신 음료 나왔습니다.");
            sold++;
            System.out.println(sold);   // ++sold, sold++ 값이 같게 출력됨???

            if(sold == max) {
                System.out.println("금일 재료가 모두 소진되었습니다.");
                break;
            }
        }
        System.out.println("금일 영업을 종료합니다.");
    }
}

안녕하세요!

증감 연산자 관련하여 질문 드립니다.

  1. 강의에서 sold++ 후위 연산자를 사용하셨는데요.

    "System.out.println(i + "번 손님, 주문하신 음료 나왔습니다.");" 다음에

    현재 음료 판매 수량을 증가시키기 위해 전위 연산자 ++sold 를 사용해야 된다고 생각했었는데요.

    강사님께서는 왜 전위 연산자인를 사용하지 않고 후위 연산자를 사용하셨는지 이유가 궁금합니다.

  2. "System.out.println(i + "번 손님, 주문하신 음료 나왔습니다.");" 다음에

    ++sold 를 입력해도 결과 값이 같게 나오던데,

    왜 전위 연산자와 후위 연산자 결과 값이 동일하게 출력되는지 이유를 모르겠습니다. 😢

     

 

 

답변 1

0

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

안녕하세요?

먼저 전위 연산자와 후위 연산자를 한 번 비교하고 넘어가겠습니다.
전위 연산자는 연산을 먼저 합니다. 그래서 다음과 같이 문장을 작성하게 되면 0 이었던 i 의 값을 증가시켜서 1 로 만든 뒤에 출력하므로 출력결과는 1 이 됩니다.

int i = 0;
System.out.println(++i); // 1

후위 연산자는 연산을 나중에 합니다. 그래서 다음과 같이 문장을 작성하게 되면 0 이었던 i 의 값을 출력하고 나서 1 로 만들게 되므로 출력결과는 0 이 됩니다.

int i = 0;
System.out.println(i++); // 0

그런데 다음과 같이 문장을 작성하면 어떻게 될까요?

int i = 0;
++i;
System.out.println(i); // 1

두 번째 문장에서 연산을 먼저 수행하므로 i 는 1 이 됩니다. 그런 다음에 세 번째 문장에서 i 를 출력하므로 출력결과는 1 이 되겠네요.

후위 연산자는 어떨까요?

int i = 0;
i++;
System.out.println(i); // 1

두 번째 문장에서 연산을 나중에 수행하는데 세 번째 문장을 실행하는 시점에서는 i 가 이미 증가되어 있는 상태죠. 그래서 동일하게 1 이 출력되는 것입니다.

전위 연산이건 후위 연산이건 다음 문장으로 넘어가는 시점에서는 둘 다 1씩 증가되어 있는 것은 동일합니다. 그래서 예제에서처럼 sold++; 를 해도, ++sold; 를 해도 모두 동일한 결과가 나오게 되는 것이구요. 만약 sold 를 더하는 연산을 System.out.println() 내에 직접 넣고자 한다면 전위 연산을 해야 합니다.

int i = 0;
int sold = 0;
System.out.println(i + "번 손님, 주문하신 음료 나왔습니다.");
// sold++; // 문장 삭제
System.out.println(++sold); // 판매량 i 를 1 증가시킨 후 출력 (출력 결과 : 1)

이렇게 하지 않고 후위 연산을 하게 된다면 원치 않는 결과가 나오게 되지요.

int i = 0;
int sold = 0;
System.out.println(i + "번 손님, 주문하신 음료 나왔습니다.");
// sold++; // 문장 삭제
System.out.println(sold++); // 판매량 i 를 출력한 뒤 1 증가 (출력 결과 : 0)

전위, 후위 연산은 처음 배우면 많이 헷갈리게 마련입니다. 설명을 천천히 읽어보시고 여전히 모호한 부분이 있다면 다시 질문 남겨주시면 도움 드리겠습니다 😊
감사합니다.

imminpie님의 프로필 이미지
imminpie

작성한 질문수

질문하기