데브코스 8일차 TIL

Heesu Song·2025년 3월 18일

데브코스 - 백엔드

목록 보기
5/32
post-thumbnail

오늘은 강사님이 그동안 배운걸 토대로 과제를 내주셨다.
스터디든 강의든 이렇게 여러명이서 한 분야를 배울때마다 느끼지만
늘 나보다 잘하는 사람은 참 많고 나는 그 속도를 따라가기가 쉽지 않다.
당연히 그럴때일수록 기죽지 말고 배워야 한다고 하지만
늘 나보다 잘하는 사람들 앞에서 '나는 이정도야', '나는 그런건 잘 몰라' 하는 내 모습을 보이는건
많이 힘들다.

JAVA

제네릭

  • 실제로 사용하는 시점으로 타입 확정을 미루기 때문에 클래스와 메서드에서는 사용이 가능
    • static 필드는 클래스 로딩 시점에 결정됨
    • static 메서드는 실행될 때 타입을 결정 가능
  • MyGeneric.test1(”Hello”); → . 뒤에 이 생략된 것

Optional

  • 실무에서 많이 사용하기 때문에 중요!
  • NPE을 막아준다

Lambda

https://cbjh-4.tistory.com/79

  • 함수형 인터페이스
  • 주요하게 사용되는 내장 함수형 인터페이스에는 Consumer, Supplier, Function, Operator가 있다
// () -> {}
    // () -> ....
    // () => {}

    //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을 사용하면 연속적으로 호출할 수 있음

  • UUID → 우주에서 유일한 값

Consumer

Consumer 인터페이스는 매개변수를 하나 받고, 반환 값은 없다.(void 반환). 주로 매개변수로 전달된 객체를 소비하는 데 사용

  • 기본 메서드: void accept(T t)
Consumer<String> consumer = x -> System.out.println(x);
consumer.accept("Hello, Consumer!");

Supplier

Supplier 인터페이스는 매개변수가 없고, 반환 값이 있다. 호출될 때마다 특정 타입의 결과를 반환하는 데 사용 되며, 객체의 생성, 또는 공급에 주로 사용.

  • 기본 메서드: T get()
Supplier<Double> randomValue = () -> Math.random();
System.out.println(randomValue.get());

Funtion

Function 인터페이스는 하나의 매개변수를 받고, 결과를 반환다. 주로 입력을 출력으로 매핑하는 변환 작업에 사용

  • 기본 메서드: R apply(T t)
Function<String, Integer> func = x -> x.length();
int length = func.apply("Hello, Function!");
System.out.println(length);

Operator

Operator 인터페이스는 Function 인터페이스의 특수한 형태로, 입력과 출력이 같은 타입일 때 사용

  • BinaryOperator: 두 개의 매개변수를 받아 동일한 타입의 결과를 반환
    • 기본 메서드: T apply(T t1, T t2)
BinaryOperator<Integer> operator = (a, b) -> a + b;
int result = operator.apply(5, 3);
System.out.println(result);
  • UnaryOperator: 한 개의 매개변수를 받아 동일한 타입의 결과를 반환
    • 기본 메서드: T apply(T t)
UnaryOperator<Integer> square = x -> x * x;
System.out.println(square.apply(5));
profile
Abong_log

0개의 댓글