티스토리 뷰

Language/Java

[JAVA8] 람다 표현식

JayStevency 2017. 1. 29. 17:05

08 : 인터페이스의 정적 메서드

일반적으로 인터페이스를 동반하는 클래스들에 정적 메서드를 두었다. 자바 표준 라이브러리에서 Collection/Collections 또는 Path/Paths 같은 인터페이스와 유티리티 클래스 쌍이 대표적이다.

Paths 클래스를 살펴보자. 이 클래스는 몇 가지 팩토리 메서드(Factory method)만 포함하고 있다. Paths.get("jdk1.8.0", "jre", "bin")처럼 일련의 문자열로부터 경로(Path)를 만들 수 있다. 자바 8에서는 Path 인터페이스에 이 메서드를 추가할 수도 있었다.

1
2
3
4
5
6
public interface Path{
    public static Path get(String first, String ... more){
        return FileSystem.getDefault().getPath(first, more);
    }
    ...
}



이렇게 하면 Paths 클래스가 더는 필요 없다. 


Collections 클래스를 살펴보면 두 종류의 메서드를 찾을 수 있다. 


1
public static void shuffle(List<?> list)



이러한 메서드는 다음과 같은 List 인터페이스의 디폴트 메서드로 잘 동작할 것이다.


1
public default void shuffle()



이 경우 모든 리스트들 대상으로 list.shuffle()을 호출 할 수 있다. 


팩토리 메서드인 경우 메서드를 호출할 대상 객체가 없으므로 동작하지 않는다. 바로 이 부분이 정적 인터페이스 메서드가 등장할 곳이다. 


1
2
public static <T> List<T> nCopies(int n, T o)
    //o 인스턴스 n개로 구성된 리스르 



이 경우 Collections.nCopies(10, "Fred") 대신 List.nCopies(10, "Fred")를 호출할 수 있고, 코드 읽는 사람은 결과가 List 임을 분명히 알수 있다. 

Comparator 인터페이스는 키 추출 함수를 받아서 추출된 키들을 비교하는 비교자를 돌려주는 아주 유용한 정적 comparing 메서드를 제공한다. 

 

Person 객체를 이름으로 비교하려면 Comparator.comparing(Person::name)을 사용 하면 된다. 


<소스코드>

https://github.com/JayStevency/Java8/blob/master/src/com/java8/staticmethod/StaticMethod.java

'Language > Java' 카테고리의 다른 글

[JAVA8] 스트림 API  (0) 2017.01.31
[JAVA8] 람다 표현식  (0) 2017.01.29
[JAVA8] 람다 표현식  (0) 2017.01.24
[JAVA8] 람다 표현식  (0) 2017.01.24
[JAVA8] 람다 표현식  (0) 2017.01.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함