LUMI_dev

2025-04-15 DailyReport 본문

취준

2025-04-15 DailyReport

luminous_dev 2025. 4. 16. 08:16

2025-04-15 DailyReport

오늘 날짜 : 2025-04-15

진도 정리 :
오늘은 스테이지 1 3회독을 마치고 스테이지 2 스탭 1을 공부하고 있습니다.

오늘 공부한 토픽: Scanner 클래스의 nextLine() 사용

오늘 스테이지 1을 복기하던 도중, clubName 변수를 scanner.nextLine();으로 받는 코드에서 엔터를 치지 않았음에도 그냥 넘어가지는 문제가 발생하였습니다.

문제 발생 코드:

private void register(){  
    System.out.println("Insert name :");  
    String clubName = scanner.nextLine();  
    //해당 부분에서 enter을 치지 않았음에도 그냥 넘어가졌습니다.
	//(코드)
}

문제 분석:
해당 문제는 nextInt() 메서드를 사용한 후 nextLine() 메서드를 호출할 때,
nextInt() 메서드를 사용 후 남은 엔터/줄바꿈 문자(\n) 가 원인이었습니다.

nextInt()를 통해 사용자가 정수를 입력하면 뒤에 줄바꿈 문자가 남습니다. 그러나 nextInt()는 사용자가 엔터를 입력하면 '버퍼'라는 입력을 임시로 저장하는 공간에 줄바꿈 문자(\n)를 그대로 두고 넘어갑니다.

그후 nextInt() 메소드를 사용하고 난 후 nextLine()을 사용하면, nextLine()이 '버퍼'에 남아있는 엔터를 읽어버려서 빈 문자열 ("")을 받게 됩니다.

이 문제를 해결하려면 nextInt() 사용 후 nextLine()을 한 번 더 호출해주어야 합니다.

수정 코드:

private int selectMenu(){  
    System.out.println("input number : ");  
    int inputNum = 0;  
    inputNum = scanner.nextInt();  
  
    scanner.nextLine(); //해당 코드를 수정 전 누락하였습니다.   
  
    if(inputNum>=0 && inputNum <= 3){  
        return inputNum;  
    }  
    return -1;  
}

느낀점:
이 문제를 처음 경험했을 때, nextLine()이 동작하지 않는 이유를 정확하게 파악하기 어려웠습니다.

하지만 nextInt()가 엔터 문자를 남긴다는 점을 알게 되었으며, 남긴 엔터 문자를 처리하는 방법을 알게 되어 큰 도움이 되었습니다.

앞으로 각 메소드가 어떻게 동작하는지 뿐만 아니라 그로 인해 발생할 수 있는 문제를 좀 더 깊이 생각하고 코드를 작성해야겠다는 생각이 들었습니다.