Java 8-2

00_8_3·2021년 4월 8일
0

java.util.function

자바 유틸 함수
오라클에서 제공해주는 자바 유틸 함수의 문서입니다.

스코프


private void run (){
	//java 8 이전의 버전에서는 final이 붙어있어야 되었다.
	int baseNum = 10;
    
    //1. 로컬 클래스
    class LocalClass {
    	void printBaseNum(){
        	int baseNum = 11;
            System.out.println(baseNum);
        }
    }
    //2. 익명 클래스
    Comsumer<Integer> integerComsumer = new Comsumer<Integer>(){
    	@Override
        public void accept(Integer integer) {
        //만약 integer변수 이름을 baseNum으로 변경하게 되면
        // 아래의 baseNum은 더이상 맨위의 10값을 가진 baseNum을 가르키지 않는다.
        	System.out.println(baseNum);
        }
    }
    
    //3. 람다
	IntComsumer printInt = (i) -> {
    	System.out.println(i + baseNum);
    };
    printInt.accept(10);
    
    //4 아래와 같이 증가를 하면 effective final 변수가 아니라서
    // 참조할수없다.
    baseNum ++;
}
  • 1 로컬 클래스에서 baseNum을 초기화할 경우 기존의 10이 가려져 11이된다.
  • 2
  • 3 람다는 맨처음 int baseNum = 10과 같은 스코프를 가지고 있어 가려지지않는다. (같은 스코프 안이라 baseNum이라는 변수를 재지정 못한다.)

메소드 레퍼런스

public class Greeting{
	private String name;
    
    public Greeting(){
    
    }
    public Greeting(String name) {
    	this.name = name;
    }
    public String hello(String name) {
    	return "hello" + name;
    }
    public static String hi(String name) {
    	return "hi" + name;
    }
}
...
public static void main(){
	// Greeting greeting = new Greeting();
    // UnaryOperator<String> hello = greeting::hello;
    
    // 입력값은 없는데 리턴을 할때 -> Supplier 사용
    Supplier<Greeting> newGreeting = Greeting::new;
    newGreeting.get();
    
    Function<String, Greeting> twoGreeting = Greeting::new;
    
}

greeting static 메소드 참조하는 방법이다.
타입::스테틱 메소드

0개의 댓글