Programming/Java 24

[Effective Java] item4 - 인스턴스화를 막으려거든 private 생성자를 사용하라.

인스턴스화를 막으려거든 private 생성자를 사용하라! 정적 메소드와 정적 필드'만' 담은 클래스를 만들어보자. 솔직히 객체지향에서 이러면 욕먹기 딱 좋지만, 그런데 쓸데는 있을 것이다. (ex. java.lang.Math) 그리고 final 클래스와 관련한 메소드를 모을때도 상속해서 사용하는 것은 불가능하니 별개의 클래스로 빼기도 한다. 당연히 이런 클래스는 인스턴스를 만들어서 쓰려고 설계한게 아닌데... 일반적으로 생성자를 명시하지 않으면 자연스럽게 기본 생성자가 만들어진다. 이러면 의도치 않은 작업이 발생할 수 있으니 매우 위험하다! 그래서 그 대안으로 추상 클래스를 만들었다! public abstrct class test { public int Iamfree() { return 1; } } 완벽..

Programming/Java 2021.01.25

[Effective Java] item3 - private 생성자나 열거 타입으로 싱글턴임을 보증하라.

private 생성자나 열거 타입으로 싱글턴임을 보증하라! 이 글을 읽는 사람이라면 싱글턴 클래스에 대해서 알거라고 믿...지 말고 그래도 한번 짚고 넘어가자. 싱글턴 (Singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴을 만드는 방식은 일반적으로 두가지이다. 각각의 예시를 보자. public class LeaveMeAlone { public static final LeaveMeAlone PLEASE = new LeaveMeAlone(); private LeaveMeAlone() {} public void dontBortherMe() { System.out.println("Hew..."); } } 일반적인 방법이다. private 생성자는 초기화 과정에 딱 한번 호출되..

Programming/Java 2021.01.21

[Effective Java] item2 - 생성자에 매개변수가 많다면 빌더를 고려하라.

생성자에 매개변수가 많다면 빌더를 고려하라! 지난 item을 통해 정적 팩토리 메소드에 대해서 배웠다. 물론 약간의 단점만 감수하면 매우 훌륭한 도구이다. 다만 매개변수가 많으면 어떨까? 치킨이 먹고 싶으니 치킨 객체를 만든다고 가정해보자. 치킨 객체엔 다양한 인자들이 있다고 하자. 이름, 브랜드, 가격, 열량, 순살여부, (매우 중요하다!) 평점을 저장한다고 하자. 그렇다면 클래스의 기본 형태는 public class Chicken { private final String chickenName; // 필수 private final String brand; // 필수 private final int price; // 선택 private final int calrories; // 선택 private fin..

Programming/Java 2021.01.21

[Effective Java] item1 - 생성자 대신 정적 팩토리 메서드를 고려하라.

생성자 대신 정적 팩토리 메서드를 고려하라! 일반적인 public 생성자를 통한 인스턴스 생성을 고려해보자. public class ContactBook { public static void main(String[] args) { Contact contact1 = new Contact(); Contact contact2 = new Contact("Kim"); Contact contact3 = new Contact("Lee", 01000001111); } } public class Contact { // 인자가 없을 경우에 default 값은 공백/0이라고 가정하자. public Contact() {} public Contact(String name) {} public Contact(String name,..

Programming/Java 2021.01.20