최근에 람다, 함수인터페이스를 공부하면서 이론 뿐만이 아니라 실제로 개발에 적용하고 싶었다.
분명히 대다수가 글로 공부를 하고 코드로 직접 써보지는 않았을 것이다. 이러한 공부 방법은 내가 해왔던 공부 방법이다. 이러한 공부의 결과는 '무언가 많이 들어본 사람', '정확하게 알지 못하는 사람' 이라는 말을 들을 것이다. 무언가 잘못되었음을 인지하고 그 부분을 어떻게 고칠까 생각하여 생각해낸 방법은 간단했다. 직접 해보는 것.
그래서 벨로그를 시작했고 이제 직접해보는 방향으로 시작 할 것이다.1년 넘게 공부한 부분이 있기에 쉽게 고쳐지지는 않겠지만 꾸준히 노력해보면 올해 말에는 그 아쉬운 부분이 없어져있겠지.
ENUM 은 생성자를 갖고 있다. 그 뜻은 MemberType은 클래스라는 뜻이다. 즉, 아래와 같은 코드가 생략됬을 뿐.
class MemberType{
public static final Gender STUDENT = new MemverType("STUDENT_COST, cost -> cost /2 );
public static final Gender ADMIN = new MemverType("ADMIN_COST, cost -> 0);
...
}
좀 더 직관적으로 알기 위해 생성자에 SOUT를 써보고 거기에 대한 결과값을 보면, 아래와 같이 결과를 얻을 수 있다.
함수 인터페이스에 람다를 할당할 수 있다. 즉, 람다 그 자체를 인스턴스라고 생각하면 된다.
참고 : https://velog.io/@ggomjae/java
Function<Long, Long> expression = cost -> cost // 람다 인스턴스 할당
그러면 각 STUDENT, ADMIN, GENERAL은 싱글톤으로 생성이 될 때, role 뿐만 아니라 람다 인스턴스를 할당을 받기 때문에 각 STUDNET, ADMIN, GENERAL은 다른 람다 인스턴스를 갖고 있는다.
보편적으로 우리는 필드에 대한 값을 내보내기 위해 어떤 메소드를 쓰는가 ?
이것으로 간단하게 Swith, if를 쓰지않고 각 역할에 따른 비용을 계산하여 반환을 해줄 수 있다.
조금 더 생각해보면, Consumer 같은 경우, T -> () 라는 디스크립터(형태) 를 갖고 있다. 이 log.info 같은 경우 cost라는 T를 받고 값을 반환시키지 않기 때문에 쉽게 (?) 적용할 수 있다. 간단한 예이다.