정적 메서드와 정적 필드만을 담은 클래스는 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이지만 분명 나름의 쓰임새가 있다.예를 들어 java.lang.Math와 java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있다. 또한, java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(또는 팩토리)를 모아놓을 수도 있다. 그런데 이런 정적 멤버만 담은 클래스는 인스턴스로 만들어 쓰려고 설계한게 아니다. 아래 예시를 보자. static메서드만 가지고 있는 어떤 클래스가 있다고 가정해보자.public class UtilityClass { public UtilityClass(){} public static Cha..
Java
애플리케이션을 만들다보면 어떤 인스턴스가 애플리케이션에 하나만 존재해야 하는데 이럴때 사용하는것이 싱글턴이며, 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다.그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워 질 수 있다.왜냐하면 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 위 정보를 토대로 싱글턴을 만드는 일반적인 방식과 문제점을 살펴보자.1. private 생성자 + public static 멤버 변수class Elvis{ public static final Elvis INSTANCE = new Elvis(); private Elvis()..
생성자와 정적 팩토리 메서드는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 단점이 있다.https://lsh2016.tistory.com/101 빌더 패턴(Builder Pattern) 을 사용하는 이유먼저 , 학생이라는 객체를 생성하는 코드가 있고 , 아래와 같은 생성자 정의해두었다고 가정한다. public Student(long id,String name,String major,int age,String address){ this.id=id; this.name=name; this.major=major; this.aglsh2016.tistory.com과거에 여러 블로그를 참조해서 위와 같은 내용으로 빌더 패턴을 정리한적이 있는데 이제와서 알고보니 현재 보고있는 이펙티브 자바에 있는 내용이였다. ..
정적 팩토리 메서드는 생성자 대신 다양한 장점을 제공할 수 있다.💡여기서 말하는 정적 팩토리 메서드는 디자인 패턴에 나오는 팩토리 메서드와 다른것이다.디자인 패턴에서 정적 팩토리 메서드와 관련된 패턴은 없다.장점장점 1. 이름을 가질 수 있다.public class Person{ private String name; private Person(String name){ // 생성자를 private으로 제한 this.name = name; } public static Person from(String name){ // from이라는 이름을 가짐 return new Person(name); }}위처럼 생성자는 private으로 두면 클라이언트가 정적 팩토리 메서드를 사용하도록 유도할 수 있다.위 ..