inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Continue

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

270

imminpie

작성한 질문수 2

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 를 입력해도 결과 값이 같게 나오던데,

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

     

 

 

java 객체지향

답변 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)

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

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

146

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

119

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

72

1

사고력 키우는 법이 어떤게 있나요?

0

94

2

getter setter

0

103

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

80

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

76

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

115

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

117

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

187

3

JDK 버전 문의

0

130

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

122

2

Iterator 문의

0

105

1

코드 순서 문의

0

143

1

클래스 메소드

0

150

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

120

2

HashMap

0

80

2