클래스에 유일한 메서드가 인자로 전달된 객체에 뭔가를 하는 메서드인 경우, 그런 메서드 하나뿐인 객체는 해당 메서드의 포인터 구실을 하며, 이러한 객체를 함수 객체라고 부른다.


 StringLengthComparator 객체는 문자열을 비교하는 데 사용될 수 있는 실행 가능 전략이다. 이러한 클래스들은 대부분 무상태 클래스이다. 따라서 아래처럼 싱글턴 패턴을 따르면 쓸데없는 객체 생성은 피할 수 있다.

이러한 실행 가능전략을 인자로하는 메서드들은 Comparator 인터페이스를 자료형을 받으며, 실행전략 클래스들은 Comparator 인터페이스를 구현해야 한다.

 

 실행 가능 전략 클래스는 익명 클래스로 정의하는 경우도 많다. 하지만 아래와 같이 사용하면 sort를 호출할 때마다 새로운 객체가 만들어진다. sort 함수가 여러 번 수행되는 클래스라면 함수객체를 private static final 필드에 저장하고 재사용하는 것을 고려해 보길 바란다.


private static final 필드를 활용한 클래스.


요약

함수 객체의 주된 용도는 전략 패턴을 구현하는 것이다. 자바로 이 패턴을 구현하기 위해서는 전략을 표현하는 인터페이스를 선언하고, 실행 가능 전략 클래스가 전부 해당 인터페이스를 구현하도록 해야 한다. 실행 가능 전략이 한 번만 사용되는 경우에는 보통 그 전략을 익명 클래스로 구현하며, 반복적으로 사용된다면 private static 멤버 클래스로 전략을 표현한 다음, 전략 인터페이스가 자료형인 public static final 필드를 통해 외부로 노출하는 것이 바람직하다.


+ Recent posts