느리더라도 꾸준히

회고록(15) - 애노테이션, 람다, 스트림, I/O 본문

(CodeStates)Daily memoir

회고록(15) - 애노테이션, 람다, 스트림, I/O

테디규 2022. 11. 15. 01:20

1. 지금 현재, 당신의 기분이나 느낌을 표현해 주세요.

학습이 끝난 후 8시부터 10시까지 잤다. 거기다 그 쌩썡함을 유튜브를 시청했다.

나란 존재 참 환경에 나약하다. 탓하기 보단 시스템을 바꾸려고 해보자. 내일 교육 세션이 끝나고 할일 이다.

  • 식후 절대로 침대에 눕지않고, 늦어도 7시 30분에 이어폰 꼽고 스카 가기
  • 최소 11시 까지는 유튜브엔 얼씬도 하지 않기
    • 유튜브는 목마른 우울의 감정을 없애주지 않는다.
    • 울적할땐, 나가서 노래듣고 런닝하고 걷자.

내가 할수 있는건 일단 위 두개 뿐이다. 그 이상 어렵게 생각하지말자.

2. 오늘 무엇을 학습한 내용 중 지금 떠올릴 수 있는 단어를 모두 나열해 주세요.

애노테이션, 표준/메타 애노테이션,

람다식, 익명 클래스(객체), 함수형 인터페이스, 메서드 래퍼런스(정적메서드, 인스턴스 메서드, 생성자 참조)

스트림, 리덕션, 스트림 파이프라인(.), 중간 연산, 최종연산, Optional<T>

FileInputStream, FileOutputStream, BufferInputStream, FileReader, FileWriter

3. 2에서 작성한 단어를 가지고, 오늘의 학습 내용을 설명해 보세요.

애노테이션

주석이 사용자에게 부가정보를 알린다면 애노테이션은 프로그램에게 정보를 알리기 위해 사용한다.

주요역할

  • 컴파일러에게 문법에러를 체크하도록 정보를 제공한다.(Override, FuntionalInterface)
  • 프로그램을 빌드할때 자동으로 코드를 생성해준다.(Lombok 등)
  • 런타임때 특정 기능을 실행하도록 정보를 제공한다.

표준 애노테이션과 표준 애노테이션을 관리하는 메타 애노테이션이 있다.

Lambda

람다식 탄생이유

  • Java는 익명 클래스를 선언하여 일회성으로 객체를 선언과 생성을 동시에 할수 있다.
  • 이를 좀 더 가독성있고 코드효율(반환 타입, 함수명 제거)을 위해 함수형프로그래밍으로 작성하는 람다식이 탄생하였다.

함수형 인터페이스

  • 객체구조에 맞게 람다식(익명클래스)을 사용하기 위해서는 추상메서드를 가진 인터페이스가 필요하여 탄생하였다.
  • 람다식의 매개변수와 리턴형은 함수형 인터페이스의 추상메서의 구조와 일치해야한다.(매개변수 개수, 타입 등)
  • Java에서 일반적으로 사용할수 있도록 기본적으로 제공하는 함수형 인터페이스가 존재한다.

매서드 참조방식(래퍼런스)

  • 람다식안에 메서드를 직접구현하는 것 대신 존재하는 메서드를 참조해서 넣을 수 있다.
    • (함수형 프로그래밍의 근본핵심인 함수의 다형성 개념이다.)
  • 정적 메서드 : 정적 메서드를 가진 Class::메서드() 로 참조 가능하다.
  • 인스턴스 메서드 : new 명령어로 생성한 인스턴스의 참조변수::메서드로 참조 가능하다.
  • 생성자 : 클래스::new 로 객체생성 명령을 참조할 수 있다.

Stream

스트림의 탄생이유 : 배열이나 컬렉션들의 요소를 반복자를 이용하여 제공하는 Stream을 사용하면 아래의 기능을 얻을 수 있다.

  • 재사용성, 가독성 ( 스프링 파이프라인을 활용하면 가독성이 좋다.)
  • 병렬 처리에 유리하다.
  • 람다식을 이용하여 요소처리를 더 쉽게 할 수 있다.

스트림의 특징

  1. 사람의 해석방식 처럼 메서드를 먼저 선언하고 함수를 적는 선언형으로 코드를 작성한다.
  2. 람다식으로 요소처리가 간편하다.
  3. 내부 반복자를 이용해 병렬 처리가 쉽다.
  4. 여러번 사용가능한 중간 연산과 단 한번 사용가능한 최종연산이 존재한다. 그러므로 한번 생성한 Stream은 1회성으로만 사용이 가능하다.

Option<T>

  • NullPointException을 피하기 위해 Null을 담을수 있는 래퍼클래스로써 고안되었다
  • orElse()를 통해서 null일때 기본값을 지정할 수 있다.

I/O

FileInputStream, FileOutputStream

  • 바이트 형식으로 데이터를 읽고, 출력한다.
  • 바이트 형식으로 가져오기 때문에 유니코드인 한국어는 읽어오지 못한다.

FileReader, FileWriter

  • 문자 형식을 인코딩해서 유니코드로 변환해 읽거나 유니코드를 변환해서 인코딩하여 출력한다.
  • 그러므로 여러 영어 외의 언어 사용이 가능하다.

BufferInputStream, BufferReader 등

  • 임시 저장소 Buffer에 값을 저장하여 처리하여 입출력의 효율을 높일수 있는 버퍼스트림이다.

4. 설명하기 어려운 단어가 있다면, 그 이유는 무엇인가요?

5. 그 단어를 스스로 설명할 수 있기 위해서 누군가에게 질문을 한다면, 어떤 질문을 해야 할까요?

Comments