상세 컨텐츠

본문 제목

Java Predicate

멀고도 험한 킹왕짱 프로그래머의 길

by 알 수 없는 사용자 2019. 3. 2. 23:03

본문

Java Predicate


Predicate는 java.util.function 에 위치한 함수로, Javadoc에는 다음과 같이 설명되어 있습니다.


Represents a predicate (boolean-valued function) of one argument.

해석:  한 인자가 포함된 predicate(논리값 함수)


이는 그 한 인자에 대해 어떤 기준에 대하여 판단하고 그 기준에 대한 논리 여부를 반환하여 주는 함수입니다.


Predicate의 표현 방법에는 여러가지가 있으며, 예시를 통해 풀어나가도록 하겠습니다.

정수 x(또는 input, a)에 대하여, x가 양수인지에 대한 참과 거짓을 밝히는 Predicate를 예시로 하겠습니다.


예1) Predicate를 기호로 표시

여기서,

는 x에 대해 x > 0, 즉 x가 양수인지 판별하는 Predicate의 apply 함수를 새로 도입된 기호로 표현한 것입니다.

   는     과 같습니다.


예2) Predicate를 Interface의 생성을 통해 직접 구현

예제 1번에서 말씀드린 바와 같이, a -> (조건문) 은 이 Predicate 내의 apply 함수와 같습니다.

apply 함수는 그의 test 함수로 참과 거짓이 판별되고 그를 반환합니다. (사실 apply나 test나 둘다 뭘 쓰든 상관은 없습니다만, 외부에서 사용할 땐 test를 더 많이 사용한다고 합니다.)


예3) Predicate를 한 함수를 통해 사용


어디선가 d3를 선언하고, 같은 Integer 클래스의 객체에 대하여 TestPredicate 클래스의 static인 predicateInteger 함수를 통해 판별하고 그를 apply에서 처리하도록 ' :: ' 기호를 사용했습니다. :: 는 저렇게


static 함수의 경우 TestPredicate::predicateInteger 로 쓰거나,

static 함수가 아닌 경우, TestPredicate의 인스턴스인 tp에 대해 tp::predicateInteger 로 씁니다.


물론 predicateInteger 함수는 static이므로, 전자를 사용하는 것이 옳겠지요?



테스트 결과를 확인하겠습니다!


예시문의 d1, d2, d3로 테스트했습니다.

log 함수는 System.out.println(Object) 입니다.



-- 예고 --

다음엔 Predicate의 apply와 test 말고도, 함수 and, or, negate 에 대해 자세히 논해보도록 하겠습니다.

Predicate가 직역시 단정(斷定)이지만, 프로그래밍 내에서의 수학적 증명 방법에서 쓸 수 있다는 것에 대해 경이로움을 느끼게 되었습니다. 개인적으로요 ㅎㅎ


다음 편 기대해주세요~~

반응형

관련글 더보기

댓글 영역