TIL 23.08.10

ν™©μ€ν•˜Β·2023λ…„ 8μ›” 10일
0

TIL

λͺ©λ‘ 보기
58/146

πŸ“ŒToday I Learned

Java μˆ˜μ—… (73~74)

Ex73_Lambda

λžŒλ‹€μ‹

-> 읡λͺ… 객체의 (κ΅¬ν˜„λœ) 좔상 λ©”μ†Œλ“œ -> μΈν„°νŽ˜μ΄μŠ€ λ³€μˆ˜μ— μ €μž₯ -> λžŒλ‹€μ‹μ€ λ°˜λ“œμ‹œ μΈν„°νŽ˜μ΄μŠ€κ°€ ν•„μš”ν•˜λ‹€.

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€, Functional Interface

  • λžŒλ‹€μ‹μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•œ 자격
  • λ‹€λ₯Έ μš©λ„λ‘œ μ‚¬μš© μ•ˆν•¨
  • 좔상 λ©”μ†Œλ“œλ₯Ό λ”± 1개 κ°€μ§ˆ 수 μžˆλ‹€. κ·Έ λ©”μ†Œλ“œκ°€ λžŒλ‹€μ‹μ΄ λœλ‹€.
  • ν‘œμ€€ API ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ > JDK 제곡
  • μ‚¬μš©μž μ •μ˜ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ > 개발자 μ„ μ–Έ

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μž„μ„ μ•Œλ¦¬κΈ° μœ„ν•΄ μ–΄λ…Έν…Œμ΄μ…˜μ„ 뢙일 수 μžˆλ‹€.
ν•„μˆ˜λŠ” μ•„λ‹ˆμ§€λ§Œ 뢙이면 μ’‹λ‹€.

@FunctionalInterface // μ•ˆμ „μž₯치. ν•„μˆ˜λŠ” μ•„λ‹ˆμ§€λ§Œ λΆ™μ΄λŠ”κ²Œ μ’‹λ‹€.
interface Test {
	void aaa();
}

μΈν„°νŽ˜μ΄μŠ€ 멀버

  • 좔상 멀버
  • finalμ΄λ‚˜ static, defaultλ₯Ό 뢙이면 μΈν„°νŽ˜μ΄μŠ€ λ‚΄μ—μ„œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

ν‘œμ€€ API ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€

  • λžŒλ‹€ κ°μ²΄λ“€μ˜ μ—°μ‚°μž μ—­ν• 
  1. Consumer
  • λ§€κ°œλ³€μˆ˜λ₯Ό λ°›μ•„μ„œ μ†ŒλΉ„ν•˜λŠ” 업무λ₯Ό κ΅¬ν˜„ν•œλ‹€.

  • λ§€κ°œλ³€μˆ˜ O, λ°˜ν™˜κ°’ X -> 좔상 λ©”μ†Œλ“œ

  • acceptXXX() 좔상 λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

  • Consumer

  • BiConsumer

  • IntConsumer

  • ..

Consumer<Integer> c1 = num -> System.out.println(num * num);
c1.accept(5);  

2. Supplier - λ§€κ°œλ³€μˆ˜ 없이 λ°˜ν™˜κ°’μ„ λŒλ €μ£ΌλŠ” 업무λ₯Ό κ΅¬ν˜„ν•œλ‹€. - λ§€κ°œλ³€μˆ˜ X, λ°˜ν™˜κ°’ O - getXXX() 좔상 λ©”μ†Œλ“œ 제곡
  • Supplier
  • ..
Supplier<Integer> s1 = () -> 100; // return 100;
System.out.println(s1.get());

3. Function - λ§€κ°œλ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜λ©΄ 처리 ν›„, λ°˜ν™˜κ°’μ„ λŒλ €μ£ΌλŠ” 업무λ₯Ό κ΅¬ν˜„ν•œλ‹€. - λ§€κ°œλ³€μˆ˜ O, λ°˜ν™˜κ°’ O - applyXXX() 좔상 λ©”μ†Œλ“œ 제곡 - Function - BiFunction
Function<Integer, Boolean> f1 = num -> num > 0;
System.out.println(f1.apply(10));

  1. Operator
  • λ§€κ°œλ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜λ©΄ 처리 ν›„, λ°˜ν™˜κ°’μ„ λŒλ €μ£ΌλŠ” 업무λ₯Ό κ΅¬ν˜„ν•œλ‹€.

  • λ§€κ°œλ³€μˆ˜ O, λ°˜ν™˜κ°’ O

  • applyXXX() 좔상 λ©”μ†Œλ“œ 제곡

  • Function의 ν•˜μœ„μ…‹

  • λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜κ°’μ˜ νƒ€μž…μ΄ κ°™λ‹€.

  • BinaryOperator

  • Function의 ν•˜μœ„μ…‹ (μž‘μ€ κΈ°λŠ₯ νŠΉν™” 버전)

BinaryOperator<Integer> bo1 = (a, b) -> a + b;
System.out.println(bo1.apply(10, 20));

  1. Predicate
  • λ§€κ°œλ³€μˆ˜λ₯Ό μ „λ‹¬ν•˜λ©΄ 처리 ν›„, λ°˜ν™˜κ°’μ„ λŒλ €μ£ΌλŠ” 업무λ₯Ό κ΅¬ν˜„
  • λ§€κ°œλ³€μˆ˜ O, λ°˜ν™˜κ°’ O
  • testXXX() 좔상 λ©”μ†Œλ“œ 제곡
  • Function의 ν•˜μœ„μ…‹
  • λ§€κ°œλ³€μˆ˜λ₯Ό 전달받아 boolean을 λ°˜ν™˜ν•œλ‹€.
  • Predicate
  • Function의 ν•˜μœ„μ…‹
  • ..
Predicate<Integer> p1 = num -> num > 0;
System.out.println(p1.test(10));  

Ex74_Stream

μžλ°” 슀트림

  1. μž…μΆœλ ₯ 슀트림
  • 파일 μž…μΆœλ ₯, μ½˜μ†” μž…μΆœλ ₯, λ„€νŠΈμ›Œν¬ μž…μΆœλ ₯..
  1. 슀트림
  • Java 8(JDK 1.8)
  • λžŒλ‹€μ‹ + ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€
  • λ°°μ—΄(μ»¬λ ‰μ…˜)의 탐색(μ‘°μž‘) 지원
  • 파일 μž…μΆœλ ₯ 지원
  • 디렉토리 탐색 지원

λ°°μ—΄, μ»¬λ ‰μ…˜ 탐색
1. forλ¬Έ(λ£¨ν”„λ³€μˆ˜)
2. ν–₯μƒλœ forλ¬Έ
3. Iterator
4. 슀트림

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€
1. Consumer

  • (λ§€κ°œλ³€μˆ˜) -> {κ΅¬ν˜„λΆ€}
  1. Supplier
  • () -> {return κ°’}
  1. Function
  • (λ§€κ°œλ³€μˆ˜) -> {return κ°’}
  1. Operator
  • (λ§€κ°œλ³€μˆ˜) -> {return κ°’}
  • λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜κ°’μ˜ μžλ£Œν˜•μ΄ 동일
  1. Predicate
  • (λ§€κ°œλ³€μˆ˜) -> {return κ°’}
  • λ°˜ν™˜κ°’μ΄ boolean

슀트림

  • 데이터 μ†ŒμŠ€λ‘œλΆ€ν„° 탐색/μ‘°μž‘ κ°€λŠ₯ν•œ 도ꡬ
  • list.stream().forEach()

νŒŒμ΄ν”„, pipe

  • 슀트림 객체 λ©”μ†Œλ“œ
  1. 쀑간 νŒŒμ΄ν”„
  • λ°˜ν™˜κ°’ O + 슀트림 λ°˜ν™˜
  1. μ΅œμ’… νŒŒμ΄ν”„
  • λ°˜ν™˜κ°’ X + void
  • λ°˜ν™˜κ°’ O + λ‹€λ₯Έ μžλ£Œν˜•

μš”μ†Œ 처리

  • forEach()
  • μ΅œμ’… νŒŒμ΄ν”„

필터링

  • filter()
  • 쀑간 νŒŒμ΄ν”„

ν”„λ‘œμ νŠΈ 주제 μ„ μ •

profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€