목록Java (181)
충분히 쌓여가는
java.util.function 패키지 자주 사용되는 다양한 함수형 인터페이스를 제공 함수형 인터페이스 메서드 설명 java.lang.Runnable 매개변수도 없고, 반환값도 없음 Supplier 매개변수는 없고, 반환값만 있음 Consumer Supplier와 반대로 매개변수만 있고, 반환값이 없음 Function 일반적인 함수, 하나의 매개변수를 받아서 결과를 반환 Predicate 조건식을 표현하는데 사용됨 매개변수는 하나, 반환 타입은 boolean Supplier f = () -> (int)(Math.random()*100)+1; Consumer f = i -> System.out.print(i+", "); Predicate f = i -> i%2==0; Function f = i -> i/..
함수형 인터페이스 단 하나의 추상 메서드만 선언된 인터페이스 @FunctionalInterface // 안붙여도 에러는 발생하지 않는다 interface MyFunction { public abstract int max(int a, int b); } MyFunction f = new MyFunction() { public int max(int a, int b) { return a > b ? a : b; } } int value = f.max(3, 5); // OK, MyFunction에 max()가 있음 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있음 (단, 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환타입이 일치해야함) MyFunction f = (a, b) -> a > b ?..
람다식 함수(메서드)를 간단한 식(expression)으로 표현하는 방법 익명 함수(이름이 없는 함수, anonymous function) 함수와 메서드의 차이(근본적으로 동일) 함수는 일반적 용어, 메서드는 객체지향개념 용어 함수는 클래스에 독립적, 메서드는 클래스에 종속적 람다식 작성하기 1. 메서드의 이름과 반환타입을 제거하고 , '->'를 블록{} 앞에 추가한다 2. 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(끝에 ; 안붙인다) 3. 매개변수의 타입이 추론 가능하면 생략가능(대부분의 경우 생략가능) 람다식 작성하기 - 주의사항 1. 매개변수가 하나인 경우, 괄호() 생략가능(타입이 없을 때만) 2. 블록 안의 문장이 하나뿐 일때, 괄호{} 생략 가능(끝에 ; 안 붙인다) 단,..
wait()와 notify() 동기화의 효율을 높이기 위해 wait(), notify()를 사용(한 번에 한 쓰레드만 임계영역에 들어갈 수 있기 때문) Object 클래스에 정의되어 있으며, 동기화 블록 내에서만 사용할 수 있다 wait(): 객체의 lock를 풀고 쓰레드를 해당 객체의 waiting pool에 넣는다 notify(): waiting pool에서 대기 중인 쓰레드 중의 하나를 깨운다 notifyAll(): waiting pool에서 대기 중인 모든 쓰레드를 깨운다 class Account { int balance = 1000; public synchronized void withdraw(int money) { while(balance < money) { try { wait(); // 대기..