Skip to the content.

- 학습 목표 달성 확인 목록

- [] FileReader/FileWriter 클래스의 사용법을 아는가?

FileWriter out = new FileWriter("temp/test2.txt");//해당 폴더에 해당 파일 작성

    String str = new String("AB");//입력할 데이터 입력

    out.write(str);//데이터 삽입

    out.close();//자원해제

    System.out.println("데이터 출력 완료!");
 FileReader in = new FileReader("temp/test2.txt");//읽어올 해당 파일

    // 데코레이터를 붙인다.
    // => 버퍼 기능 + 한 줄 읽기 기능
    BufferedReader in2 = new BufferedReader(in);

    System.out.println(in2.readLine());//한줄읽기

    in.close();

- [] CSV 파일 포맷을 이해하는가?

Comma-Seperated Values 의 약자로 몇가지 필드를 쉼표로 구분하는 텍스트 데이터 및 텍스트 파일이다.

확장자는 .csv이다.

- [] MIME 에 대해 설명할 수 있는가?

간단히 말하면 파일 변환을 뜻한다

이메일과 함께 동봉할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발되었기 때문에

이름에 MIME(Multi-purpose Internet Mail Extensions) Internet Mail Extensions이 들어갔다

그렇지만 현재는 웹을 통해서 여러형태의 파일 전달하는데 쓰인다.

- [] BufferedReader/BufferedWriter 데코레이터를 사용할 수 있는가?

FileReader를 기준으로 BufferedReader를 데코레이터로 사용하였다.

읽기,쓰기 속도를 높였다.

왜냐하면 한 공간에 쌓일때까지 담았다가 한번에 데이터를 전송하기 때문이다.

 FileReader in = new FileReader("temp/test2.txt");//읽어올 해당 파일

    // 데코레이터를 붙인다.
    // => 버퍼 기능 + 한 줄 읽기 기능
    BufferedReader in2 = new BufferedReader(in);

    System.out.println(in2.readLine());//한줄읽기

    in.close();

- [] GRASP의 Information Expert 패턴을 이해하는가?

역할을 수행할 수 있는 정보를 가지고 있는 객체에 역할을 부여한다

보통 데이터는 비공개로 감추고 메서드를 통해 데이터를 노출하는 방식을 취한다.

- [] GoF 의 Factory Method 패턴을 구현할 수 있는가?

CSV 형식의 문자열을 객체로 변환하는 것을 인터페이스를 이용해서 규칙으로 정의한다

이렇게 인터페이스로 규칙을 정의하면 CVS 문자열을 객체로 바꿀 때 일관성 있게 코딩할수 있으며

제네릭으로 인해 별도의 형변환을 하지 않아도 된다.

public interface ObjectFactory<T> {
  T create(String csvStr);
}
// 다음과 같이 인스턴스를 생성해주는 메서드를 
  // "factory method"라 부른다.
  // 팩토리 메서드 패턴
  // - 인스턴스 생성 과정이 복잡할 때 
  //   인스턴스 생성을 대신 해주는 메서드를 만들어
  //   그 메서드를 통해 객체를 생성하는 프로그래밍 방식이다.
  public static Board valueOfCsv(String csv) {
    String[] fields = csv.split(","); // 번호,제목,내용,작성자,등록일,조회수
    Board b = new Board();
    b.setNo(Integer.parseInt(fields[0]));
    b.setTitle(fields[1]);
    b.setContent(fields[2]);
    b.setWriter(fields[3]);
    b.setRegisteredDate(Date.valueOf(fields[4]));
    b.setViewCount(Integer.parseInt(fields[5]));
    return b;
  }

- [] 인터페이스의 용법을 아는가?

객체의 사용 규칙을 정의 하는 문법이다.

즉 객체에 대해 메서드 호출 규칙을 정의한다.

- [] *functional interface*를 아는가?

함수형 인터페이스호 1개의 추상 메소드를 갖고 있는 인터페이스를 말한다.

interface Factory {
    Object create();
  }

  static class Car {
  }

  public static void main(String[] args) {

    //1.로컬 클래스로 인터페이스 구현체를 만든다
    class CarFactory implements Factory {

      @Override
      public Object create() {//메서드 구현
        return new Car();
      }
    }

    //2.익명 클래스로 인터페이스 구현제를 만든다
    Factory f2 = new Factory() {//별도의 클래스 없이 인터페이스로 만들수 있다
      @Override
      public Object create() {
        return new Car();
      }
    };//세미콜론 잊지말것!

    //3.람다로 인터페이스 구현체를 만든다
    Factory f33 = () -> new Car();

    //4.기존에 존재하는 메서드로 인터페이스 구현체를 만든다
    Factory f4 = Exam0810::createCar;//메서드

    //5.기존 클래스의 생성자로 인터페이스 구현체를 만든다
    Factory f5 = Car::new;//Car클래스의 생성자
  }

  public static Car createCar() {
    return new Car();
  }

- [] 메서드 레퍼런스의 용법을 아는가?

상단 참조

- [] 클래스의 스태틱 메서드를 functional interface의 구현체로 사용할 수 있는가?

상단 참조

- [] 클래스의 생성자를 메서드 functional interface의 구현체로 사용할 수 있는가?

상단 참조

- [] 제네릭 문법을 활용할 수 있는가?

static <T> void loadObjects(File file, List<T> list, ObjectFactory<T> objFactory)

T에는 여러가지의 객체를 넣을수 있으며

T자리에 String과 같이 따로 선언을 하면 해당 객체만 데이터를 다룰수 있어

컴파일때 필터링하지 못하는것을 잡아낼수있다.