[1교시]
[java.io.*]: imput과 output과 관련된 클래스
1) byte
byte 단위를 처리하는 것에는 Stream이라는 말이 붙어있다.
[imputStream] : 데이터가 우리쪽(내가 현재 작업하고 있는 프로그램)으로 들어오고 있다.
- FileInputStream
read() 메소드: return 타입이 intrger이므로 반복문에서 -1을 조건으로 사용하기 때문에 char를 사용할 수 없는 것이다.
-1 : 파일의 끝에 도착했다!(End of File), 한 글자씩 가져오기 때문에 성능이 좋지 않다.
read(byte[] b) int : 메소드 read()는 문자 한 개씩 밖에 가져올 수 없지만 byte계열을 사용하면 그릇을 조정할 수 있다. int는 읽은 데이터가 아니라 작업한 결과(예) 100개)를 리턴한다. int 마지막에 담긴 개수가 몇 개인지 확인하는 용도. buff
[outputStream]: 데이터가 우리쪽(내가 현재 작업하고 있는 프로그램)으로 나가고 있다.
- FileOutputStream
write(int b) : void : 정수값에 해당하는 것을 파일에 저장을 한다
write(byte[] b) : void
- Buffered : 기존에 있던 기능을 개선시킨 것! 혼자사 자체적으로 객체를 생성할 일이 없다. 클래스의 기능을 개선시키고 싶은 것은 하위 클래스를 전달인자로 받게 된다. 기본 생성자가 없다.
# 데코레이터 패턴(Decorator Pattern)
: 호스가 짧아 다른 기능과 연결해서 사용한다. 성능이 낮은 클래스와 연결해서 사용한다.
BufferedimputStream(imputStream S)
BufferedoutputStream(outputStream S)
2) char
자바를 제외하고 char를 사용하지 않는다. 보통 byte단위로 bit단위로 정보를 보냄.
자바에서는 한글을 보낼 때 사용한다.
Reader
- FileReader
read() : int -1 : EOF(End of File)
ready(byte[] buff) : int
Writer
- FileWriter
writeint(int b) : void
write(byte[] buff) : void
BufferedReader(Reader S)
readLine() : String 데이터가 없음을 나타낼 때 null로 나타낸다.
BufferedWriter(Writer S)
상위의 동일한 클래스를 사용하는 것이기때문에 동일한 메소드를 사용한다.
Buffered라는 완충공간없이 보내면 Delay가 생길 수 있기 때문에 Direct로 받는 것보다 완충제 역할을 하는 Buffer를 통해 받는 것이 더욱 효율적이다.
[과제] : txt에서 score의 정보를 한줄 한줄 떼와서 합계와 평균을 구하고 출력하라
형을 변환할 때, (int) sp[1] 이런 식으로 형변환하면 안된다.
int kor = Integer.parseInt(sp[1]);
결과를 파일에 저장해 결과를 남기고 싶다면?
BufferedWriter가 필요해요.
BufferedWriter의 경우 close()를 안하면 저장이 안되니까 꼭 close해야 한다.
String.format();
[2교시]
프로그래밍 또한 노력한만큼 실력이 는다!
아래에 해당하는 부분은 0512 역량평가와 관련있다.
문자열이 아닌 것은 객체를 말하는 것이다.
30명에 대한 데이터를 파일로 저장해, 종료해도 없어지지 않게 하고 싶다면 객체 안에 있는 것들을 어떻게 저장할 것인가?
[ObjectInputStream / ObjectOutputStream]
- 클래스가 반드시!!!! Serializable 인터페이스를 구현해야 한다.
- Serial 직렬 : A에서부터 B까지 데이터를 보낼 때, bit의 나열들을 일렬로 나란히 한 줄로 세워서 보내는 것!
- 데이터가 멀리가면 유실될 가능성이 있다.
- Serial 통신을 많이 사용(안정적으로 멀리 데이터를 보내야 할 때)
- Serializable 인터페이스 우리가 구현해야할 메소드가 없고 직렬로 만들어야 한다라고 전달만 해주는 역할
VO 만들기
화면에 출력
oos를 이용해 파일로 저장하고 싶음
우리가 저장하고자 하는 것은 book class
=> writeObject(); 객체타입이면 다 사용할 수 있다.
아래에서는 FileNotFoundException, IOException 중 상위 개념인 IOException만 있어도 된다.
오류 발생 Exception → serializable 하라는 것임
class BookVO implements Serializable
→ Serializable를 하는 이유는 통째로 저장하고 싶기 때문이다.
object로 저장시 data로 저장
왜냐하면 txt로 저장해도 읽을 수 없기 때문에
객체 하나 더 생성
BookVO java = new BookVO("345", "그림으로 배우는 자바", 20000);
메인 안에 있는 데이터를 분리시킬 것임.
저장 및 출력용의 output();
읽어들이는 용도의 input();
book, java를 두번 던져 예외
에러를 내지 않는다 하더라도 exception 처리를 해야함
파일의 끝에 도달했다 if문을 사용하지 않고 처리하는 법
oii.readObject();는 클래스의 형태, Object 타입으로만 리턴된다. 하향 캐스팅한 후 BookVO book = (BookVO) oii.readObject();
SerialTest 수정해서 캡쳐올리기
File.IO : 자바로만 열 수 있어서 굉장히 종속적임
패키지와 클래스를 만들어주세요.
net.scit41.shop;
class ProductVO
기본, 일반생성자, setter, getter, toString를 생성한 후 public class ProductVO에 implements Serializable
public class ProductVO implements Serializable
파일을 만들어 주세요. 총 생성되는 파일은 5개!
ProductInterface의 구현은 class ProductService에서 할 것
ProductInterface에서 기능 설계
class ProductService로 가서 에러나는 것을 수정
ProductInterface는 실제 기능!
위에 보면 출력하는 메소드는 전혀 없다.
class ProductUI : 사용자에게 보여지는 모든 면
입력과 출력에 관련된 모든 것!을 처리할 것이다.
public int ProductCount();는 3. 제품 전체 조회에서 같이 보여줄 것이기 때문에 메뉴에 없다.
main에서 UI 생성 -> Service 생성 그러면 Service 객체를 UI로 보냄
UI에 Service 객체가 있어야 함
Service는 파일을 저장, 저장한 파일을 종료 메뉴를 띄우면 파일에 저장하고 끝남
파일을 언제 가져올 것이냐
파일 저장은 맨처음에 한번, 마지막에 한번 딱 2번
주요 작업은 Service의 Array에서 구현할 것임
다시 UI로 돌아가서
생성자
객체의 개념이 잘 안잡힌듯
왜 사용하는지 이해가 잘 안감 ㅠㅠ
객체, 배열, 객체배열, ArrayList, HashMap, 뭘 사용해야 하는지 잘 모르겠다
객체지향부터 다시 해보자!
'개발자로 가는 길(국비지원과정) > 1. Java' 카테고리의 다른 글
[210517월_test] 피보나치 수열, 연산자 문제풀이 (0) | 2021.05.17 |
---|---|
[210513목] UI, Service, main의 흐름, 메소드 load, save (0) | 2021.05.13 |
[210511화] FileIO, InputStream, OutputStream (0) | 2021.05.11 |
8주차 질문 (0) | 2021.05.10 |
[210510월] Collection, ArrayList 복습, 코딩 연습 (0) | 2021.05.10 |