0%

(학습) Java8 In Action 1장 정리

Java8 in Action 책을 보고 학습한 내용을 정리한 포스팅이다.
직접 실행해보거나 작성해본 코드는 Github에 작성하였다.


1장 자바 8을 눈여겨봐야 하는 이유


자바 함수

자바에서 함수는 정적 메서드(클래스 메서드)와 같은 의미로 사용
샘플 예제는 아래와 같다.

1
2
3
4
5
public class TestClazz() {
public static int getCount() {
return count;
}
}

메서드와 함수의 차이

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

메서드 레퍼런스

  • 자바에서 메서드는 엄밀히 말하자면 1급 객체가 아니기 때문에 객체의 레퍼런스를 전달하는 방식으로 동작한다.
  • 타입만 맞춰주면 자동으로 연결이 된다. (즉 인터페이스의 데이터타입이 맞다면 연결을 보장한다.)
  • 메서드 레퍼런스는 4가지 타입이 있다.
종류 문법 예시
정적 메서드 참조 ContainingClass::staticMethodName Math::sqrt
생성자 참조 ClassName::new Integer::new
클래스 멤버 메서드 참조 ContainingObject::instanceMethodName String::toString
인스턴스 멤버 메서드 참조 ContainingType::methodName str::toString
  • 간단한 사용 비교 예제코드를 참고해보자
1
2
3
4
5
6
7
8
9
10
11
public void sampleMethod01() {
File[] hiddenFile = new File(".").listFiles(new FileFilter() {
public boolean accept(File pathname) {
return pathname.isHidden();
}
});
}

public void sampleMethod02() {
File[] hiddenFIle = new File(".").listFiles(File::isHidden);
}

기타 용어

  • 1급 함수(First-class function)
    • 파라미터로 전달이 가능함
    • 리턴 값으로 사용이 가능함
    • 변수에 할당이 가능함
    • 런타임에 생성이 가능하다.

참고 : http://javacan.tistory.com/entry/definition-of-first-class [자바캔(Java Can Do IT)]