728x90

이펙티브자바 3

이펙티브 자바 - 아이템 21: 인터페이스는 구현하는 쪽을 생각해 설계하라

Default Method 자바8에서, 기존의 구현체를 깨뜨리지 않고, 비교적 안전하게 인터페이스에 메소드를 추가하는 방법 기존에는 메서드 하나를 추가하려면 해당 인터페이스를 구현하는 모든 클래스에서는 해당 메서드를 모두 구현해줘야 했다. 하지만, 디폴트 메서드를 이용하면 인터페이스의 기분 구현을 그대로 상속하므로 인터페이스에 자유롭게 새로운 메서드를 추가할 수 있게 된다. 호환성을 유지하면서 API를 바꿀 수 있는 것이다. java8의 java.util.Collection 인터페이스 java7의 Collection 인터페이스는 원래 removeIf 메소드가 없었다. Collection (Java Platform SE 7 ) Collection (Java Platform SE 7 ) Compares th..

Java & Spring 2023.05.08

이펙티브 자바 - 아이템 18 : 상속보다는 컴포지션을 사용하라

상속은 캡슐화를 위반할 수 있다 캡슐화 : 객체의 상태와 행동을 하나의 단위로 묶고, 외부에는 상태를 감추고 행동만을 노출시키는 것 상속을 통해 메소드 재정의를 수행할 수 있는데, 이는 캡슐화를 해칠수 있다. 릴리스마다 내부 구현이 달라질 수 있는 상위 클래스로 인해 하위 클래스가 오동작 할 수 있기 때문이다. 따라서 이미 구현된 class의 상속을 지양하고, implement 상속을 사용하는 것이 좋다. 하위 클래스의 오작동 : self-use 패턴을 사용했을 때 자기 사용 self-use : 자신의 다른 부분을 사용하는 것 / 한 메소드가 같은 클래스 내의 다른 메서드를 사용하는 패턴 public class InstrumentedHashSet extends HashSet { private int ad..

Java & Spring 2023.04.24

이펙티브 자바 - 아이템 1 : 생성자 대신 정적 팩터리 메서드를 고려하라

아래는 우리가 알고 있는 일반적인 생성자의 형태이다. public class Person { public Person() { } } Static Factory Method 이번 세션의 아이템 1에서 제안하는 방식은 정적 팩터리 메소드 ( Static Factory Method ) 를 이용하여 아래와 같은 형태로 선언하는 것이다. public class Person { private static Person PERSON = new Person(); private Person() { // 외부 생성 금지 } public static final Person getInstance() { // factory method return PERSON; } } static으로 선언된 메서드 new Object()와 같이..

Java & Spring 2023.04.18
728x90