• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

표준입출력에서 질문 있습니다.

20.05.04 17:15 작성 조회수 133

0

강사님 안녕하세요. 좋은강의 잘 듣고 있습니다.

표준 입출력 부분에서 질문이 있어 질문 드리려고 하는데요.

int a1 = System.in.read();

System.out.println("a1 :" + a1);

int a2 = System.in.read();

System.out.println("a2:"+a2);

이 코드를 실행시키고 콘솔창에 ab를 입력하고 나서 엔터키를 눌러야 a1,a2,의 값이 정상적으로 표시가 됬는데요.

1) int a1 = System.in.read(); 이부분이 실행되고 나서

2)System.out.println("a1 :" + a1); 이 부분이 실행되고 

3)int a2 = System.in.read();

4)System.out.println("a2:"+a2);

이러한 순서로 진행 될 줄 알았는데 System.out.println();을 거치지 않고 

값을 모두 입력 받은 후에 출력문이 실행이 되는 것을 알게 되었습니다. 

이 부분에 관해 왜 순서대로 진행되지 않고 

입력을 모두 진행받고 난 후 출력문이 실행이 되는지 알고싶습니다.

좋은 강의 너무너무 감사합니다.

답변 1

답변을 작성해보세요.

1

사용자가 키보드로 입력된 내용은 모두 메모리에 저장되게 됩니다. 그리고 System.in.read()를 쓰시면 메모리에 저장된 문자 중 처음 한글자를 추출해 반환하게 됩니다.

프로그램 실행시 아직 입력한 내용이 없기 때문에

int a1 = System.in.read(); 를 쓰시면 일시 정지하게 됩니다. 그후 ab를 입력하게 되면 메모리에 ab 그리고 엔터때문에 2개의 글자가 추가로 입력됩니다. 이제 메모리에 입력한 문장이 저장되었기 때문에 앞에 글자 하나를 추출해 a1에 담게 됩니다. 그럼 메모리에는 b와 엔터때문에 추가된 2글자 .. 이렇게 총 3글자가 남게 됩니다. 그후 System.out.println("a1 :" + a1);  가 수행되 출력이 됩니다. 그 다음 System.in.read();가 수행되는데 메모리에 글자가 남아있으므로 새롭게 입력을 받는게 아니라 메모리에 저장된 글자를 추출해서 a2에 담게 됩니다. 그다음 System.out.println("a2:"+a2); 가 수행되게 됩니다.

코드가 모두 입력이 완료되고 출력문이 수행된게 아니라 순서대로 수행된게 맞습니다. 다만 System.in.read()은 사용자가 입력한 내용이 메모리에 저장되어 있으면 거기서 글자를 가져와 반환하고 없다면 입력할 때 까지 대기하고 있다가 입력을 하면 그때 하나를 추출해 반환하는 메서드입니다.