-
02.15 출력 스트림 객체와 API학원일지 2023. 2. 15. 13:09
[review]
자바 언어로 컴퓨터 프로그램을 만드려면 번역기가 필요하다. 번역기의 종류는 어떤 것들이 존재하는가?
: 컴파일러와 인터프리터
컴파일러와 인터프리터의 차이점은?
: 컴파일러는 논리언어(고급언어)를 물리언어(저급언어)로 변환하는 번역기.
인터프리터는 고급언어로 작성된 소스코드를 스택에 올라가는 처리 단위(블록 단위)로 물리 언어로 번역하고 실행해주는 번역기.(결과물은 남기지 않음)
자바는 번역기로 컴파일러를 사용하나요? 인터프리터를 사용하나요?
: 둘 다 사용.
두 번역기 모두 사용하는 이유는?
: 컴파일러만 사용하게 된다면 os에 맞추어서 사용하기 때문에
*머신은 cpu를 말하는 것. 곧 실행장치 코드를 실행하는 장치가 cpu에 존재. 사실 cpu에는 세 개의 필수 장치가 존재 : 계산기, 제어장치, 실행장치로 구성되는데 실행기 또는 실행장치가 머신이라는 이름으로 불리우기도 함.
가상머신이랑 실체하지만 실제 실행기가 아닌 소프트웨어로 이루어진 실행기를 말한다.
값/ 데이터를 표현하는 방법에 대해서 학습하였다.
값의 큰 범주에는 어떤 것들이 있는지?
: 정수, 실수, 문자, 부울값
정수 값은 크기에 따라서 값의 형식을 분류하는데, 제일 작은 것부터 큰 것으로 순서대로 형식명칭.
byte, short, int, long
float, double
char
3KB -> 3x1024 byte
3Kb -> 3x1024 bit
부동 소수점(Float Point) 실수의 크기와 범위
부동 소수점(Float Point) 표현 방식의 4바이트 실수
[비트구조]
float -> 정수와 실수를 구분하지 않음.
ex) 12.125 -> 1.2125e1
1:몇 칸을 당겨서 썼는지(소수점이 얼마나 이동했는지) = 지수부
변수 선언
선언이란?
모든 키워드는 선언을 하고 사용해야만 한다.
ㄴ변수, 함수, 참조변수 등등 -> 선언을 하고 써야함!
선언방법
변수 : int kor;
함수 : void add(int x, int y);
참조변수 : Animal nnn;
ㄴ자바에서는 심볼을 선언하는 방법은 변수에서만 가능! (나머지는 사용하면서 자동으로 됨)
변수란?
값을 저장하기 위한 공간
int kor = 3;
int자리에 float를 넣는건 원래 안되나, 번역기가 에러가 나지는 않게 해줌.
[변수를 선언하는 방법]
변수 명명 규칙
-숫자로 시작해서는 안됨. 무조건 문자로 시작.
-문자 사이에 공백이 있어서는 안됨.
-특수기호가 들어와서는 안됨.
-묵시적으로 소문자로 시작하기
여러 변수를 한 번에 선언하기
int kor1; -> int kor1, kor2, kor3;
int user name -> int userName; :카멜 표기법, 낙타 표기법 (단어 구분할때 공백 대신 앞글자를 대문자로 하는것)
출력 스트림 객체와 API
[출력 장치를 이용하는 방법]
os가 제공하는 api를 사용하는 것이 일반적.
자바 플랫폼의 api를 이용. 그 인터페이스가 함수 형태.
자바는 간결성, 안전한 객체지향, 컬렉션이 포함된 언어라는 특징이 있음.
객체지향은 함수를 혼자 사용할 수 없게 함.
객체라는 개념으로 묶여있는 것을 말함.
함수를 객체를 통해서 묶어서 써야하기 때문에 함수에 out, in 을 붙임
[출력 스트림(output Stream)을 이용한 비동기 처리]
write() -> out.write()==
out이라는 개념? -> 어플리케이션이라는 것이 함수로 출력되긴하지만 모니터로 바로 가는 것은 아님.
출력을 하고자 하는 객체는 여러개이고 모니터는 하나임. 같이 출력하고자 할 때는 문제가 생기기 때문에 하나씩 출력하게 됨.
병목현상이 생김. (지연이 생김, 컴퓨터의 응답 없음.)
=> 결재함(버퍼)을 둠으로써 문제를 해결. 출력할 내용을 버퍼에 두고 대기를 하지 않아도 됨.
버퍼 : 임시공간 / 송신과 수신을 할 때, 수신이 느리거나 송신의 통신이 불안정 할 때 중간에 버퍼 공간이 있어 실행을 안정적일 수 있도록 하는 것. / 버퍼링
출력하려는 사용자가 버퍼를 준비해야함
출력버퍼=OutputStream
버퍼는 임시공간을 이야기하는거기때문에 방향성이 없음.
스트림, 출력이라는 단어를 통해 방향성을 나타내는 것.
나가는 방향은 output stream
들어오는 방향은 in put stream
개체명(Entity) ->주문 객체(실체) object
실체화 된 것을 instance라고 말하기도 함.
실체화를 시켜서 사용을 해야함. 객체를 type으로도 볼 수 있음
객체를 주문해서 실체화해서 사용.
실물을 주문하기 위해서는 타입명(객체명)이 있어야함
그 객체명이 OutputStream
주문 때 사용하는 명령어 new
[개체(Entity)와 객체(Object)]
각 각의 객체를 식별하기 어려워 객체에 이름을 붙이는 것 : 참조
객체를 참조하기 위한 식별자 = 이름 , 그 이름을 참조변수, 레퍼런스라고 한다.
[입출력 API는 입/출력 스트림 객체를 이용한다]
객체를 이용하는 함수
-출력을 하기 위해서는 버퍼가 필요하고, 이 버퍼의 타입명칭을 주문을 해서 만들어진 것이 객체. 객체를 이용하기 위해 필요한 것=이름(참조변수) 그것이 out 이 된것.
OutputStream
-파일 출력이 있고, 콘솔에 출력, 네트워크에 출력하는 것이 있음. 모든 출력에서는 버퍼, 아웃풋스트림이 필요함.
콘솔은 필수입력도구로 꼭 필요한 것이다 보니까 콘솔출력과 콘솔입력만 예외적으로 사용자가 만들지 않아도 만들어져 있음.
이미 주문이 되어있는 것 -> 만들 필요가 없다 -> 콘솔입출력에 대해서만!
아직 해소되지 않은 것? =>
System.out.printf( total )
out-> 객체
모든 api는 객체에 포함되어있다. 참조를 통해서 사용한다고 생각해야함.
프린트하려면 버퍼가 필요하고, 그래서 버퍼에 프린트 한다.
버퍼를 먼저 형성하고 그리고 출력한다 = 객체 지향
객체를 담는 것이 아니라 객체를 식별하는 이름에 해당하여 공간이 x
공간을 참조하는 이름.
System 이라는 클래스 안에 변수가 선언된것?
out이라는 객체가 있으나 선언을 할 필요가 없음.
[콘솔 입/출력과 문자코드]
keycode
ASCII (아스키=문자키, 문자코드)
american standard code for information interchange
System.out.write(3);
System.out.flush();
기본적으로는 버퍼가 다 찰 때까지 출력이 안되지만, flush를 사용하여 바로 출력
[문자 출력]
객체는 주체가 되거나 대상이 되는 것
주체나 대상이 가지고 있는 함수
System.out.write(51);
System.out.flush();
=> 3으로 출력 됨.
(51에 해당하는 문자 3)
코드표를 알려달라고 하는 방법?
싱글 따음표 안쪽에 입력하기 : '3'
int code = 'A';
int x = code+1;
System.out.write(x);
System.out.flush();
=> B로 출력됨.
저장은 숫자로 되지만 출력은 문자로!
문자는 문자형식에 저장하자..
[각국의 문자코드 확장]
멀티바이트코드 -> 기존의 영어 아스키에 바이트를 추가한 것
각국의 나라에 같은 바이트 공간을 쓰고있어서 모든 나라를 섞어서 쓸 수 없음. -> 코드표가 충돌
(그래서 가끔 언어가 깨지는 이유가)(EUC-KR, EUC-JP)
=> 충돌하지 않게끔 모든 언어를 통합해서 만든 문자표가 -> UNICODE