BE Study

[BE Study] Day 3 - 익명 클래스/ 람다/ 스트림 API

고고잉93 2024. 2. 23. 21:31
728x90

◈ BE스터디 3일차 과제

 

JdbcTemplate을 이용해 SQL을 MySQL로 날릴수 있다.

 

익명 클래스

  - 프로그램에서 일시적으로 한번만 사용되고 버려지는 객체. → 재사용이 되지 않음(일회성)

// 익명 클래스를 사용한 ActionListener의 구현
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Button clicked");
    }
});

// 같은 ActionListener를 다시 사용하려고 하면 불가능
button2.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Another button clicked");
    }
});

 

람다( 람다식은 왜 등장했을까)

 - 람다 사용시 불필요한 반목문의 삭제가 가능 + 복잡식을 단순하게 표현이 가능

 - 멀티 쓰레드를 활용한 병렬처리 가능

 - 대신, 과도하게 사용시 가독성 ↓

// 익명 클래스를 사용한 Runnable 인터페이스의 구현
Runnable runnable1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Thread is running");
    }
};

// 람다 표현식을 사용한 Runnable 인터페이스의 구현
Runnable runnable2 = () -> System.out.println("Thread is running");

 

 

@FunctionalInterface

@FunctionalInterface
interface MyFunctionalInterface {
    void myMethod(); // 추상 메서드

    // 다른 메서드 추가(2개 이상)하면 컴파일 오류 발생
    // void anotherMethod();
}

public class Main {
    public static void main(String[] args) {
        // 람다 표현식을 사용하여 함수형 인터페이스의 인스턴스 생성
        MyFunctionalInterface myFunction = () -> System.out.println("Hello, World!");

        // 함수형 인터페이스의 추상 메서드 호출
        myFunction.myMethod();
    }
}

 

함수형 프로그래밍이란?

컴퓨터 프로그램을 수학적인 함수로 간주하고, 상태 변경 및 가변데이터를 피하려는 프로그래밍

  1. 일급 함수 (First-class functions): 함수를 변수에 할당하고, 함수의 인자로 다른 함수를 전달하고, 함수를 다른 함수의 반환값으로 사용할 수 있습니다.
  2. 불변성 (Immutability): 데이터의 불변성을 강조하며, 한 번 생성된 데이터를 변경할 수 없도록 합니다. 변경 대신 새로운 데이터를 생성하고 반환합니다.
  3. 순수 함수 (Pure functions): 부작용이 없는 함수를 작성하여 같은 입력에 대해 항상 같은 출력을 반환하도록 합니다. 이로써 예측 가능하고 테스트하기 쉬운 코드를 작성할 수 있습니다.
  4. 선언형 프로그래밍 (Declarative programming): 코드가 어떻게 수행되는지보다 무엇을 수행해야 하는지를 강조합니다. 명령형 프로그래밍의 상태 변경 대신 함수 호출과 표현식을 사용합니다.
  5. 재귀 (Recursion): 반복문 대신 재귀를 사용하여 작업을 수행합니다.
  6. 필터링과 맵핑 (Filtering and Mapping): 컬렉션을 다룰 때 필터링과 맵핑을 통해 데이터를 변환하거나 추출합니다.
  7. 고차 함수 (Higher-order functions): 함수를 다루는 함수를 작성하거나, 함수를 반환하거나, 함수를 인자로 받는 함수를 작성할 수 있습니다.
  8. 람다 표현식 (Lambda expressions): 익명 함수를 간결하게 표현할 수 있는 람다 표현식을 지원합니다.

 

스트림API

java에서는 JDK8부터 Stream API 와 함수형 인터페이스를 지원하게 되었다.

Stream API는 원본의 데이터를 유지하고, 일회성이며, 내부에 반복 문법 메서드를 가지고 있어 for , while의 사용을 감소시켜 간결한 코드의 작성을 가능하게 한다.

// Stream 사용 전
String[] nameArr = {"IronMan", "Captain", "Hulk", "Thor"}
List<String> nameList = Arrays.asList(nameArr);

// 원본의 데이터가 직접 정렬됨
Arrays.sort(nameArr);
Collections.sort(nameList);

for (String str: nameArr) {
  System.out.println(str);
}

for (String str : nameList) {
  System.out.println(str);
}

====================================================================================

// Stream 사용 후
String[] nameArr = {"IronMan", "Captain", "Hulk", "Thor"}
List<String> nameList = Arrays.asList(nameArr);

// 원본의 데이터가 아닌 별도의 Stream을 생성함
Stream<String> nameStream = nameList.stream();
Stream<String> arrayStream = Arrays.stream(nameArr);

// 복사된 데이터를 정렬하여 출력함
nameStream.sorted().forEach(System.out::println); //메소드 참조(Method Reference )
arrayStream.sorted().forEach(System.out::println);

 

출처: https://mangkyu.tistory.com/112

 

 

 

 

 

 

728x90