강의 정리_람다, Collections, 스트림, :: (메서드 참조)

김재현·2023년 11월 2일
0

TIL

목록 보기
21/88
post-thumbnail

오늘은 Spring 공부
공부/점심밥/공부/저녁밥/공부/간식/공부
내일도공부/그다음날도공부/매일공부

우선

람다: 익명함수

함수를 값으로 전달하는데, 어딘가에 구현하지 않고 그냥 간단하게 구현해서 넘기고 싶으면 람다식을 이용

// 주말의 주차장 추가
ArrayList<Car> weekendParkingLot = new ArrayList<>();

weekendParkingLot
.addAll(parkCars(carsWantToPark, (Car car) -> car.hasParkingTicket() && car.getParkingMoney() > 1000));


// 기본적으로 문법은 다음과 같습니다.
(파라미터 값, ...) -> { 함수 몸체 }

// 아래의 함수 두개는 같은 함수입니다.
// 이름 반환타입, return문 여부에 따라 {}까지도 생략이 가능합니다.
public int toLambdaMethod(int x, int y) {
	return x + y;
}

(x, y) -> x + y

// 이런 함수도 가능하겠죠?
public int toLambdaMethod2() {
	return 100;
}

() -> 100

// 모든 유형의 함수에 가능합니다.
public void toLambdaMethod3() {
	System.out.println("Hello World");
}

() -> System.out.println("Hello World")

Collections

Collections는 Java의 유틸리티 클래스 중 하나로, 자바 컬렉션 프레임워크에 관련된 메서드를 제공합니다. 이 클래스는 다양한 정적 메서드(static methods)를 포함하며, 컬렉션 데이터 구조(예: 리스트, 집합, 맵)를 조작하고 정렬하거나 다양한 컬렉션 관련 작업을 수행하는 데 사용됩니다.

이런건 사용 예시를 외우며 익히는게 좋을듯.

Collections.max(memoList.keySet())는 memoList라는 맵(Map)의 키 집합(Set)에서 가장 큰 키 값을 찾는 역할


스트림

한번 더 추상화된 자료구조와 자주 사용하는 프로그래밍 API를 제공한 것

자료구조의 “흐름”을 객체로 제공해주고, 그 흐름동안 사용할 수 있는 메서드들을 api로 제공해주고 있는 것. 일단은 “자료구조” (리스트, 맵, 셋 등)의 흐름이라고 비유하면 이해가 조금 더 쉬울 것 같습니다.

  • forEach()
List<String> carNames = Arrays.asList("Series 6", "A9", "Ionic 6");

carNames.stream()
    .forEach(System.out::println);

// 결과 
// Series 6
// A9
// Ionic 6

•각각의 원소에 넘겨받은 함수를 실행해줍니다.
하지만 넘겨받은 반환값을 가지고 뭘 하지는 않으며, 있다고 해도 무시됩니다.

  • map()
carNames.stream()
	.map(name -> name.toUpperCase()).toList();

// 결과
// ["SERIES 6", "A9", "IONIC 6"]

forEach와는 반대로 넘겨받은 토대로 값을 변환시키는데 주로 사용됩니다.


:: (메서드 참조)

::는 Java 및 다른 프로그래밍 언어에서 메서드 참조(operator) 또는 메서드 레퍼런스로 알려진 특수한 연산자입니다. 메서드 참조는 메서드를 가리키거나 참조하는 데 사용되며, 주로 람다 표현식과 함께 사용됩니다. 메서드 참조를 사용하면 기존 메서드를 다른 코드 블록에서 간단하게 재사용할 수 있습니다.

메서드 참조의 주요 사용 사례는 다음과 같습니다:

  1. 정적 메서드 참조(Static Method Reference): 정적 메서드를 참조합니다. 예를 들어, ClassName::staticMethodName와 같은 형식입니다.
// 예: Math 클래스의 정적 메서드 max를 참조
BinaryOperator<Integer> maxFunction = Math::max;
int result=maxFunction.apply(10, 20); // 결과: 20
  1. 인스턴스 메서드 참조(Instance Method Reference): 객체의 인스턴스 메서드를 참조합니다. 예를 들어, object::instanceMethodName와 같은 형식입니다.
// 예: 문자열의 길이를 가져오는 메서드를 참조
Function<String, Integer> lengthFunction = String::length;
int length=lengthFunction.apply("Hello"); // 결과: 5
  1. 생성자 참조(Constructor Reference): 생성자를 참조하여 새로운 객체를 생성합니다. 예를 들어, ClassName::new와 같은 형식입니다.
// 예: 문자열 생성자를 참조하여 새로운 문자열을 만듦
Supplier<String> stringSupplier = String::new; 
String new String=stringSupplier.get();

메서드 참조를 사용하면 람다 표현식을 간결하게 만들고 코드의 가독성을 향상시킬 수 있습니다. 또한, 메서드 참조는 함수형 프로그래밍 스타일에서 유용하게 사용되며, 코드를 간결하고 모듈화된 방식으로 작성하는 데 도움을 줍니다.


강의 정리는 인텔리제이 주석과 내 원노트에 있다 하하하
이것까지 옮기진 못하겠다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글