Lambda & (Anonymous) Inner class

최민수·2023년 7월 26일
0

프로그래밍 언어

목록 보기
14/14

메서드를 간결한 함수식 형태로 나타낸 것

한 번만 쓰고 나중에 다시 사용하지 않을 메서드는 굳이 outer scope에 만들 필요가 없다.
따라서 사용 시에 Lambda 식으로간결하게 만들어서 쓰면 된다.

1개 의 메서드를 가지는 인터페이스 구현 상황에만 사용 가능하다.


Inner class

이와 비슷하게 동작하는 Anonymous Inner class 라는 개념도 있다.

객체를 생성할 당시에 한 번만 쓰고 나중에 다시 사용하지 않을 것 같을 때 클래스를 따로 설계할 필요가 없다. 이럴 때에는 Inner class로 간결하게 만들어 쓰면 된다.

yyy(new xxx(){
	a(){...}
 });
 
 또는
 
 private class inner {...}

이렇게 설계하면 2가지 장점이 생긴다.

첫번째 장점은, 클래스를 은닉 할 수 있다는 것이다.
클래스를 따로 설계하면 다른 클래스에서의 접근에서 자유로울 수 없다.
하지만 inner class는 다른 클래스가 결코 볼 수 없다. 따라서 다른 곳에서의 접근을 막고자 할 때 유용하다.

두번째 장점은, 속한 클래스의 멤버에 대한 접근이 간결해진다는 것이다.
즉, 자주 참조할 필요가 있는 클래스를 그때마다 참조해서 가져오는 대신, inner class로 설계하면 outer scope에 존재하는 클래스의 멤버 변수에 대해 접근이 가능해지므로 더 간결한 설계를 가져갈 수 있다.


가독성 문제

Inner class 를 위 코드와 같이 작성하면 코드의 가독성이 안좋아진다.

아무래도 클래스를 따로 설계하는게 아니라 코드 중간에 저런 식으로 선언을 하다보니 가독성이 나빠지는 것은 당연한 일이다.

이런 문제를 도와주는 것이 Lambda 식이다.
물론 람다식도 메서드 한 개만 존재하는 클래스에 대해서 적용할 수 있는 것이지만, 람다식을 사용하면 가독성이 훨씬 좋아진다.

첫번째: Inner class 설계

TreeMap<String, Person> map = new TreeMap<>(new Comparator<String>() { 
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2) * (-1);
            }
        });

두번째: Lambda 로 변경한 설계

TreeMap<String, Person> map = new TreeMap<>((o1, o2) -> o1.compareTo(o2) * (-1));

두번째 코드가 훨씬 간결하고 깔끔해 보인다
^^

profile
CS, 개발 공부기록 🌱

0개의 댓글