2016년 6월 24일 금요일

Java Programming [5강] Scanner 클래스의 메서드 이용하기_ (1) 인스턴스 객체 사용

안녕하세요, 저번 시간까지는 문법에 주력하여 공부했다면 오늘 부터는 본격적으로 프로그램을 작성해 보도록 하겠습니다.

그에 앞서, 오늘은 인스턴스 객체를 선언하여 기존 자바 언어에서 제공되는 클래스의 메서드를 사용해보겠습니다.

인스턴스 객체를 설명하기전, 자바에서 메서드를 사용하는 방법에는 두 가지가 있다는 것을 먼저 설명드리겠습니다.

자바 파일(소스파일)은 명령어를 모아놓은 것이라고 했었죠. 그 명령어가 바로 메서드를 의미합니다. 자바에서 메서드를 호출하기 위해서는 메서드가 속한 클래스를 메서드 앞에 적어주어야 합니다.
클래스.메서드();
이런 형식으로 말이죠.
그런데 위에서 설명드린 방식은 JOptionPane방식으로 자바에서 제공하는 메서드를 그 메서드가 속한 클래스까지 함께 적어주어 메서드를 호출하는 방식입니다.

인스턴스 객체 방식은 내가 사용하고 싶은 메서드가 속한 클래스에 대해서 나름의 이름으로 객체를 선언해 주고 그 객체를 통해 메서드를 호출하는 방식입니다. 설명이 더 어려우니 실제 코드를 보면서 설명드리겠습니다.

10번째 라인에서 제가 사용하고 싶은 메서드는 키보드로부터 이름을 입력받는 함수인데 그 함수는 Scanner라는 클래스에 있으므로 Scanner클래스의 객체를 만들어 줍니다. 객체 이름은 제 마음대로 sc라고 지었습니다. 이로써 Scanner라는 자바에서 제공되는 클래스는 제 소스에서는 sc라는 객체로 사용할 수 있습니다. 즉, 12번째 라인에서 sc.nextLine();으로 Scanner 클래스안의 메서드 nextLine()을 호출하는 것을 알 수 있습니다.

입력받은 문자열은 13행에서 확인할 수 있습니다. 

Scanner 클래스 안에는 nextLine()말고도 nextInt(), nextDouble(), next()등의 함수가 존재합니다. 각각, 정수, 실수, 한 단어(엔터나 스페이스는 구분으로 인식)를 입력받는 함수입니다.
그런데, 여기서 주의해야 할 것이 있습니다. 여러개의 데이터를 입력받는 프로그램을 작성할 때는 "엔터"키에 대한 처리가 필요합니다.
다음의 예를 통해 살펴보시죠.

데이터를 입력받는 순서가 책 가격->책 이름입니다. 실행결과 책 가격을 입력하고 엔터키를 치면 책 이름을 입력받기 위한 name에 엔터가 입력되고 다음 책가격과 책이름을 출력하는 코드가 실행됩니다. 이런 문제는 다음과 같이 엔터키를 처리함으로써 해결할 수 있습니다.


29행의 sc.nextLine();을 호출하여 사용자가 책 가격을 입력하고 엔터키를 치면 책 가격은 nextInt();에 의해 price에 저장되고 엔터키는 nextLine();에 의해 가져가지지만 저장은 되지 않음으로써 엔터키가 처리됩니다. 따라서 32행의 책 이름을 저장하는 코드도 정상적으로 실행됩니다.
C언어에서 버퍼를 비우기 위해 fflush();를 호출하는 것과 유사합니다.

그럼 다음시간에는 인스턴스 객체를 사용하여 메서드를 호출하는 방식으로 성적을 입력받아 총점과 평균을 출력하는 프로그램을 만들어 보겠습니다. 그 다음 시간에는 똑같은 기능을 JOptionPane방식으로 구현해보도록 하겠습니다.


댓글 없음:

댓글 쓰기