λ°˜μ‘ν˜•

λžŒλ‹€

μ„€λͺ…

읡λͺ…ν•¨μˆ˜λ‹€. 읡λͺ…ν•¨μˆ˜ 즉, μ½”λ“œ λΈ”λŸ­μ΄λ‹€.
μ½”λ“œ λΈ”λŸ­μ€ λ©”μ†Œλ“œ 내에 μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€!

β€» 읡λͺ…ν•¨μˆ˜

μž¬μ‚¬μš© κ°€λŠ₯ν•œ κΈ°λŠ₯의 일뢀뢄을 μ „λ‹¬ν•˜κ³  μ‹Άμ„λ•Œ μ‚¬μš©ν•˜λŠ”κ²ƒ.
ν•¨μˆ˜λ“€μ— ν•¨μˆ˜λ₯Ό 인자둜 μ „λ‹¬ν•˜λŠ” 경우 (콜백?)

 

μ½”λ“œμ˜ˆμ‹œ
//κΈ°λ³Έ 문법 
(args) -> {
	//블라블라
}
/* 
ASIS: λžŒλ‹€λŠ” νƒ€μž… μ§€μ‹œμž(Integer)λ₯Ό μƒλž΅ν•  수 μžˆλ‹€ 

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€κ°€ νƒ€μž…μ„ μ„€λͺ…ν•˜κ³  μžˆμ–΄, 
μ»΄νŒŒμΌλŸ¬κ°€ ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό μ œκ³΅ν•΄μ€„ 수 있기 λ•Œλ¬Έμ΄λ‹€.
*/
(Intefer x) -> x + 1; 

// TOBE: μ΄λ ‡κ²Œ!
(x) -> x + 1 


//ASIS: λ§€κ°œλ³€μˆ˜ ν•˜λ‚˜μΈ μΈν„°νŽ˜μ΄μŠ€ λ©”μ†Œλ“œ 을
(x) -> x + 1 

// TOBE: μ΄λ ‡κ²Œ ν‘œν˜„ κ°€λŠ₯
x -> x + 1
// ASIS: 읡λͺ…ν΄λž˜μŠ€ 일반적 μ‚¬μš©
void annoymousClass() {
	final Server server = new HttpServer();
	waitFor(new Condition() {
		
		@Override
		public Boolean isSatisfied() {
			return !server.isRunning();
		}
	});
}

// TOBE: λžŒλ‹€ μ‚¬μš© - ν΄λ‘œμ €μ§€λ§Œ λžŒλ‹€λ‹€.
void Closure() {
	Server server = new HttpServer();
	waitFor(() -> !server.isRunning());
}	


// (별도) WaitFor 클래슀 
class WaitFor {
	static void waitFor(Condition condition) throws
	InterruptedException {
		While (!condition.isSatisfied())
			Thread.sleep(250);
	}
}
public class LambdaStudy {
    private String firstName = "Jack";
    public void λžŒλ‹€κ°€_firstName_에_직접_μ ‘κ·Ό() {
        Function<String, String> addSurname = surname -> {
          
          // λžŒλ‹€κ°€ firstName λ³€μˆ˜μ— 직접 접근이 κ°€λŠ₯. (ν•„λ“œ,λ©”μ†Œλ“œ,μ§€μ—­λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯)
          return this.firstName + " " + surname; 
        };
    }
}

 

λžŒλ‹€κ°€ λ„μž…λœ 이유

μ„€λͺ…

빅데이터λ₯Ό 닀루기 μœ„ν•΄ λ©€ν‹°μ½”μ–΄λ₯Ό ν™œμš©ν•œ λΆ„μ‚°μ²˜λ¦¬, 즉 병렬화 기술이 ν•„μš” ν•˜μ˜€μŒ.
κ·Έλž˜μ„œ java8 μ—μ„œλŠ” 병렬화λ₯Ό μœ„ν•΄ λ°°μ—΄, List, Set, Map을 κ°•ν™”ν•˜μ˜€κ³  μŠ€νŠΈλ¦Όμ„ κ°•ν™” ν•˜μ˜€λ‹€.
그리고 μŠ€νŠΈλ¦Όμ„ 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°, ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•΄ λžŒλ‹€,
λžŒλ‹€λ₯Ό μœ„ν•΄ μΈν„°νŽ˜μ΄μŠ€ λ³€ν™”κ°€ 수반 λ˜μ—ˆλ‹€.

빅데이터 지원 β†’ 병렬화 κ°•ν™” β†’ μ»¬λ ‰μ…˜ κ°•ν™” β†’ 슀트림 κ°•ν™” β†’ λžŒλ‹€ λ„μž… β†’ μΈν„°νŽ˜μ΄μŠ€ λͺ…μ„Έ λ³€κ²½ β†’ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ λ„μž…

 

λžŒλ‹€μ˜ μž₯/단점

μž₯점

μ½”λ“œκ°€ κ°„κ²°ν•˜λ‹€. 개발자의 μ˜λ„λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€.
병렬 μ²˜λ¦¬μ— μœ λ¦¬ν•¨.
ν•¨μˆ˜λ₯Ό λ§Œλ“œλŠ” μ‹œκ°„μ„ 덜 듀일 수 μžˆλ‹€.

단점

μ½”λ“œ λ‚¨μš©μ‹œ 디버깅이 νž˜λ“€ 수 μžˆλ‹€.
μž¬κ·€ 둜직 λ§Œλ“œλŠ”κ²ƒμ€ μ–΄λ ΅λ‹€.

 

λ©”μ†Œλ“œ μ°Έμ‘°

μ„€λͺ…

λ©”μ†Œλ“œ μ°Έμ‘°λ₯Ό λžŒλ‹€λ‘œμ„œ μ‚¬μš©ν•  λ•Œμ—” 이미 μ‘΄μž¬ν•˜λŠ” 이름을 가진 λ©”μ†Œλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ” 것인데, 그것은 이미 λͺΈμ²΄λ₯Ό 가지고 μžˆλ‹€.
일반 λ©”μ†Œλ“œλ₯Ό ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ‘œ μ „ν™˜ν•˜λŠ” 행동.

β€» ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ (@FunctionalInterfate)

ν•¨μˆ˜ν˜• λ©”μ†Œλ“œ or SAM(단일 좔상 λ©”μ†Œλ“œ)
ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ— ν•˜λ‚˜μ˜ λ©”μ†Œλ“œλ§Œ κ°€μ§ˆ 수 있음.
λΆ€λͺ¨μ˜ ν•¨μˆ˜ν˜• λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ“œ κ°€λŠ₯
@FunctionalInterface
interface A {
	abstract void apply();
}

// κ°€λŠ₯
interface B extends A {
	
	@Override
	abstract void apply();
} 

// λΆˆκ°€λŠ₯
interface B extends A {
	
	@Override
	abstract void illegal();
} 

 

λ©”μ†Œλ“œ 참쑰의 νŠΉμ§•

쌍콜둠(::)의 μ•žλΆ€λΆ„μ€ λŒ€μƒμœΌλ‘œ ν•˜λŠ” 클래슀λͺ…, 뒷뢀뢄은 λ©”μ†Œλ“œλͺ…
method 뒀에 μ†Œκ΄„ν˜Έ()을 쓰지 μ•ŠλŠ”λ‹€.

λ©”μ†Œλ“œ 참쑰의 μœ ν˜•

μƒμ„±μž μ°Έμ‘° (String::new)
  쌍콜둠 뒀에 newκ°€ λΆ™μŒ

  String 클래슀의 μΈμžμ—†λŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” λžŒλ‹€λ₯Ό 생성
  () β†’ new String() κ³Ό 같은 의미

정적 λ©”μ†Œλ“œ μ°Έμ‘° (String::valueOf)
  x β†’ String.valueOf(x)

두 가지 μœ ν˜•μ΄ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μ°Έμ‘° (x::toString)
  xλŠ” μ ‘κ·Ό κ°€λŠ₯ν•œ νŠΉμ • μΈμŠ€ν„΄μŠ€λΌ κ°€μ •

  () β†’ x.toString()

 

 

λžŒλ‹€μ˜ μ˜ˆμ™Έ 처리

μ„€λͺ…

λžŒλ‹€λŠ” μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό μœ„ν•œ μƒˆλ‘œμš΄ 문법이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ.
λžŒλ‹€μ—μ„œ λ˜μ Έμ§„ μ˜ˆμ™Έλ“€μ€ 일반 λ©”μ†Œλ“œ 호좜과 λ™μΌν•˜κ²Œ ν˜ΈμΆœν•œ 곳으둜 μ „νŒŒ λœλ‹€.
즉, λžŒλ‹€λ₯Ό ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œμ—μ„œ μ–΄λ–»κ²Œ 싀행될지에 λŒ€ν•΄ μ±…μž„μ„ 지지 μ•ŠμŒ. λžŒλ‹€λŠ” 병렬 λ˜λŠ” 미래의 μ–΄λŠ μ‹œμ μ— 처리될 μˆ˜λ„ 있기 λ•Œλ¬Έ.
μ˜ˆμ™Έμ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜λ„λ‘ λ‘œμ§μ„ λ§Œλ“€μˆ˜λŠ” μžˆμ§€λ§Œ μ½”λ“œκ°€ μž₯황해진닀.

λΉ„μ§€λ‹ˆμŠ€ 둜직 < μ—λŸ¬ 처리 μœ„ν•œ 보일러 ν”Œλ ˆμ΄νŠΈ μ½”λ“œ

 

 

ν•¨μˆ˜μ™€ 클래슀

μ„€λͺ…

ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€ν™”κ°€ λ˜μ–΄μ•Ό 함. ν•¨μˆ˜λŠ” 그렇지 μ•ŠμŒ.
ν΄λž˜μŠ€λŠ” μƒˆλ‘œ μƒμ„±λ˜λ©΄ 객체λ₯Ό μœ„ν•΄ λ©”λͺ¨λ¦¬κ°€ 할당됨.
ν•¨μˆ˜λ₯Ό μœ„ν•œ λ©”λͺ¨λ¦¬λŠ” λ”± ν•œλ²ˆ ν• λ‹Ή 됨. (μžλ°” νž™μ˜ νΌλ¨Έλ„ŒνŠΈ(permanent)μ˜μ—­μ— μ €μž₯ 됨.
κ°μ²΄λŠ” μžμ‹ λ§Œμ˜ 데이터λ₯Ό κ°€μ§€μ§€λ§Œ ν•¨μˆ˜λŠ” 데이터와 μ—°κ΄€ 관계가 μ—†λ‹€.
μžλ°” 클래슀의 정적 λ©”μ†Œλ“œλŠ” ν•¨μˆ˜μ™€ 거의 μœ μ‚¬ν•˜λ‹€.

 


μ°Έκ³ 

(μ±…) μžλ°” λžŒλ‹€ 배우기
(μ±…) μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체지ν–₯의 원리와 이해
https://coding-factory.tistory.com/265

λ°˜μ‘ν˜•

+ Recent posts