inflearn

[인프런] 김영한의 자바 입문 강의 섹션7. 훈련 (240101)

hail2y 2024. 1. 1. 19:28

강의 들으면서 더 많은 문제들 풀어보고 싶었는데 딱 훈련이라고 적힌 제목 보고 기뻤다. 바로 본론 시작!

 

1/1 섹션7 훈련 필기

바로 문제 풀기에 돌입할 줄 알았는데 사용자 입력을 받는 Scanner 부분도 새롭게 나갔다. 출력 때 썼던 System.out처럼 System.in을 통해 사용자 입력을 받게 할 순 있지만 이게 복잡하고 어려워서 Scanner 클래스를 사용한다고 했다.

import org.w3c.dom.ls.LSOutput;

import java.util.Scanner;

public class Scanner1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("문자열을 입력하세요: "); // println으로 하면 \n 처리됨.
        String str = scanner.nextLine(); // 입력을 String으로 가져온다.
        System.out.println("입력한 문자열: " + str);

        System.out.print("정수를 입력하세요: ");
        int intValue = scanner.nextInt();
        System.out.println("입력한 정수: " + intValue);

        System.out.print("실수를 입력하세요: ");
        double doubleValue = scanner.nextDouble();
        System.out.println("입력한 실수: " + doubleValue);
    }
}

 

지금은 문제들 풀면서 금세 익숙해진 느낌이 들지만 또 헷갈릴까봐 코드 적어둔다.

Scanner 클래스 이용할 땐 java.util의 Scanner import 해 오기!

 

  • 사용자 입력 받을 때 다른 타입의 내용을 입력하면 exception 터지면서 밖으로 나가고 그대로 종료된다.

치트키 등장!

  • ctrl space 자동 완성해준다 ex) scanner 입력할 때처럼
  • shift f6으로 변수명 한번에 바꾼다. 

(문자열 대치해 주는 방법에 ctrl r도 있지만 일일이 enter 쳐야 하고 패키지명, 타입명 가릴 거 없이 대치 시도한다. )

 

  • nextLine()은 \n까지 읽어온다.
    그러나 nextInt()는 딱 숫자만 가져온다. 그래서 사용자 입력 시 5\n을 하게 되면 \n이 남아있게 돼 출력이 달라진다.
    그럴 땐 scanner.nextLine()으로 남아있는 \n을 한번 읽고 버려주면 된다.

중요한 내용은 아니고 가끔 쓰고 이런 출력 결과가 만들어지면 저렇게 코드를 쓴다고 기억한다. (라고 한다.. 난 또 중요한 내용 같아서 유심히 보고 있었는데...)

 

+ 번외

while 안에 switch문을 쓰고 평소대로 case 안쪽에 break를 걸면 while문에서 여전히 빠져나가지 못 하고 루프를 돈다.

(if문 안에서 쓰면 빠져나가지만!)

마이크로소프트 C# 가이드 설명

C#이긴 한데 break의 목적, 기능은 같을 테니까 이걸 참고해 보면, break는 반복문과 switch문을 종료한다고 나와 있다.  그렇기 때문에 break는 switch문의 탈출에 사용될 뿐 다시 while문이 실행되어 switch문이 재실행된다. (인프런 다른 질문의 답변 참고했다.)

 

  • 그래서 while문을 빠져 나가려면 return을 써 주면 된다. return은 메서드의 종료에 사용되며, return 호출 시 main함수가 종료되어 의도하려는 것처럼 프로그램이 종료된다.  

 

return만 간단히 단독으로 사용해 줘도 되고, break문을 사용하고 싶다고 하면 while 문 바깥에 종료 여부를 확인하는 변수를 두어 종료 선택 시 switch문의 바깥에서 종료되었는지를 확인해 while문을 빠져나가면 된다. 불리언 변수를 통해-

boolean 선언 시 boolean isTermanated = false; flag로서 기능하니 이름은 Is~ 이런 식이 좋겠지

이게 T/F로만 나오니까 더 간략하게 while 조건식에다 표현해 줄 수 있다 생각했는데 이건 가독성 면에서 괜찮을까..? c에서 비슷한 코드 많이 보긴 했는데

 

아까 코드 입력하면서 나도 모르게 불리언 타입을 bool로 입력했다. 타입이 틀렸다 하길래 설마 c에서 bool이었나 확인하니까 맞대ㅋㅋㅋ 너무 자연스럽게 나와서 좀 놀랐다- 자바도 이 정도까지 끌어올려야지

 

새로운 자바 switch문도 있는데 case (값) -> 내용 길어지면 중괄호로 연결한다. 

 

--끝--