본문 바로가기

Programming/Java

#02. 입출력(I/O)기능

이번 소개는 입출력 기능을 배워보도록할께요.


1.System.in.read() and ASCII코드

#01에서 자바프로젝트 만드는법과 class 만드는법을 소개 시켜드렸기때문에 이번 소개부터는 넘어가도록 하겠습니다 ~.~

저의 기준으로 자바프로젝트 이름은 Java#02, class이름은 Ex01로 만들겠습니다.

(편하신대로 이름 지정하여 만드셔도 상관없어요)




먼저 이렇게 작성 해봤어요. 1번과 2번은 이번 소개에서 할 입출력 기능을 사용하기위해선

꼭 필요한 부분입니다.


먼저 1번과 똑같이 써주시면 입출력기능을 사용할수있는 페키지를 불러오는 역활을합니다.

2번은 입출력기능 수행중에 예기치못한 에러가 발생했을시 코드를 멈춰주는 역활을합니다.

(1번과 2번은 항상 같이 붙어다녀야 합니다!!)


먼저 int num; 이라는 인티저 변수를 정의해줍시다~ 입력 받은 데이터를 저장할곳이 필요하니깐요~

왜 int로 했는냐...그건 컴퓨터가 모든 문자던 숫자던 모든 기호를 숫자로 기억을하기때문이죠

그숫자를 정의해놓은것을 ASCII코드표 라고 합니다!


http://www.powerindex.net/U_convt/ascii/ascii.htm

요기 위 링크로 들어가시면 각 기호마다 가지는 고유의 숫자들이 표로 정리되어있어요.


num = System.in.read();

num 이라는 변수에 시스템이 입력받은 데이터를 저장한다는 뜻이에요.

예를 들어 a를 입력 받았다면 a의 ascii코드를 num 이라는 변수에 저장하는거지요.


System.out.println(num);

num 이라는 변수에 저장되어있는 데이터를 println을 이용해 출력하는겁니다.


그럼 이제 실행을 해보겠습니다.


위와 같이 출력되는 콘솔에서 커서가 깜빡이는걸 볼수있을거에요.

이건 지금 컴퓨터가 입력 받을 준비가 되어있고 우리는 문자던 숫사던 입력하여 엔터를 처주면 됩니다!

전 아까 예를 들었던것처럼 a를 입력 해볼께요

a를 입력하자 97이라는 숫자가 출력되네요

위에 ascii코드표 링크에서 a를 살펴보면 97이 a의 ascii코드라는걸 알수있습니다!


2.입력 받은 숫자 그대로 출력하기

위에서 봤듯이 a를 입력해도 ascii코드로 나오기때문에 제대로 무엇을 입력했는지

단번에 파악하기가 힘듭니다. 이번엔 입력 받은 숫자를 그대로 출력하도록 해볼께요.


이렇게 변수 3개를 지정한뒤 num이라는 변수에 입력받은 데이터를 저장!


예를 들어 숫자 1을 입력 받았다면 숫자 1은 ascii코드로 49입니다 (ascii코드표 확인) 입력 받은 숫자 1 을 다시 1로 출력 하기위해선 49에서 48을 빼야만하지요. 하지만 여기선 그렇게 안하고 다른 방법을 써보도록할께요.


숫자 0이 ascii코드로 48이지요 그렇다면 입력 받은 데이터에서 숫자 0을 빼주게 된다면?

48을 빼는것과 같은 원리가 되는거겠죠? 이 원리를 이용해서 코드를 써봤습니다.


여기서 중요한점은 변수 num에서 숫자 0을 뺄땐 "0" 이 아니라 '0'으로 빼줘야됩니다

num2 = num - '0';   (num2 = num - "0"; 아니에요)

이유는 "0"은 숫자 0을 뜻하는것이아니라 문자열(string) 0 으로 인식을 하기때문에

인티저(정수,음수) 변수로 만들어논 num, num1, num2에 문자열을 계산 할수가 없는거지요.

'0'을쓰게 된다면 문자 0으로 인식을 하기때문에 ascii코드로 인식되어 입력 받은 숫자의 ascii코드에 0의 ascii코드를 뺀 계산된 데이터가 num2라는 변수에 저장되는거에요.(num2 = 49 - 48)


자그럼 실행을 해봅시다.

숫자 2를 입력했습니다. 0의 ascii코드가 48이라고 출력이 되면서 

num2변수 에는 2의 ascii코드 50에 0의 ascii코드 48이 빠지면서 숫자 2를 출력하는거지요.


여기서 또 중요한점!!

숫자가 아닌 알파벳(a~z 또는 A~Z)을 쓰면 이상한 숫자들이 나오는것은 당연한것이니 놀라지들 마세요!


3.입력받은 알파벳 그대로 출력하기

알파벳들은 숫자와 달리 다른 방법으로 출력을 해야합니다.


ascii코드를 보면 알파벳들도 대문자와 소문자가 다른 ascii코드들을 가지고있어요.

일단 범위를 보면 대문자 A~Z는 65~90까지네요. 소문자 a~z는 97~122이네요.

만약 우리가 여태 배운 방법대로 알파벳을 입력 받고 다시 출력 하게된다면

저기 범위안에있는 숫자들중 하나가 나오겠죠.


이번엔 입력 받은 알파벳이 ascii코드로 인식 된것을 출력할때 다시 알파벳으로 바꾸는방법을 배워볼께요.

이번엔 종류가 다른 변수 두가지를 썼습니다 하나는 우리가 여태 보았던 인티저 변수(int num) 과 이번에 새롭게 접하게된 케릭터 변수에요(char alph).


char alph;

케릭터 변수는 문자 하나만 저장할수있는 변수입니다 이 변수에 우리가 출력할 알파벳을 저장하는거에요.


일단 num이라는 변수에 알파벳을 입력 받습니다 그럼 컴퓨터는 입력 받은 알파벳을 ascii코드로 인식하여 저장하겠죠?


예를 들어 a를 입력 했다면 num은 a의 ascii코드인 97을 저장합니다.

그리고 나서 alph라는 케릭터 변수에 문자를 저장하기위해선 num이 가지고있는 ascii코드를

다시 알파벳으로 변환해서 저장해주면 되겠죠. 변환 방법은 위에 보이다시피

(char)num을 하게 되면 문자로 변환이되요.

정확히 num변수에 저장된 인티저 타입의 데이타를 케릭터타입의 데이타로 바꾸겠다는 소리죠. 바꾼 데이타를 alph라는 변수에 저장!

저장후 출력하게 되면 아래와 같이 출력결과가 나옵니다.




이번 소개는 여기서 마치도록할께요 다음 소개에서는 하나의 문자만 입력 받는것이 아닌 문장을 입력 받고 출력할수있는 방법을 소개해드리겠습니다. 읽어주셔서 감사합니다^^





'Programming > Java' 카테고리의 다른 글

#05. 명시적,자동적 데이터 변환  (0) 2012.09.06
#04. 연산자  (0) 2012.09.06
#03. 입출력(I/O)기능2  (0) 2012.09.06
#01. print를 이용한 출력  (0) 2012.09.05
#00. Java & Eclipse 설치  (0) 2012.09.05