✅네이버클라우드 캠프/개발일기

[네이버클라우드캠프] 47일차. 자바 객체 출력과 버전 관리, CSV 입출력, 리팩토링, Factory Method 패턴 소개

우동한그릇 2023. 6. 30. 15:54
반응형

 

 

* 32. 객체 출력하기

 

 

직접만든 클래스인 DataOutputStream 을 기존 java의 패키지

ObjectOutputStream으로 교체해준다.

 

이렇게함으로써 형변한 과정을 코드로해주는 것이 아니라 java의 패키지가 진행해준다.

 

또한 인스턴스를 사용하지 않는 메소드라 해도 non-static으로 만들어주는 것이 좋다.

나중에 재사용할지도모르기 때문이다.

 


* 버전 번호 명시 java.io.Serializable

 

Serializable 은 버전 번호를 명시해주는 것이다.

 


* serializableUID 스태틱 필드

 

 

만약 생성한 serializable UID의 버전번호와 읽어들일 데이터의 버전이 다르다면

오류가 발생한다.

 

이전 버전으로 serializable 한 데이터를 새 버전의 인스턴스로 읽어들이기 싫다면

버전 번호를 달리하라 !

 


* 33. 텍스트 포맷(csv)으로 입출력 하기

 

 

 

 

* 34. Refactoring : ① Information Expert

 

 

기존 App.java 클래스의 메소드

  private void saveBoard(String filename, List<Board> list) {
    try {
      FileOutputStream out0 = new FileOutputStream(filename);
      BufferedOutputStream out1 = new BufferedOutputStream(out0); // <== Decorator(장식품) 역할 수행!
      DataOutputStream out = new DataOutputStream(out1); // <== Decorator(장식품) 역할 수행!

      out.writeShort(list.size());

      for (Board board : list) {
        out.writeInt(board.getNo());
        out.writeUTF(board.getTitle());
        out.writeUTF(board.getContent());
        out.writeUTF(board.getWriter());
        out.writeUTF(board.getPassword());
        out.writeInt(board.getViewCount());
        out.writeLong(board.getCreatedDate());
      }

 

saveBoard 를 Information Expert 리팩토링 기법을 적용하여 

Board.java 클래스에 메소드로 만들어준다.

 

 

saveMember 를 Information Expert 리팩토링 기법을 적용하여

Member.java 클래스에 메소드로 만들어준다.

 


List <member>  X

member만 들어오기 때문에 saveCsv를 구현할 수 없다 !

 

List <board>  X

board만 들어오기 때문에 saveCsv를 구현할 수 없다 !

 

List<?>  X

① String 클래스는 CsvObject의 자손이 아니기 때문에 saveCsv를 구현할 수 없다 !

② String 클래스는 CsvObject의 인터페이스를 구현하지 않아서 saveCsv를 구현할 수 없다 !

 

List<? extends CsvObject>  O

CsvObject의 인터페이스를 구현한 클래스이어야 한다.

여기서, "?" 라는 와일드카드 뒤에 오는 것이 인터페이스든 클래스든

무조건 extends 로 확장해주어야한다.

 

 

<CsvObject 인터페이스>

 

<CsvObject 인터페이스를 상속받는 Member 와 Board>

 

 


<CsvObject 인터페이스 규칙에 따라서 실행하는 각 메소드>

 

<obj 객체에 담긴 Member 또는 Board 의 toCsvString 메소드를 실행>

 

 

 

* Factory Method 패턴 적용

 

 

<Member 클래스에 메서드를 추가>

 

<App 클래스에 메서드를 리팩토링>

 


② Factory Method (GOF)

 

 

 

 

반응형