주인장의 프로그래밍 개발 공부방

[자바 프로그래밍 기초] 2. 입력 본문

Java/자바 프로그래밍 기초

[자바 프로그래밍 기초] 2. 입력

거신 2019. 6. 5. 09:59

지난 시간에 우리는 이클립스를 사용하면서

콘솔창에 다양한 값들을 어떻게 출력하는지에 대해서 알아봤다.

그렇다면 오늘은 반대로

콘솔창에서 입력하는 방법을 알아보도록 하자.

 

1. 입력이 필요한 목적

 

지난 번에 알아본 System.out.println();콘솔창에 결과를 출력해주는 녀석이었다.

그런데 반대로 사용자가 콘솔창에서 값을 입력해 프로그램을 동작할 수 있게 만들어주는 녀석도 존재한다.

바로 Scanner라는 녀석이다.

그런데 왜 굳이 콘솔창에 입력해서 프로그램을 동작시켜야하는지

이해가 잘 안 될 수도 있다고 생각한다.

그냥 내가 원하는 값을 코드를 작성하면서 변수에 바로 집어넣어 버리면

프로그램이 바로바로 실행이 될텐데 뭐하러 그렇게 귀찮은 일을 하는지 말이다.

 

하지만 내가 만약 개발자가 아니라 프로그램을 사용하는 사용자라면 어떨까?

우리가 윈도우에서 계산기를 열어서 내가 궁금한 수식을 계산하려고 했는데

계산기를 켜자마자 이미 정해진 값으로 정해진 계산만 한다고 하면

이 무슨 개 같은 경우가 다 있단 말인가?

이게 프로그램이냐!!!

라고 당연하게 말할 것이다.

 

상식적으로 우리가 계산기 프로그램을 사용한다면 내가 원하는 값

내가 원하는 연산자를 선택할 수 있어야 진정한 계산기가 아니겠는가?

프로그램을 사용하는데 자유도가 훨씬 높아진다는 말이다.

이 것과 동일한 것이 바로 입력이 필요한 목적이다.

프로그램을 하나 만들어두고 내가 원하는 값을 소스 코드 상에서가 아닌

프로그램이 실행된 콘솔창에서 마음대로 입력하고 그 결과를 볼 수 있다면 얼마나 좋겠는가?

그래서 자바에서는 사용자가 입력할 수 있는 기능을 넣어두었다.

오늘은 입력에 대해서 한 번 알아보도록 하자.

 

2. 입력 클래스 Scanner 호출 방법

 

우리가 앞으로 너무너무너무너무 자주 불러와야할 녀석이다.

바로 Scanner 클래스.

이 녀석이 하는 일은 프로그램을 작성하는 우리들이 콘솔창에서

내가 원하는 값을 입력할 수 있게 도와주는 녀석이다.

일단 자세하게 알아보기 전에 형태부터 알아보도록 하자.

 

예시)

Scanner scanner = new Sanner(System.in);

scanner.close();

 

이렇게 두 줄이 하나의 세트라고 생각하면 된다.

우리가 이전에 참조형 변수를 알아볼 적에 이미 한 번 만난 적이 있었다.

(혹시나 참조형 변수 선언에 대해서 잘 모르겠다면 참조형 변수 편을 한 번 더 읽어보도록 하자.)

그렇기 때문에 대문자 S로 된 Scanner는 타입이 될 것이고

뒤에 소문자 s로 된 scanner는 참조 변수명이 되는 것이다.

 

필자는 변수명을 scanner와 같이 길게 쓰는 것 보다

sc로 줄여서 쓰는 걸 좋아하기 때문에 앞으론 변수명을 sc라고 적을 것이다.

 

다시 본론으로 돌아와 앞서 예시의 2줄이 한 세트라고 했는데

우리가 코드를 작성할 때 Scanner를 쓴다면 반드시 close()도 함께 적어줘야 한다.

예를 들면

만약 Scanner sc = new Scanner(System.in);이라고 선언을 했다면

그 다음 줄에 반드시 sc.close();라고 적어주고

이 두 줄 사이를 띄워서 그 공간에 다른 코드들을 작성해주는 것이다.

 

예시)

Scanner sc = new Scanner(System.in);

(원하는 코드)

sc.close();

 

이러한 형태로 작성하라는 것이다.

이 순서대로 작성하는 것에는 당연히 이유가 존재한다.

 

3. close();

 

필자가 Scanner를 쓰려고 부르면 무조건 다음 줄에 close()를 쓰라고 했었다.

일단 그 이유보다는 close()의 역할이 무엇인지부터 알아보자.

close()는 말그대로 닫는다는 의미를 지니고 있고 실제로 닫는 역할을 하는 녀석이다.

그런데 뭘 닫는다는 것일까?

 

우리가 Scanner를 사용하기 위해 호출을 하게 되면 스캐너의 문이 열리게 된다.

그 열린 문으로 사용자가 필요한 기능들을 하나씩 꺼내서 필요한 곳에 쓰는 것인데

우리가 스캐너를 다 사용하면 썼던 것들을 제자리에 두고

문을 닫아야할 것이다.

하지만 문을 닫아놓지 않으면 쓸데없이 자원들이 계속해서 세어나갈 것이고

낭비가 발생하게 되는 것이다.

그러한 쓸데없는 낭비를 막기 위해서 다 사용했다면 당연하게 문을 닫아주는 것이다.

이는 필수이기 때문에 이런 순서로 작성하는 버릇을 들여놓는게 가장 좋다.

나중에 진짜 close()를 안 쓰는 실수를 범할 수 있기 때문이다.

 

4. 마무리

 

여기까지 우리가 콘솔창에서 내가 원하는 값을 입력하기 위해

사용하는 Scanner라는 녀석에 대해서 알아봤다.

단순히 코드 안에서 고정된 값을 이용하는 것이 아니라

내가 원하는 값을 넣어서 프로그램을 동작시키는 것이기 때문에

프로그램을 훨씬 더 자유롭게 사용할 수 있게 만들어주는 녀석이다.

Scanner를 사용하기 위해선 먼저 Scanner를 불러줘야 하는데

Scanner sc = new Scanner(System.in);

와 같이 참조형 변수를 선언하듯이 부르면 되고

그 다음줄에 반드시

sc.close();를 적어서 사용이 다 끝났을 때 쓸데없는 자원낭비를 막기 위해

문을 닫아주는 코드를 작성해줘야 한다.

그리고 그 사이에 자신이 원하는 코드를 작성하면 된다.

Comments