
오늘은 강사님이 그동안 배운걸 토대로 과제를 내주셨다.
스터디든 강의든 이렇게 여러명이서 한 분야를 배울때마다 느끼지만
늘 나보다 잘하는 사람은 참 많고 나는 그 속도를 따라가기가 쉽지 않다.
당연히 그럴때일수록 기죽지 말고 배워야 한다고 하지만
늘 나보다 잘하는 사람들 앞에서 '나는 이정도야', '나는 그런건 잘 몰라' 하는 내 모습을 보이는건
많이 힘들다.
MyGeneric.test1(”Hello”); → . 뒤에 이 생략된 것Optional
- 실무에서 많이 사용하기 때문에 중요!
- NPE을 막아준다
// () -> {}
// () -> ....
// () => {}
//lambda의 원리
//인터페이스에 있는 메서드를 lambda식 안에 적어서 구현
public static void main(String[] args) {
// 익명 클래스로 Consumer 구현
Consumer<String> consumer1 = new Consumer<>() {
@Override
public void accept(String o) {
System.out.println("o = " + o);
}
};
//(매개변수) -> {메서드}
// 메서드가 하나인 경우에만 lambda가 가능
// 타입 지정은 필요 없음 왜냐하면 인터페이스에 타입을 지정해놨기 떄문에
consumer1.accept("Hello!");
// 람다 표현식으로 Consumer 구현
Consumer<String> consumer2 = (String s) -> {
System.out.println("o = " + s);
};
consumer2.accept("Hello!");
}
Lambda식을 줄여서 표현하는 방법
// 람다 표현식 사용
Consumer<String> consumer2 = (String s) -> {
System.out.println("s = " + s);
};
consumer2.accept("c2");
if (true) {
System.out.println("");
}
// 람다 표현식 축약형 (중괄호 없이 한 줄로)
Consumer<String> consumer3 = (String s) -> System.out.println("s = " + s);
consumer3.accept("c3");
// 매개변수 타입 생략 가능 (타입 추론)
Consumer<String> consumer4 = s -> System.out.println("s = " + s);
consumer4.accept("c4");
}
Consumer<String> lv1 = s -> System.out.println("Hello, " + s);
Consumer<String> lv2 = lv1.andThen(s -> System.out.println("반가워! " + s));
→ andThen을 사용하면 연속적으로 호출할 수 있음
Consumer
Consumer 인터페이스는 매개변수를 하나 받고, 반환 값은 없다.(void 반환). 주로 매개변수로 전달된 객체를 소비하는 데 사용
Consumer<String> consumer = x -> System.out.println(x);
consumer.accept("Hello, Consumer!");
Supplier
Supplier 인터페이스는 매개변수가 없고, 반환 값이 있다. 호출될 때마다 특정 타입의 결과를 반환하는 데 사용 되며, 객체의 생성, 또는 공급에 주로 사용.
Supplier<Double> randomValue = () -> Math.random();
System.out.println(randomValue.get());
Funtion
Function 인터페이스는 하나의 매개변수를 받고, 결과를 반환다. 주로 입력을 출력으로 매핑하는 변환 작업에 사용
Function<String, Integer> func = x -> x.length();
int length = func.apply("Hello, Function!");
System.out.println(length);
Operator
Operator 인터페이스는 Function 인터페이스의 특수한 형태로, 입력과 출력이 같은 타입일 때 사용
BinaryOperator<Integer> operator = (a, b) -> a + b;
int result = operator.apply(5, 3);
System.out.println(result);
UnaryOperator<Integer> square = x -> x * x;
System.out.println(square.apply(5));