람다의 내부동작 #2 지난글에서 람다의 내부/외부 표현에 대한 글을 작성했습니다.이번에는 람다의 내부적인 동작에 대한 상세한 이해를 위해 JVM 관련 부분과 bytecode 위주로 언급합니다. JVM의 opcode compile된 bytecode를 보면 네종류의 opcode를 사용하여 Java의 method를 표현합니다.1.7 이전invokestatic: static method 실행invokevirtual: instance method 실행invokeinterface: interface method 실행invokespecial: exact한 함수 수행 - override 불가, 더이상 변화가 없는 함수들생성자, private method, super callinvokedynamic동적 타입 언어를 위한 opcodeJruby.. 개발이야기/Java 8년 전
람다의 내부동작 #1 람다의 내부자바의 lambda는 단순히 익명클래스로 치환되지 않습니다.bytecode를 확인하면 invokedynamic이란 opcode로 표현됩니다.이번 포스팅에서는 람다의 내부동작은 어떤지, 왜 익명클래스로 치환되지 않는지를 알아봅니다. 람다의 this 람다의 this와 익명클래스의 this는 어떻게 다를까요? 위 예제에서 같은 동작을 하는 Runnable interface를 하나는 익명클래스, 나머지 하나는 람다로 표현했습니다.마지막 check()함수는 this로 넘겨바든 객체가 Runnable인지를 확인하여 true/false를 반환합니다. 이 코드를 수행하고 나면 익명클래스는 true 람다는 false를 반환합니다.즉, 람다는 Runnable을 this로 갖는게 아니라 LambdaThis를 th.. 개발이야기/Java 8년 전