익명 클래스

    람다보다는 메서드 참조를 사용하라 - [7장. 람다와 스트림(아이템43)]

    람다가 익명 클래스보다 나은 점 중에서 가장 큰 특징은 간결함이다. 그런데, 자바에는 함수 객체를 심지어 람다보다도 더 간결하게 만드는 방법이 있는데, 그것이 바로 메서드 참조(method reference)다. 이번 글에서는 람다와 메서드 참조를 비교해 보고 언제 어떤 것을 쓰면 좋은지 알아보도록 하자. 📙 1. 람다와 메서드 참조 public static void main(String[] args) { Map map = new HashMap(); int myKey = 1; int myValue = 3; map.merge(myKey, myValue, (count, incr) -> count + incr); System.out.println(map.get(myKey)); // 3 myValue = 5; ..

    익명 클래스보다는 람다를 사용하라 - [7장. 람다와 스트림(아이템42)]

    📙 1. 익명 클래스와 람다식 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스를 사용했다. 이런 인터페이스의 인스턴스를 함수 객체(function object)라고 하며, 특정 함수나 동작을 나타내는 데 사용하였다. JDK 1.1이 등장하면서 함수 객체를 만드는 주요 수단은 익명 클래스가 되었다. Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); 하지만, 위의 코드와 같이 익명 클래스 방식은 코드가 너무 길기 때문에 자바는 함수형 프로그래밍에 적합하지 않았다. 그래서 자바 8에 와서..

    멤버 클래스는 되도록 static으로 만들라 - [4장. 클래스와 인터페이스(아이템24)]

    중첩 클래스(nested class)란 다른 클래스 안에 정의된 클래스를 말한다. 중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여야 하며, 그 외의 쓰임새가 있다면 톱레벨 클래스로 만들어야 한다. 중첩 클래스의 종류는 아래의 4가지가 있다. 정적 멤버 클래스 (비정적) 멤버 클래스 익명 클래스 지역 클래스 '정적 멤버 클래스'를 제외하고는 모두 내부 클래스(inner class)에 해당한다. '정적 멤버 클래스'와 '비정적 멤버 클래스'는 멤버 클래스에 해당한다. 이번 글을 통해 4가지 중첩 클래스에 대해서 알아보고, 왜 멤버 클래스는 되도록 static으로 만들어야 하는지 알아보고자 한다. 1. 정적 멤버 클래스 🧰 정적 멤버 클래스는 다른 클래스 안에 선언되고, 바깥 클래스의 private 멤버에도..

    Comparable과 Comparator

    public class Main { public static void main(String[] args) { char[] chArr = {'E', 'D', 'C', 'B', 'A'}; System.out.println("정렬 전 : " + Arrays.toString(chArr)); Arrays.sort(chArr); System.out.println("정렬 후 : " + Arrays.toString(chArr)); } } // 정렬 전 : [E, D, C, B, A] // 정렬 후 : [A, B, C, D, E] Arrays.sort를 이용하면 위와 같이 정렬을 할 수 있다. 정렬이 가능한 이유는 Comparable을 구현했기 때문이다. 이번 글에서는 'Comparable과 Comparator의 개념'..