코드스테이츠 Day18
- 애너테이션(Annotation)
- 컴파일러나 프로그램에 정보 전달하는 주석
- 애너테이션은 java.lang.annotation 인터페이스를 구현/상속. only 단일 상속
- 표준 애너테이션 : 자바 기본 제공.
@Override @Deprecated @FunctionalInterface @SuppressWarning 등
- 메타 애너테이션 : 애너테이션에 붙이는 애너테이션. 애너테이션 정의
@Target @Documented @Inherited @Retention @Repeatable 등
- 사용자지정 애너테이션
- 람다(Lambda)
- 코드를 간단하게 쓰는 문법 요소.
- 함수형 프로그래밍 기법을 지원.
- 반환타입, 메서드명, return, 중괄호, 세미콜론, 매개변수 타입 등 상황에 따라 생략 가능.
- 람다식은 익명 클래스(객체 선언과 생성을 동시에 하는 일회용 클래스)의 객체.
- 객체이므로 람다식은 단독으로 못 쓰이고, 무조건 이에 필요한 인터페이스가 있어야하는데, 바로 함수형 인터페이스(Functional Interface)다.
- 함수형 인터페이스는 단 하나의 추상 메서드가 있어, 람다식과 일대일 매칭.
- 함수형 인터페이스명 + 변수명 = () -> {};
- 람다식 쓸 때마다 추상 메서드가 있는 함수형 인터페이스를 매번 만들 수는 없으므로, 자바에서 기본 제공하는 것 사용.
https://codechacha.com/ko/java8-functional-interface/
- 메서드 레퍼런스 : 메서드 간단하게 쓰는 법. 매개변수 생략.
- 정적 메서드의 경우, 클래스이름::메서드이름
- 인스턴스 메서드의 경우, 참조변수명 :: 메서드명
- 생성자 참조, 클래스 :: new
- 스트림(Stream)
- 데이터 요소를 순회하며 연산 메서드를 람다식으로 처리하는 반복자
- Read-only & 일회용.
- 데이터의 내부 반복자를 사용하며, 함수 선언을 통해 내부 동작 원리를 숨김.
- 오리지널 스트림(스트림 생성) : Arrays.asList, Arrays.stream, Stream.of
- 중간 연산 스트림(여러 번 OK)
- 최종 연산 스트림(한 번) : 연산 결과가 스트림이 아님.
- Optional
- 모든 타입의 객체를 담을 수 있는 래퍼(Wrapper) 클래스
- Optional.ofNullable(), Optional.of()로 객체 생성.
- NullPointerException(NPE) 방지.
- 연산 결과를 Optional에 담아서 반환하면, NPE가 발생 x
- 파일 입출력(I/O)
- FileInputStream(바이트) -- + 인코딩/유니코드 변환 기능--> FileReader(문자)
- BufferedInputStream(바이트), BufferedReader(문자) : 성능 향상을 위한 보조 스트림. 한 번에 많은 양의 데이터 입출력을 위한 임시 저장 공간.
- FileOutputStream(바이트) -- + 인코딩/유니코드 변환 기능--> FileWriter(문자)
- File 클래스로 파일 및 디렉토리에 접근 가능.
<느낀 점>
오늘 완전히 말하는 감자였다,,
학습 자료랑 줌 미팅 설명 모두 할말하않,,
인터페이스 구현때문에 람다식이 파이썬보다 훨씬 복잡하다. 간단하자고 쓰는 거잖아,, 왜 이래.
내일 문제 풀어보면 조금 감 잡으려나 싶다.
