☕️ JAVA/Effective JAVA

    [Effective Java] 아이템 33 : 타입 안전 이종 컨테이너를 고려하라

    [Effective Java] 아이템 33 : 타입 안전 이종 컨테이너를 고려하라

    아이템 33 : 타입 안전 이종 컨테이너를 고려하라 제네릭은 Set이나 Map과 같은 컬렉션이나 ThreadLocal, AtomicReference처럼 하나의 원소만을 담는 컨테이너에 가장 많이 쓰입니다. 이 때 보통의 경우 컨테이너별로 매개변수화 할 수 있는 타입의 수는 하나로 제한됩니다. Set intSet = new HashSet(); Map map = new HashMap(); 이 때, 타입의 수가 하나로 제한되는 것은 컨테이너의 제네릭 타입이 정해졌을 때, 해당 타입만으로 자료형이 제한되는 것을 의미합니다. Set set = new HashSet(); 맞습니다. 하지만, 위 방법대로 사용할 경우 해당 컨테이너에서 얻은 객체가 어떤 타입인지 정확히 알 수 없으며, 로직을 이해하고 캐스팅해 사용해도..

    [Effective Java] 아이템 23 : 태그 달린 클래스보다는 클래스 계층구조를 활용하라

    [Effective Java] 아이템 23 : 태그 달린 클래스보다는 클래스 계층구조를 활용하라

    아이템 23 : 태그 달린 클래스보다는 클래스 계층구조를 활용하라 태그 달린 클래스 두 가지 이상의 의미를 표현하며, 이를 특정 필드(이 책에서는 태그)로 구분하는 클래스가 종종 있습니다. class Figure { enum Shape { RECTANGLE, CIRCLE }; // 태그 필드 - 현재 모양을 나타낸다. final Shape shape; // 아래 필드는 RECTANGLE 일 때만 쓰임 double length; double width; // 아래 필드는 CIRCLE 일 때만 쓰임 double radius; // RECTANGLE 생성자 Figure(double length, double width) { this.shape = Shape.RECTANGLE; this.length = leng..

    [Effective Java] 아이템 13 : clone 재정의는 주의해서 진행하라

    [Effective Java] 아이템 13 : clone 재정의는 주의해서 진행하라

    아이템 13 : clone 재정의는 주의해서 진행하라 Cloneable은 메서드가 없는 인터페이스입니다 clone 메서드는 원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체를 생성해줍니다. clone 메서드를 사용하기 위해서는 해당 클래스에서 Cloneable 인터페이스를 구현해주어야 합니다. 이러한 스펙이라면, 아래와 같은 생각이 들 수 있습니다. 저도 그랬구요. Cloneable 인터페이스를 구현해야 clone 메서드를 사용할 수 있다면, Cloneable 인터페이스에 clone 메서드가 선언되어있겠군! 하지만, 아닙니다. clone 메서드가 선언되어있는 곳은 Object이고, protected이며, Override 해주어야 하면 사용할 수 있습니다. @Override public PhoneNu..

    [Effective Java]  아이템 10 : equals는 일반 규약을 지켜 재정의하라

    [Effective Java] 아이템 10 : equals는 일반 규약을 지켜 재정의하라

    아이템 10 : equals는 일반 규약을 지켜 재정의하라 equals를 재정의해야하는 Case 객체의 식별성이 아니라 논리적 동치성을 비교해야하는 경우 String, Integer 와 같은 값 클래스 String a = "가나다"; String b = "abc"; assertTrue(a.equals(b)); 위와 같이 String 같은 값 클래스는 equals 메서드에게 객체 자체가 동일한지 여부보다 값이 동일한지 여부를 기대할 것이다. JPA 영속성 Entity 클래스 (case by case) @Entity @EqualsAndHashCode(of = {"id"}) public class User { @Id @GeneratedValue private Long id; private String name..

반응형