목록이펙티브자바 (4)
공부하는 스누피
람다란? 람다식(또는 람다)은 추상 메서드를 하나만 가진 인터페이스의 인스턴스이다. 자바 8부터 등장했으며, 기존 익명 클래스와 비슷한 역할(함수형 프로그래밍)을 하지만 훨씬 간결하다. // 익명 클래스 Collection.sort(arr, new Comparator(){ ... }); // 람다식 Collection.sort(arr, (o1, o2)->{...}); 익명클래스 vs 람다 람다 익명 클래스 인스턴스에 접근할 수 있는가? X O this 키워드 바깥 인스턴스 익명클래스 인스턴스 자신 => 따라서 익명 클래스는 함수형 인터페이스가 아닌 타입의 인스턴스를 만들 때 사용하는 것이 좋다. 주의할 점 타입을 쓰지 않았을 때 IDE에서 에러가 났을 때를 제외하고, 람다의 모든 매개변수 타입은 생략한다..
멤버 클래스(member class) / 중첩 클래스(nested class) 다른 클래스 안에 정의된 클래스. 자신을 감싼 outer class에서만 쓰여야 하고, 그 외에 쓰임새가 있다면 top-level 클래스로 만들어야 한다. (클래스 파일 하나 더 만들란 얘기다.) 종류: static 멤버 클래스, non-static 멤버 클래스, 익명 클래스, 지역 클래스 static 멤버 클래스를 제외한 나머지는 다 inner class에 해당한다. 정적 멤버 클래스 (static member class) 다른 클래스 안에 선언되고, outer 클래스의 private 멤버에도 접근할 수 있다. 바깥 인스턴스와 독립적으로 존재할 수 있다. 멤버 클래스에서 바깥 인스턴스에 접근할 일이 없다면 정적 멤버 클래스로..
싱글턴이란? 싱글턴(Singleton)은 디자인 패턴 중 생성 패턴으로, 해당 클래스에서 생성되는 인스턴스가 단 하나임을 보장한다. 클래스에서 인스턴스가 하나임이 보장되면 인스턴스를 쉽게 통제할 수 있으며, 재사용이 쉽다. 하지만 mock이 불가능해 클라이언트를 테스트하기 어려워진다는 단점이 있다. mock은 인스턴스를 여러 개 만들 수 있어야 가능하기 때문이다. 예를 들어, 무상태 객체(stateless object)나 시스템 컴포넌트에서 싱글턴 패턴을 사용한다. 싱글턴 만드는 방식 싱글턴 만드는 방식은 크게 두 가지가 있으나 둘 다 생성자를 private으로 숨긴다. private Contructor(){ ... 생성자를 숨긴다 ... } 1) public static final 멤버 변수에 인스턴스..
정적 팩터리 메서드란? 팩터리 메서드는 디자인 패턴 중 생성 패턴의 한 종류로, 생성자로 직접 객체 인스턴스를 생성하는 대신 메서드가 객체를 생성해 반환값으로 넘긴다. 클라이언트는 팩터리가 건네주는 객체가 원하는 클래스의 하위 클래스이기만 한다면 어느 클래스의 인스턴스인지 알 필요가 없게 한다. 장점 1. 생성자보다 더 구체적인 이름을 가질 수 있다. => 메서드 호출 시 직관적으로 기능을 짐작할 수 있다. 2. 메서드가 호출될 때마다 인스턴스를 생성하지 않아도 된다. => 생성자는 호출될 때마다 인스턴스를 생성해서 인스턴스를 재활용하기 어려울 뿐더러 불변 클래스에 적용할 수 없다. => 이 특징은 싱글톤을 구현할 때 적용된다. 한 싱글톤 클래스당 하나의 인스턴스만을 보장하기 때문이다. => 인스턴스를 ..