반응형

출처 : 이것이 자바다

13.1 왜 제너릭을 사용해야 하는가 ?

java 5부터 제네릭(generic)타입이 새로 추가되었는데 , 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 되었다. 

제네릭은 클래스와 인터페이스, 그리고 메소드를 정의할 때 타입 을 파라미터로 사용할 수있도록 한다.

 

컴파일 시 강한 타입 체크를 할 수 있다.

 

타입 변환(casting)을 제거한다.

비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다.

 

13.2 제네릭 타입(class<T>, interface<T>)

제네릭 타입은 타입을 파라미터로 가지는 클래스의 인터페이스를 말한다.

<> 부호가 붙고  사이에 타입 파라미터가 위치한다.

Object 클래스는 모든 자바 클래스의 최상위 조상(부모)클래스이다.

 

13.3 멀티 타입 파라미터(class<K,V...>, interface<K,V,...>)

제네릭 타이은 두개 이상의 멀티 타입 파라미터를 사용할 수 있는데 , 이 경우 각 타입 파라미터를 콤마로 구분한다.

 

자바 7부터 제공

 

13.4 제네릭 메소드(<T,R> R mehod<T t>)

제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다.

compare()

 

13.5 제한된 타입 파라미터(<T extends 최상위 타입>)

Number

 

13.6 와일드 타입(<?>, <? extends ...>, <? super ...>)

제네릭타입<?> : Unbounded Wildcards(제한 없음)

타입 파라미터를 대치하는 구체적인 타입으로 모든 클래스, 인터페이스 타입이 올 수 있음.

제네릭타입<? extends 상위타입> : Upper Bounded Wildcards(상위 클래스 제한)

타입 파라미터를 대치하는 구체적  타입으로 상위타입이나 하위 타입만 올 수 있음.

제네릭타입<? super 하위 타입> : Lower Bounded Wildcards(하위 클래스 제한)

타입 파라미터를 대치하는 구체적 타입으로 하위 타입이나, 상위 타입만 올 수 있음.

 

 

 

14.1 람다식이란?

자바8부터 람다식 lambda expressions을 지원하면서 기존의 코드 패턴이 많이 달라졌다.

익명함수 anonymous function

람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체 

익명 구현 

Runnable runnable = new Runnable() {
    public void run() { ... }
} ;

람다식 

Runnable runnable = () -> { ... };

(매개변수) -> {실행코드}

 

14.2 람다식 기본 문법

(타입 매개변수, ...) -> {실행문; ... }

() -> {실행문 ; .... }

 

14.3 타겟 타입과 함수적 인터페이스

인터페이스 변수 = 람다식 

14.3.1 함수적 인터페이스@FunctionalInteface)

하나의 추상 메소드가 선언된 인터페이스만이 람다식의 타켓 타입이 될수 있는데 , 이러한 인터페이스를 함수적 인터페이스라고 한다.

14.3.2 매개변수와 리턴값이 없는 람다식

14.3.3 매개 변수가 있는 람다식

14.3.4 리턴값이 있는 람다식

 

14.4 클래스 멤버와 로컬 변수 사용

클래스의 멤버는 제약 사항 없이 사용가능하지만 ,로컬 변수는 제약 사향이 따른다.

14.4.1 클래스의 멤버 사용

this는 내부적으로 생성되는 익명 객체의 참조가 아니라 람다식을 실행한 객체의 참조이다.

14.4.2 로컬 변수 사용

final특성 

 

 

14.5 표준 api의 함수적 인터페이스

14.5.1 Consumer함수적 인터페이스

14.5.2 Supplier 함수적 인터페이스

14.5.3  Function 함수적 인터페이스

14.5.4 Operator함수적 인터페이스

14.5.5 Predicate함수적 인터페이스

14.5.6 andThen()과 compose()디폴드 메소드

andThen()과 compose() 차이점은 어떤 함수적 인터페이스부터 먼저 처리하느냐이다.

14.5.7 and(),or(), negate()디폴트 메소드와 isEqual()정적 메소드

14.5.8 minBy(),maxBy()정적 메소드

 

14.6 메소드 참조

메소드 참조 method References는 말 그대로 메소드를 참조해서 매개변수의 정보 및 리턴 타입을 알아내어 ,람다식에서 불필요한 매개 변수를 제거하는 것이 목적이다.

람다식은 종종 기존 메소드를 단순히 호출만 하는 경우가 많다.

14.6.1 정적 메소드와 인스턴스 메소드 참조

static

14.6.2 매개변수의 메소드 참조

14.6.3 생성자 참조

메소드 참조 (method references)는 생성자 참조도 포함한다. 

생성자를 참조한다는 것은 객체 생성을 의미한다.

 



 

13.3 멀티 타입 파라미터(class<K,V,...>, interface<K,V

,...>)

반응형

' > 이것이 자바다' 카테고리의 다른 글

16. 스프림과 병렬 처리  (0) 2020.10.17
15. 컬렉션 프레임워크  (0) 2020.10.13
12. 멀티 스레드  (0) 2020.10.03
11. 기본 API 클래스  (0) 2020.10.02
10. 예외처리  (0) 2020.10.01

+ Recent posts