본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 26일차 (2023-06-28) 자바 기초 DAY24_자바 프로그래밍_상속을 이용하여 primitive type과 String 출력 기능을 추가하기_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 6. 28.
## 28. 상속을 이용하여 primitive type과 String 출력 기능을 추가하기

- 상속을 이용하여 바이트 입출력 기능을 확장하기
  - DataInputStream = FileInputStream 클래스 + primitive type/String 값 읽기
  - DataOutputStream = FileOutputStream 클래스 + primitive type/String 값 쓰기

 

 

Java 17 api 에 있는 DataOutputStream 클래스를 참고하여 만들어보기

 

상속을 이용하여 primitive type과 String 출력 기능을 추가하기

상속을 이용하여 바이트 입출력 기능을 확장하기

DataOutputStream = FileOutputStream 클래스 + primitive type/String 값 쓰기

DataOutputStream 클래스 생성

 

DataOutputStream.java

ㄴ FileOutputStream 클래스를 상속시킴

 

DataOutputStream.java

ㄴ super 클래스의 생성자 추가

=> 우클릭 > Generate Constructors from Superclass... 선택

 

ㄴ String 만 생성해줌

 

DataOutputStream.java

ㄴ writeInt 메서드 생성 (App 클래스에 있는 saveMember() 메서드의 int 값을 쓰는 write 복사해서 this 로 변경)

=> int 값을 쓰기 위한 메서드

 

App.java

ㄴ FileOutputStream -> bitcamp 패키지에 생성한 DataOutputStream 사용

 

App.java

ㄴ DataOutputStream 에 생성한 writeInt(int v) 메서드 사용

 

DataOutputStream.java

ㄴ writeShort 메서드 생성 (App 클래스에 있는 saveMember() 메서드의 Short 값을 쓰는 write 복사해서 this 로 변경)

=> Short 값을 쓰기 위한 메서드

=> java 17 api 참고 시 writeShort 는 int 값을 파라미터로 받는 것을 알 수 있음

 

App.java

ㄴ DataOutputStream 에 생성한 writeShort(int v) 메서드 사용

 

DataOutputStream.java

ㄴ writeUTF 메서드 생성 (App 클래스에 있는 saveMember() 메서드의 String 값을 쓰는 write 복사해서 this 로 변경)

=> String 값을 쓰기 위한 메서드

 

App.java

ㄴ String 값을 쓰는 모든 부분에 DataOutputStream 에 생성한 writeUTF(intv) 메서드 적용

 

DataOutputStream.java

ㄴ writeChar 메서드 생성 (App 클래스에 있는 saveMember() 메서드의 Char 값을 쓰는 write 복사해서 this 로 변경)

=> Char 값을 쓰기 위한 메서드

=> java 17 api 참고 시 writeChar 는 int 값을 파라미터로 받는 것을 알 수 있음

 

App.java

ㄴ DataOutputStream 에 생성한 writeChar(int v) 메서드 사용

 

=> saveItem(), saveBoard() 메서드도 동일하게 변경해주기

 

saveBoard() 에서의 long 값 처리

DataOutputStream.java

ㄴ saveBoard() 에서는 long 값을 사용하므로 DataOutputStream 클래스에 long 값을 처리해주는 메서드를 추가해야 함

 

App.java

ㄴ DataOutputStream 에 생성한 writeLong(long v) 메서드 사용

 

 

상속을 이용하여 바이트 입출력 기능을 확장하기

DataInputStream = FileInputStream 클래스 + primitive type/String 값 읽기

DataInputStream 클래스 생성

 

DataInputStream.java

ㄴ String 만 생성해줌

 

App.java

ㄴ FileOutputStream -> bitcamp 패키지에 생성한 DataInputStream 사용

 

DataInputStream.java

ㄴ readShort() 메서드 생성 (App 클래스에 있는 loadBoard() 메서드 내의 코드 활용하여 in -> this 로 변경)

ㄴ return 값은 short 이므로 (short) 로 형변환(캐스팅)해줘야 함

 

App.java

ㄴ DataInputStream 클래스에 생성한 readShort() 메서드 사용

 

DataInputStream.java

ㄴ readInt() 메서드 생성 (App 클래스에 있는 loadBoard() 메서드 내의 코드 활용하여 in -> this 로 변경)

 

 

App.java

ㄴ int 값 읽는 모든 부분에 DataInputStream 에 생성한 readInt() 메서드 적용

 

DataInputStream.java

ㄴ readLong() 메서드 생성 (App 클래스에 있는 loadBoard() 메서드 내의 코드 활용하여 in -> this 로 변경)

 

App.java

ㄴ long 값 읽는 부분에 DataInputStream 에 생성한 readLong() 메서드 적용

 

DataInputStream.java

ㄴ Board 에는 없지만 Member 에는 char 타입이 있으므로 생성해줘야 함

ㄴ readChar() 메서드 생성 (App 클래스에 있는 loadMember() 메서드 내의 코드 활용하여 in -> this 로 변경)

 

App.java

ㄴ loadMember() 메서드에서 long 값 읽는 부분에 DataInputStream 에 생성한 readChar() 메서드 적용

 

DataInputStream.java

=>

ㄴ 8192는 일반적으로 사용되는 크기 중 하나이며, 많은 I/O 작업에서 효율적인 크기로 알려져 있습니다.

ㄴ 읽을 데이터의 길이에 따라 동적으로 크기를 할당

=> 필요한 만큼의 메모리만 사용하므로 메모리의 효율성이 높아짐

 

App.java

ㄴ String 값 읽는 모든 부분에 DataInputStream 에 생성한 readUTF() 메서드 적용

 

=> saveMember(), saveItem() 메서드도 동일하게 변경해주기