'기본 출력'에 해당되는 글 1건

  1. 2007.07.12 System 클래스와 기본 출력

System 클래스에서 입출력과 관련된 필드부분은, 총 3가지로 나뉠수 있다.

사용자 삽입 이미지

err 는 에러 메시지 출력부분이고, in은 기본 입력을 받는 부분이며, out은 기본 출력을 하는 부분이다.

이 부분은, API 문서내에 java.lang 팩키지 안에 System 클래스 부분에서 확인할수가 있다. 이중, err과 out은 PrintStream 이라는 타입으로 되어 있는데, 마우스로, 저곳에 갖다 대보면, 저 타입이 어느 팩키지에 속해있는지 확인해볼수가 있다.

PrintStream 클래스는, java.io 라는 팩키지에 속해있다. 아무튼, 기본 출력, out에 관련된 메소드들은, 크게 4가지로 나누어 볼수가 있다.

Write 메소드, print 메소드, println 메소드, printf 메소드.

print 와 println 메소드의 차이는, 자동으로 한줄을 입력하느냐, 마느냐의 차이이니, 그 부분은 생략하기로 하고, 여기서 볼 부분은, write 와 println, printf 에 관해서이다.

1// class Exam04_01{
2//     public static void main(String[] args){
3//         System.out.write(65); // 아스키 코드값에 해당되는 문자값을 출력
4//         System.out.flush();
5//         System.out.println();
6//
7//         byte[] by = new byte[]{'J', 'A', 'V', 'A'};
8//         System.out.write(by, 0, 4);
9//
10//         int a = 100;
11//         int b = 'A';
12//
13//         System.out.printf("a = %d 입니다. \n", a);
14//         System.out.printf("b = %c = %d \n", b, (int)b);
15//     }
16// }
위의 소스코드를 보자.

write 메소드의 사용법에는 두가지가 있다.
API 에서 확인을 해보면,

사용자 삽입 이미지

이렇게 되어 있는데, 아래 사용방법에서, int 가 사용되는 것은, 아스키 코드 값을 위한 것이다.

3 번째 라인에서 write 메소드가 쓰였다. 이 메소드는, 화면에 출력을 시켜주는 flush 기능이 자동으로 되는 것을 지원해주지 않고 있다. 그래서 화면에 출력시키기 위해서는, 4번째 라인에서처럼, flush 메소드를 사용하여, 출력을 시켜주었다.

이렇게 사용되어지면, write 라는 메소드는 상당히 불편한 메소드 임에 분명하다. 사용할때마다 flush 를 같이 사용해 주어야 하니까. 하지만, 나중에, 네트워크 부분에서는 자주 쓰이는 녀석이라니 일단은, 알아두자.

다음으로, 7번째와 8번째 라인이다. 이는 write 의 사용법중, 위에 사용방법에 해당되는 녀석인데, byte 형태의 배열과, 초기값, 그리고 길이등을 명시해주고 있다.

7번째 라인에서는 byte 배열 by 를 생성시켜주었고, 8번째 라인에서는 write 메소드를 사용하여 출력해주었다. byte 배열 by 에서, 0번째 값부터, 총 4개의 값을 출력하라는 의미가 바로 8번째 라인이다.

알겠지만, 배열에서는 첫번쨰 값이, 0번째, 두번째 값이, 1번째 등으로 말을 한다.

하여튼, 8번째 라인대로 사용하는데, 이는 write 메소드를 사용하는 두가지 방법에서 이상한 차이를 발견할수가 있다.

3- 4번째 라인에서 사용된 방법은, 자동 flush, 기능이 없어서, flush를 따로 부여해주었다. 하지만, 7-8번째 라인에서 사용된 방법은, 자동 flush 기능이 포함되어 있어서, 따로 flush 를 해줄 필요가 없이, 바로 사용할 수가 있다. 두가지 방법에 있어서의 차이가 이렇다.

13번째와 14번째 줄에서는 printf 라는 메소드가 사용이 되었는데, 이 메소드는, 자바 1.5부터 지원이 되는 사항으로, C를 개발하던 개발자들을 위해, C 문법을 빌려온 것이다. 이는, %d(정수), %c(문자), %s(문자열), %f(실수) 등을 이용하여 문자를 출력하는 방법이다. C를 개발했던 개발자들에게는 편할지, 몰라도, JAVA 입문자에게는 헷갈릴수도 있으니, 주의할 것.
1// class Exam04_02 {
2//     public static void main(String[] args) {
3//         int x = 12;
4//         int y = 24;
5//
6//         System.out.println("x = ", + x); // x = 12
7//         System.out.println(x + y); // 36
8//         System.out.println("a" + x + y); // a1224
9//         System.out.println(x + y + "a"); // 36a
10//        System.out.println(x + "a" + y); // 12a24
11//         System.out.println(x + "a" + y * 2); // 12a48
12//         System.out.println(x + "a" + y - 2); // 에러
13//         System.out.println('a' + x + y); // 133
14//         System.out.println(x + y + 'a'); // 133
15//         System.out.println('a' + 'b'); // 195
16//         System.out.println("" + 'a' + x); // a12
    }
}
이부분은, 여러방법으로 println 을 사용한 모습이다.

6번째라인부터, 16번째 라인까지 println 을 사용한 모습인데.

6번째 라인, 큰 따옴표 "" 를 사용하면, 이는 문자열이 되어버리며, 문자열과 연산자가 연산이 되면, 이는 그대로 문자열이 되면서, 단순 나열방식이 되어버려, x = 12 라는 단순 나열이 되어버린다.

7번째 라인, 큰 따옴표 "" 이 없는 상태에서는, 연산이 가능한 연산끼리 연산이 되어지는 경우인데, 이 경우는, 말 그대로 연산이 되어 36이라는 값이 출력된다.

8번째 라인, 연산은 앞에서부터 뒤로 실행이 되어지는데, 앞에 큰 따옴표 "" 과 x가 만나서, 문자열이 되어버리고, 다시 한번 문자열과 y가 만나, 그대로, 문자열이 되면서, 단순 나열 방식이 된다. 그래서 a1224 가 출력

9번째 라인, 역시, 앞에서부터 뒤로 실행이 되는데, 이번엔, 앞에 연산이 가능한 경우라서, 연산이 되고, 이후에는, 문자열이 되면서, 단순 나열방식이 된다. 고로, 36a 가 출력.

10번째 라인, 위와 같은 원리로, 12a24 라는 값이 출력한다.

11번째 라인, *부터 연산이 이루어진다. 그후, 앞에서부터 연산이 이뤄져, 값은 12a48 이 된다.

12번째 라인, 이곳에서 -는 연산 순위에 따라 가장 마지막에 연산이 이루어지는데, 앞에 계산되어진 부분은, 이미 문자열로 바뀌어버린 상태다. 거기서 -2를 하면, 컴퓨터가 번역을 할수가 없어서, 결국 에러를 일으키고 만다.

13 번째 라인, 작은 따옴표 ''를 사용한 'a'는 char z = 'a'; 라고 사용한 것과 똑같은 효과를 불러일으킨다. 고로, 이는 아스키 코드 값을 지닌 문자값인데, 여기서, 만약, 연산이 가능하면, 아스키 코드값으로 변형되어, 작동하고, 그렇지 않다면, 그냥 문자값으로 작동이 되어진다. 여기서는 연산이 가능하므로, a의 아스키 코드값 97로서 작동하여, 결과값은 133이 된다.

14번째 라인, 13번째 라인과 동일하다.

15번째 라인, 여기서도 연산이 가능해서, 97+98 이라는 연산이 이루어지고, 결과값은 195

16 번째 라인, 큰 따옴표 "" 는 비록 아무 내용이 없을 지라도, 이는 뒤에 내용을 문자열로 바꿔주겠다는 의미가 강한 것이라고 볼수 있다. 작은 따옴표 '' 로 둘러쌓인 'a;는, 이때는 앞에 문자열이 와서, 연산이 불가능 하므로, 그냥, a라는 값이 사용되어, 문자열이 되어버린다. 그렇게, 단순 나열 방식이 전개되어, 결과값은, a12가 되어버린다.


p.s 위의 글들은, 김승현 강사님열혈강의 Java Programming 의 Round 4-1, 동영상 강좌에 기초한 내용입다다.
:

BLOG main image
아무거나 공부하자!!! by Young79

공지사항

카테고리

분류 전체보기 (79)
Programing (29)
English (31)
Graphic (4)
Saying on T"We"tter (15)

최근에 올라온 글

최근에 달린 댓글

글 보관함

달력

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total :
Today : Yesterday :