티스토리 뷰

Java

자바8 용어정리

LichKing 2016. 9. 19. 18:53
SMALL

함수형 인터페이스(Functional Interface)

추상메서드를 1개만 갖고있는 인터페이스


동작 파라미터(Behavior Parameter)

값이 아닌 행위를 매개변수로 전달함, 메서드를 전달한다고 생각하면 됨, template callback 패턴을 생각하면 된다.


메서드와 함수의 차이(Method, Function)

메서드는 클래스에 종속되어있음. 즉 파라미터를 받지않는 함수는 사실상 항상 같은 값이 반환되어야하지만 메서드의 경우 클래스에 종속적이기때문에 파라미터를 받지않음에도 항상 반환값이 다를 수 있음(인스턴스 변수, this를 이용하는 경우). 즉 this를 이용하지못하는 정적 메서드(static method)는 함수라고 할만함.


메서드 레퍼런스(Method Reference)

객체의 레퍼런스를 전달하여 사용하듯(call by reference) 메서드의 레퍼런스를 전달함. 엄밀히 말하면 사실 자바에서의 메서드 레퍼런스는 객체의 레퍼런스를 이용하긴 함.


함수 디스크립터(Function Descriptor)

메서드 시그니처를 람다 표현식 형태로 표현한 것.

boolean test(T t) 가 메서드 시그니처라면 함수 디스크립터로 표현할시 T -> boolean 과 같은 형태로 표현할 수 있음


대상형식(Target Type)

람다 표현식으로 구현하고자 하는 함수형 인터페이스.

Function<String> f = str -> "hello"+str;

에서 Funtion<String>이 대상형식이 됨


자유변수(Free Variable)

자신의 지역 바깥의 변수


람다캡쳐(Lambda Capture)

람다표현식에서 자유변수를 참조하는 행위


중간 연산(Intermediate Operation)

연산이 적용된 스트림을 반환하는 메서드. 스트림을 반환하기때문에 메서드 체이닝 형식으로 사용이 가능


최종 연산(Terminal Operation)

스트림에 대한 연산이 끝나는 연산. 스트림을 반환하지않음


쇼트서킷(Short Circuit)

&&, || 와 같은 논리연산자는 좌항에서 만족스러운 값이 반환되지않을경우 우항은 실행시키지않는다. 실행시켜봤자 결과가 달라지지않기때문이다.

variable != null && variable.hasMethod()

와 같은 비교시 variable이 null이 들어있을경우 우항의 hasMethod() 부분에서 NullPointerException이 발생하게된다. 하지만 좌항에서 null을 비교하고있고, variable이 null이라서 좌항에서 false가 뜨면 우항의 결과와 상관없이 해당 and 연산의 결과는 false이기때문에 굳이 우항을 실행하지않는다. 이때문에 NullPointerException은 발생하지않는다.

이를 쇼트서킷이라하며 자바8의 스트림연산에서도 쇼트서킷을 지원하고있다. allMatch, nonMatch, findFirst, findAny 등의 메서드는 모든 스트림요소를 검사하지않아도 중간에 false가 확정되는 경우의 수가 존재하는 연산들이다. 해당 메서드들은 쇼트서킷을 지원해 이미 실패가 확정되면 모든 스트림을 연산하지않는다.


외부반복(External Iteration)

코드에 직접적으로 반복이 드러나는 경우, ex) 콜렉션에 for문을 작성하는경우


내부반복(Internal Iteration)

코드에 반복이 드러나지않음. 스트림은 내부반복을 지원하여 코드에 반복문이 드러나지않는다.


루프 퓨전(Loop Fusion)

메서드 체이닝(Method Chaining)을 통해 서로 다른 연산을 연달아 하나의 연산으로 처리하는 기법


참고 : Java8 in Action

LIST

'Java' 카테고리의 다른 글

Java8#02. 함수형 인터페이스(Functional Interface)  (5) 2016.10.17
Java8#01. 람다 표현식(Lambda Expression)  (25) 2016.10.02
자바8 용어정리  (1) 2016.09.19
Generics  (7) 2016.05.29
DesignPattern#04 Decorator Pattern  (0) 2016.03.10
DesignPattern#03 Template Callback Pattern  (0) 2016.03.04
댓글
  • 프로필사진 JangChulWoon optional 찾아보다가 정리가 잘되있어서 Java8 천천히 읽어보려고합니다 !
    좋은글 감사합니다.
    2017.08.15 21:03
댓글쓰기 폼