본문 바로가기

Java4

객체는 인터페이스를 사용해 참조하라 cf) Item.51 : 매개변수 타입으로 클래스가 아닌, 인터페이스를 사용하라 → 객체는 클래스가 아닌 인터페이스로 참조하라로 확장 적합한 인터페이스만있다면 매개변수뿐 아니라, return, 변수, 필드를 전부 인터페이스 타입으로 선언하자 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 인터페이스를 타입으로 사용하는 습관은 프로그램을 훨씬 유연하게 만들어 준다 // Good Set sonSet = new LinkedHashSet(); Set sonSet = new HashSet(); //유연하게 변경가능 // Bad LinkedHashSet sonSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하면 이후 구현 클래스를 교체할 때 새 클래스의 생성자(혹은 다른 .. 2022. 5. 15.
Singleton 보장 방법 private 생성자 / 열거 타입으로 Singleton을 보장하자 Singleton 인스턴스를 오직 하나만 생성할 수 있는 클래스 cf) instance =? 싱글턴이 필요한 상황 무상태 객체 - 함수 설계상 유일성이 보장되야 하는 시스템 컴포넌트 (ex - Spring 컨테이너가 각 클래스에 대해 딱 한개의 인스턴스만 생성) Thread-safe가 보장되어야 하는 상황 클래스를 싱글턴으로 만든다. → 해당 클래스를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 이유 : 하나의 자원을 공유하기 때문에 프로덕션 DB에 사용되는 싱글턴 클래스라면 인스턴스가 하나이다. 따라서 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. Singleton 을 만드는 방법 방법 #1 - publi.. 2022. 1. 3.
Builder 패턴 정적 팩토리 메서드 , 생성자 - 매개변수가 많을 때, 선택적으로 고려해야한다면 불편함 존재 기존 해결 방법 : 점층적 생성자 패턴(Telescoping Constructor Pattern) 필수적인 파라미터들에 대한 생성자 설정 후, 선택적인 파라미터에 대해서는 해당 파라미터를 포함한 생성자를 연쇄적 호출 이를 통해 모든 파라미터들이 설정된 객체가 만들어진다. 장점 : 파라미터들이 유효한지를 생성자를 통해서 확인하면 일관성 유지 보장 문제점 : 클라이언트가 원하지 않는 파라미터까지 설정해야 한다. 개발자의 입장에서도 Class의 라인 수 증가, 호출 수 증가 - 클라이언트 코드를 작성하거나 읽기 어려운 문제 발생 자바빈즈 패턴(JavaBeans Pattern) 매개변수가 없는 생성자로 객체 생성 이후,.. 2022. 1. 3.
정적 팩토리 메서드 [ static factory method ] 기존 방법 : Client → instance of Class 획득 → public 생성자로 가져오기 public void main(String[] args){ Hello hello = new Hello(); // new Hello() -> 인스턴스 가져오기 hello = new Hello("xonmin"); // 다른 public 생성자 } public class Hello{ //아무것도 생성되지 않으면 default Constructor String name ; public Hello(String name){ this.name = name; } } 정적 팩토리 메소드 예시 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Bool.. 2022. 1. 1.