이펙티브자바 ㅤㅤㅤㅤㅤ By ds_chanin [아이템 21] 인터페이스는 구현하는 쪽을 생각해 설계하라 아이템 21 인터페이스는 구현하는 쪽을 생각해 설계하라 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어려운 법이다. 자바 8에서 새롭게 추가된 Collection 인터페이스의 removeIf() 메서드는 Predicate의 결과에 따라 원소를 제거하는 함수이다. 범용적으로 구현되어 있지만 모든 Collection 구현체와 어울리는 것은 아니다. 아래는 그 예인 SynchroziedCollection이다. 클라이언트에가 제공한 객체로 락을 거는 능력을 추가로 제공한다. 모든 메서드에서 주어진 락 객체로 동기화한 후 내부 컬렉션 객체에 기능을 위임하는 래퍼 클래스이다. 보다시피 removeIf()가 4.4 이전 버전까지는 동기적으로 구현이 되어있지않아 default 메서드를.. Reading Record/이펙티브자바 2020. 4. 14. ㅤㅤㅤㅤㅤ By gobukgol 아이템 [20] - 추상 클래스 보다는 인터페이스를 우선하라 자바에는 인터페이스와 추상 클래스를 제공한다. 또한 자바 8 부터는 인터페이스에 default method를 제공하게 되어 인퍼테이스와 추상 클래스 모두 인스턴스 메소드를 구현 형태로 제공할 수 있게되었다. 그렇다면 둘의 차이는 무엇일까? 추상 클래스를 상속받아 구현하는 클래스는 반드시 추상 클래스의 하위 타입이 되어야한다는 점이다. 즉, 자바에서는 단일 상속만 지원 하기 때문에 한 추상 클래스를 상속받은 클래스는 다른 클래스를 상속받을 수 없게되는 것이다. 이와 반대로 인터페이스는 구현해야할 메소드만 올바르게 구현한다면 어떤 다른 클래스를 상속했던 간에 같은 타입으로 취급된다. 인터페이스에는 다음과 같은 장점이 있다. 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. 인터페이스는 믹스인 .. Reading Record/이펙티브자바 2020. 2. 29. ㅤㅤㅤㅤㅤ By ds_chanin 아이템[14] - Comparable을 구현할지 고려하라 아이템[14] - Comparable을 구현할지 고려하라 Comaparable을 구현하면 compareTo를 재정의 하여 손쉽게 컬렉션을 정렬할 수 있다. 따라서 알파벳, 숫자, 연대와 같이 순서가 명확한 클래스를 작성한다면 반드시 Comparable을 구현하도록 하자. Comparable은 compareTo만 가지고 있어 Functional Interface로 착각할 수 있지만 그렇지 않다. Functional Interface은 람다식에 적합한 구조여야 하기 때문이다. * 람다식은 객체 내부의 멤버변수를 우선 순위에 따라 비교하는 Comaprable을 구현하기에 적합하지 않기때문이다. compareTo 메서드의 일반 규약 앞장에서 살펴본 equals의 규약과 비슷하다. 먼저 짚고 넘어갈 compare.. Reading Record/이펙티브자바 2020. 2. 7. ㅤㅤㅤㅤㅤ By 오늘의 개발 아이템 [1] - 생성자 대신 정적 팩터리 메서드를 고려하라 인스턴스를 생성하는 방법은 (1) public 생성자 (2) 정적 팩터리 메서드가 있다. 여기서 정적 팩터리 메서드를 사용할 때 찾을 수 있는 장점은 다음과 같다. 1. 이름을 가질 수 있다. 생성자는 클래스명(parameters) 형태로만 구현할 수 있지만 정적팩터리 메서드는 자신의 이름을 가질 수 있다. 하지만 자주 사용되는 직관적인 정적팩터리 메서드 이름이 있으니 참고하여 구현하도록 해야한다.(포스팅 하단에 정리되어있다.) /*(1) valueOf 라는 메서드 명을 통해 반환되는 값을 유추할 수 있다. true라는 값이 Boolean 형태로 반환되어 나오겠다는 사실을 알 수 있다. */ Boolean boolean1 = Boolean.valueOf(true); /* (2) 생성자는 시그니처 중복이 .. Reading Record/이펙티브자바 2020. 1. 20. 이전 1 2 다음