오늘은 24일차이다. 날씨가 갑자기 추워져서 몸관리도 잘해야 겠다라는 생각이 든다. 자바 심화 과정 2일차인데 기본에서 배우고 공부한 것 보다 훨씬 내용이 어렵게 느껴져서 걱정이 들긴 한다. 이럴 때 일수록 긍정적으로 생각하면서 배워야겠다라는 생각이 든다. 일단은 배운 것을 반복하면서 무작정 이해하려고 생각하다기 보다는 키워드의 뜻만 외우고 나중에 실제 적용했을 때 떠올리는 것을 목표로 공부해야겠다.
오늘 배운 것
1. 인터페이스
-인터페이스를 사이로 앞, 뒤의 개발 코드가 서로 통신하는 접점. 앞, 뒤의 통신 규약 --> 동시 개발 가능
1-1. 상수만 가능 <-- 클래스 로드시점에서 초기화
1-2. 추상 메서드로 구현체에게 구현 강제
1-3. 기본 메서드 제공
-자바는 단일 상속, 인터페이스는 다중 구현이 가능하다.-->충돌나는 메서드시그니처는 오버라이딩을 강제한다.
-오버라이딩 가능.
-기본 public. 생략시 컴파일 과정에서 붙음.1-4. static 메서드
-헬퍼 또는 유틸리티 메서드를 제공할 때 사용
-static 블록 작성 불가.1-5. 다형성을 구현하는 기술
1-5-1. Promotion Memory 구조 보기
-상속 또는 인터페이스의 자동 타입 변환(Promotion)
-인터페이스 변수 = 구현객체; <-- 자동 타입 변환
-상위 인터페이스, 클래스, 추상 클래스로 Upcasting 가능
-모든 클래스는 extends Object가 생략되어있다.
-모든 클래스는 Object로 Upcasting 가능
1-5-2. Dynamic Dispatch 동작
-자바는 Promotion으로 Upcasting된 메서드를 런타임 시점에서 오버라이딩된 메서드에 대한 호출이 확인된다. --> Dynamic Method Dispatch --> 실시간 다형성2. 함수형 인터페이스와 람다 표현식
2-1. 함수형 인터페이스
-추상 메서드를 하나만 가지고있는 인터페이스
-@FunctionInterface 애노테이션을 인터페이스에 선언하면 컴파일 시점에서 추상메서드를 하나만 갖는지 체크해 준다.2-2. 람다 표현식(Lamda Expression)
-람다 표현식이란 간단히 말해 메서드를 하나의 식으로 표현한 것.
-프로그램 내에서 일시적으로(단발성으로) 한번만 사용
-재사용성이 없고, 확장성을 활용하는 것이 유지보수에서 더 불리할 때2-3. 메서드 레퍼런스
-ClassName::MethodName 형식으로 입력한다. 메서드를 호출하는 것이지만 괄호()는 써주지 않고 생략합니다.
-메서드 레퍼런스에는 많은 코드가 생략되어있기 때문에 사용하려는 메서드의 인자와 리턴 타입을 알고 있어야 한다.
-메서드 레퍼런스는 사용하는 패턴에 따라 분류할 수 있다.
-Static 메서드 레퍼런스, Instance 메서드 레퍼런스, Constructor 메서드 레퍼런스.3. 스트림
-배열이나 컬렉션에 담긴 데이터를 다룰 때, 반복문이나, iterator를 사용하면 코드가 길어지고, 가독성이 떨어진다. 이 문제를 해결하기위해 Stream API 등장
3-1 중개 연산자
필터링: filter, distinct
변환: map, flatMap
제한: limit, skip
정렬: sorted3-2 최종 연산
요소 출력: forEach
요소 검색: findFirst, findAny
요소 통계: count, min, max
요소 연산: sum, average
요소 수집: collect4. Optional
-NPE(Null Pointer Exception) 예외를 Optional이 제공하는 메서드로 간단하게 회피할 수 있다.
-잘못 사용하면 오히려 코드가 오히려 지저분해지고, 의미 없는 동작, Side-Effect 유발이 많이 발생할 수 있음.