-
[Java] 제네릭,enum, java8Backend/자바 2021. 8. 22. 21:22반응형
TCP SCHOOL 글을 참고하였다.
Enum 클래스
열거체(enumeration type)
- 실제 값 뿐 아니라 타입 체크
- 열거체의 상숫값이 재정의되더라도 다시 컴파일할 필요가 없다.
enum Rainbow { RED(1, "hello"), ORANGE(2,""), YELLOW(3,""); private final int value; private final String message; Rainbow(int value, String message ) { this.value = value; this.message = message; } public int getValue(){ return value; } }
열거체에 필드를 추가할 수 있고, 추가할 때는 생성자가 필요하다 (private)
제네릭 (Generic)
제네릭이란 데이터타입을 일반화한다는 것을 의미한다.
Object는 원하는 타입으로 다시 변환해야하지만, 제네릭은 컴파일 시 타입이 정해지므로 타입 검사나 변환 같은 작업을 생략할 수 있다.
제네릭 메소드
메소드 선언부에 타입 변수를 사용한 메소드를 의미한다.
타입 변수의 선언은 메소드 선언부에서 반환 타입 바로 앞에 위치한다.
public static<T> void sort(..){..}
람다 표현식 (lambda expression)
메소드를 하나의 식으로 표현한 것
자바에서 클래스의 선언과 동시에 객체를 생성하는, 그러므로 단 하나의 객체만을 생성할 수 있는 클래스를 익명 클래스 라고 한다.
따라서 자바에서 람다 표현식은 익명 클래스와 같다고 할 수 있다.
함수형 인터페이스 (functional interface)
람다 표현식을 사용할 때 람다 표현식을 저장하기 위한 참조변수의 타입을 결정해야한다.
<참조변수 타입> <참조변수 이름> = 람다표현식
람다 표현식을 하나의 변수에 대입할 때 사용하는 참조변수의 타입을 함수형 인터페이스 라고 부른다.
함수형 인터페이스는 추상 클래스와는 달리 단 하나의 추상 메소드만을 가져야한다. 또한
@FunctionalInteface
를 사용하여 함수형 인터페이스임을 명시할 수 있다. 이렇게 명시된 함수형 인터페이스에 두 개 이상의 메소드가 선언되면 오류를 발생시킨다.@Test void calcTest(){ Calc minNum = (x,y) -> x<y? x: y; System.out.println(minNum.min(3,6)); }
이렇게 람다 표현식을 만들었을 때
Calc
가 함수형 인터페이스가 된다.이를 만들어 보면
@FunctionalInterface public interface Calc { public int min(int x, int y); }
min
함수 하나만 가지는 함수형 인터페이스이다.자바는 java.util.function 패키지를 통하여 여러 상황에서 사용할 수 있는 다양한 함수형 인터페이스를 미리 정의하여 제공했다.
- Consumer :
accept
- parameter (O)
- return (X)
- Supplier :
get
- parameter (X)
- return (O)
- Function :
apply
- parameter -> return
- Predicate :
test
- parameter - > return boolean
메소드 참조 (method reference)
람다 표현식이 단 하나의 메소드만을 호출하는 경우 해당 람다 표현식에서 불필요한 매개변수를 제거하고 사용할 수 있도록 해준다.
메소드 참조를 사용하면 불필요한 매개변수를 제거하고
::
기호를 사용하여 표현할 수 있다.클래스이름::메소드이름 참조변수이름::메소드이름 // 예 Function<String, Boolean> func = (a) -> obj.equals(a); // 람다 표현식 Function<String, Boolean> func = obj::equals(a); // 메소드 참조
생성자 참조
생성자를 호출하는 람다 표현식도 앞서 살펴본 메소드 참조를 이용할 수 있다.
단순히 객체를 생성하고 반환하는 람다 표현식은 참조로 변환할 수 있다.
// ex1 (a) -> { return new Object(a);} Object::new; // ex2 a-> new double[a]; double[]::new;
참고 링크
- TCPSCHOOL 제네릭,Enum,람다,메소드참조,스트림
함수형 프로그래밍
참고 링크
jogeum - 자바로 함수형 인터페이스 사용하기
tistory [박스여우 - BoxFox] - https://boxfoxs.tistory.com/430
'Backend > 자바' 카테고리의 다른 글
[Java] 자바 기본 개념 (0) 2020.11.27