키보드 입력받기 소스

C언어와 자바 언어를 비교를 하다 보면 늘 그런 말을 합니다.

자바는 C를 많이 닮아서 C를 알면 자바는 쉽게 할수있다.
자바가 C보다 단순하기 때문에 좋다.

이런 말들을 하거나 혹은 듣거나 하죠..
그러나 뭐가 쉽다 어렵다 하기 전에 둘 다 어렵습니다. 열심히 해야 쉬워 지는거겠죠.
그런데 제가 갑자기 왜 이런 말을 하느냐?..
결론적으론 그리 큰 이유가 없습니다.
이유가 있다면 본인이 느끼는 것이고 여긴 제 블로그이기 때문이죠~ ㅎㅎ
그럼 잡담은 이만 줄이고 시작을 해보겠습니다.

오늘은 자바에서 입력값을 받아서 출력을 보여주는 방법에 대해서 글을 써볼까 합니다.

C에서는 입력값을 받는 코딩 작업이 상당히 쉬운걸로 알고 있습니다.
그러나~ 자바 이녀석 사람을 배신하는 것도 아니고 조금 복잡한 형태의 소스로 구성됩니다.

일단 소스 부터 공개를 하고 진행을 하는게 좋겠죠?

import java.io.*;
class GetInput
{
     public static void main(String args[])
     {
          String str = null;
          System.out.println("아무거나 입력해보세요.");
          try
          {
           BufferedReader br=new BufferedReader
            (new InputStreamReader(System.in));
           str=br.readLine();
          }
          catch(IOException e){}
          System.out.println(str + "이라고 입력했군요.");
     }
}

대략 소스는 이렇답니다. 여기에는 처음 자바에 뛰어 드신 분이라면 사람 마음을 아프게끔 하는 내용이 일부 있죠..

저도 마음이 아파오기 시작했습니다.

실질적으로 입력을 위한 소스는 "try { 내용 }" 이녀석 입니다.

그런데 import java.io.*; 이녀석이 낯짝도 두껍게 첫 라인에 있네요.
그럼 이 녀석 부터 알아보고 다음으로 넘어가도록 하죠.

import ← 이 녀석은 아주 좋은 일을 하는 녀석이지요.
외부 클래스를 불러 들이는거죠. 간단하게 설명하자면 나 너좀 데려다 써야 겠다. 라고 하면 되겠네요.
그리고 특징 중에 가장~ 큰 특징은 일등 하는걸 좋아라 하는 녀석이라 맨 첫줄에 써야 한답니다.

그럼 그 뒤에 java.io.*; 이놈들이 뭔지를 알아야겠죠?
큰 의미가 있는것도 아니고 이 역시 단순하게 설명이 충분히 가능하다고 보기 때문에
간단하게 합시다. 복잡하면 골 아파요~ ㅎㅎ
java.io. 까지는 외부 클래스의 주소라고 보시면 되지 않을까 합니다.
이렇게 설명을 하는건 제가 친구를 불러서 논다는 가정을 했을 때
"서울시 중구"에 있는 친구를 불러들일 것이다. 에서 서울시 중구와 java.io 는 아주 흡사하죠?
그럼 그 뒤에 *(편하게 별표 라고 부르도록 하죠)는 컴퓨터를 좀 한다는 분이라면
눈치밥으로 아! 하실거라 믿지만 그래도 설명을 하도록 하죠.
컴퓨터에서 파일 검색을 칠 때 *.avi 라고 치면 어딘가에 숨어있던 야동까지 다 검색을 하죠-_-?
그거와 같은 개념입니다. 별표는 전체라는 뜻으로 보세요.

그럼 이제 첫줄은 아주 ~ 쉽게 해석이 됐죠?
외부에 있는 java.io 패키지 내에 있는 전체를 불러다 사용을 할 것이다. 라고 해석하면 감사하겠습니다.
단! 그 하의 패키지나 상위에 패키지는 접근을 못합니다.(여기선 폴더개념으로 이해해주세요.)


그럼 이번엔 String str = null; 이녀석에 대해서도 한번 알아보고 넘어가죠.
그렇게 큰 의미가 없어 보이죠? 그러나 여기엔 우리가 꼭! 알고 가야 할 중요한게 한가지 있습니다.
자바는 치사하게도 사람으로부터 입력값을 받아들일 때
숫자나 문자나 통일해서 다 ~ 문자로 인식을 합니다. 매정한건지 머리가 나쁜건지...(생각이 없다에 한표)
그렇기 때문에 String 형태로 변수 선언을 해줘야 한답니다.

여기서 제가 String 에 대해서 잘 ~ 알려드릴 수도 있겠지만 간단하게만 알려드릴게요.
전 귀찮은게 많고 제가 잘못된 정보를 알려드릴수도 있기에 검색해서 공부하시라는 의미로
아주 간략~하게 설명하도록 하죠.
String 는 대문자로 시작합니다. 그렇기 때문에 이녀석은 클래스다! 라고 말할 수 있죠.
그리고 또 하나 레퍼런스 데이터 형이라는 점입니다. 실제로 어떤 값을 갖지 못하죠.
나머지는 검색을 통해서 개인이 공부합시다~

그럼 이번엔 try{내용} 이걸 해보죠.
try
          {
           BufferedReader br=new BufferedReader
            (new InputStreamReader(System.in));
           str=br.readLine();
          }

자 슬슬 저도 머리가 아파옵니다. 그리 긴 문장은 아니지만 생소하네요.
일단 입력값을 받기 위해선 꼭 저걸 외우셔야 한다는 점이 중요합니다.
그럼 시작 합시다.

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
위에 보이는 소스를 오른쪽에서 왼쪽으로 해석 하도록 합시다.
이해 하는데도 좋고 실제로도 저런식으로 컴퓨터가 결과를 왼쪽으로 넘겨주기 때문이죠 ~
System.in 이녀석은 입력값을 받아들이기 위한 표준입력스트림니다.(주로 키보드)
말이 좀 어렵죠? 걍 쉽게 입력을 받기 위해서 존재한다고 생각하세요.

InputStreamReader 는 문자기반의 입력을 수행한다. 정도로 알고 넘어가는게 좋을 듯 합니다.
제가 위에서 자바는 숫자나 문자나 다 문자로 입력을 받는다고 했죠?
제가 정확히 아는건지는 좀 의문이지만 InputStreamReader 이녀석 때문에 문자로만 인식을 하는 것 같더군요.
그리고 한문자 단위로 입력을 받아서 한글도 입력이 가능합니다.
이 말에 대해서 이해를 하시려면 A와 가는 보기엔 다 한문자 지만 "가" 라는 단어는 "ㄱ"와 "ㅏ" 가 결합한 형태죠?
이러면 이해가 될런지요? ㅎㅎ

BufferedReader 이거 까지 하면 일단 반은 해석하게 되는 것 같습니다.
저게 참..내용에 대해서 저도 이해도가 낮아서 어찌할까 했는데 답은 간단합니다.
한줄 단위로 읽어라 하는 것으로 알고 있죠. 틀렸다면 덧글을 남겨주세요.

str=br.readLine(); 이거는 바로 위에서 BufferedReader와 readLine는 같다고 볼 수 있을 거 같습니다.
str에 입력받은 문자열을 넣는 과정인데 BufferedReader와 비슷해서
좀전에 문자열을 넣는 과정이라고 한거랑 같죠.(한 라인을 넣는거죠.)

이 정도면 대략 적인 해석은 끝나네요.
처음 의도와는 다르게 블로그를 쓰면서 아무래도 해석을 해주는 건 힘들 듯 하네요.
내용이 복잡해지는 만큼 소스 해석을 해주는건 너무 어려워져서 -_-;
개념을 잡는 정도와 중간중간에 좋은 팁 정도. 그리고 새로운거에 대한 간략 정보가 괜찮을 듯 합니다.
왜냐면~ 공부는 찾아서 하는게 머리에 남으니까요 ~

그럼 이번 내용도 쉬웠죠?
캄사합니다 ~ ^^;

by 만성피로 | 2008/03/21 21:37 | 정리할 자료들 | 트랙백 | 덧글(1)

트랙백 주소 : http://maydaisy.egloos.com/tb/171209
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 김교수 at 2008/03/21 23:49
만성피로군의 글은 언제 봐도 정말 재미있고 이해하기 쉽네요. 장차 교육분야에서 빛을 발할 인재가 아닐까 생각합니다. 제가 설명을 좀 추가해도 될까요? BufferedReader인데요, 이것은 그냥 읽어들이는 곳에 설치하는 버퍼라고 생각하세요. 즉 InputStreamReader의 스트림(흐름)을 타고 입력되는 문자열을 임시저장하는 곳이지요. 그래서 많은 양의 문자열을 한꺼번에 읽어들이는데 더 효율적인 동작을 하도록 합니다. 이 BuferedReader클래스에 readLine()이라는 메소드(함수)가 있는데 이것이 한 줄을 읽는 기능을 합니다. 따라서 이를 이용하려면 우선 BufferedReader 객체를 만들고(위에서 br) 이 객체의 readLine()을 실행합니다. 즉, br.readLine(). 그러면 이것이 키보드로 입력된 한 문장을 반환(return)하지요. 이것을 문자열 변수(사실은 문자열 객체) str에 입력하는 것입니다.

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶