반응형
[Effective Java] 전략을 표현할 때 함수 객체를 사용하자. |
자바는 함수 포인터를 제공하지 않는다. 대신 객체 참조를 사용해서 유사한 효과를얻을 수 있다.
호출된 객체의 메소드에서 다른 객체(메소드로 전달되는)의 메소드를 수행하도록 객체를 정의하는 것이 가능하다.
그런 메소드 하나만 달랑 외부에 제공하는 클래스의 인스턴스는 사실상 메소드 포인터의 역할을 한다.
그런 인스턴스를 함수 객체(function object)라고 한다.
ex) Comparator Interface 를 상속한 Class instance.
-
좋은 함수 객체는 상태가 없어 static final, singleton 으로 사용 가능한 녀석이다.
함수 포인터의 주 용도는 전략(strategy) 패턴을 구현하는 것.
자바에서 이 패턴을 구현하려면 전략을 나타내는 인터페이스를 선언하고, 그 인터페이스를 구현하는 구체 전략(concrete strategy)을 정의한다.
구체 전략이 단 한번만 사용될 때는 그것을 익명 클래스로 선언하고 인스턴스를 생성하는 것이 일반적.
반복적으로 사용하기 위해 설계된 구체 전략의 경우는 일반적으로 private static 맴버 클래스로 구현한 후, public static final 필드를 사용해서 외부에 제공한다.
-
좋은 함수 객체는 상태가 없어 static final, singleton 으로 사용 가능한 녀석이다.
Summary
함수 포인터의 주 용도는 전략(strategy) 패턴을 구현하는 것.
자바에서 이 패턴을 구현하려면 전략을 나타내는 인터페이스를 선언하고, 그 인터페이스를 구현하는 구체 전략(concrete strategy)을 정의한다.
구체 전략이 단 한번만 사용될 때는 그것을 익명 클래스로 선언하고 인스턴스를 생성하는 것이 일반적.
반복적으로 사용하기 위해 설계된 구체 전략의 경우는 일반적으로 private static 맴버 클래스로 구현한 후, public static final 필드를 사용해서 외부에 제공한다.
반응형
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] 새로 작성하는 코드에서는 원천(raw) 타입을 사용하지 말자. (0) | 2016.11.21 |
---|---|
[Effective Java] static 맴버 클래스를 많이 사용하자. (0) | 2016.11.17 |
[Effective Java] 태그(tagged) 클래스보다는 클래스 계층을 사용하자. (0) | 2016.11.14 |
[Effective Java] 타입을 정의할 때만 인터페이스를 사용하자. (0) | 2016.11.08 |
[Effective Java] 추상 클래스보다는 인터페이스를 사용하자. (0) | 2016.11.07 |
댓글