Java(15)
-
[Effective Java] 아이템 6 : 불필요한 객체 생성을 피하라
재사용성 같은 기능의 객체를 매번 생성하는 것 보다는 객체 하나를 재사용하는 것이 더 좋다. 재사용을 하면 반응 속도가 더 빠르고 코드도 세련되어 보인다. 특히 불변 객체는 언제든 재사용할 수 있다. String s = new String("bikini"); 이런 코드는 사용하지 않아야 하는 극단적인 예이다. 왜냐? 코드가 실행 될 때마다 String 인스턴스를 계속 생성해낸다. 만약 이 코드가 반복문이나 자주 호출되는 메소드 안에 존재한다면 실행시 쓸데없는 생성만 계속 될 것이다. 어떻게 사용해야 하나? String s = "bikini"; 이렇게 매번 new 생성자로 새로 생성되는 것이 아니라. 딱 하나의 인스턴스만 사용하게 사용하자. 이와 같이 인스턴스를 사용하면 같은 객체를 재사용할 수 있게 보장..
2022.03.16 -
[Effective Java] 아이템 5 : 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
클래스가 하나 이상의 자원에 의존한다면 싱글턴 패턴이나 정적 유틸리티 클래스에서는 사용을 하지 않은 것이 좋다. 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 정적 유틸리티를 잘못 사용한 예 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} //아이템 4 - 객체 생성 방지 public static boolean isValid(String word) { ... } public static List suggestions(String typo) { ... } } 싱글턴을 잘못 사용한 예 public class SpellChe..
2022.03.15 -
[Effective Java] 아이템 4 : 인스턴스화를 막으려거든 Private 생성자를 사용해라
정적 메소드와 필드만 담는 클래스 곱게 보지 않지만 쓰인새는 존재하는 클래스들 -> Java.lang.Math, Java.util.Array & Collections Final 크래스와 관련한 메소드를 모아 놓을때도 사용 -> 하위 클래스에 넣는건 불가 예시로 라이브러리 Array의 코드 일부를 가져왔다. public class Arrays { /** * This class is non-instantiable. */ private Arrays() { } 생성자를 명시하지 않으면 컴파일러가 생성자를 자동으로 생성 Public 생성자가 만들어진다. -> 사용자는 자동 생성이 되었는지 구분 불가 공개 API도 의도치 않게 인스턴스 될 수도 있다. 추상 클래스로 해도 상속시 무용지물이다. Private 생성자를..
2022.03.14 -
[Effective Java] 아이템 3 : private 생성자나 열거 타입으로 싱글턴임을 보증하라
Singleton 싱글톤 패턴은 인스턴스화를 제한하고, 클래스의 하나의 인스턴스만 JVM에 존재하도록 한다. 싱글톤 패턴은 Global access point에서 인스턴스를 가져올 수 있도록 제공한다. 로깅, 드라이버 개체, 캐싱 및 스레드 풀에 사용된다. Abstract Factory, Builder, Protorype and Facade 등과 같은 디자인 패턴에도 사용된다. 장점 객체를 생성하면 재사용이 가능해서 메모리 사용 낭비를 막을 수 있다. 전역 객체이기 때문에 다른 객체와도 공유가 가능하다. 단점 클래스의 싱글턴화 시 클라이언트 테스트가 어려워진다. 타입을 인스턴스 정의 시 구현한 인터페이스로 만든 싱글턴이 아닐시 인스턴스를 Mock로 대체 불가 싱글턴 생성 방식 Public Static F..
2022.03.10 -
[Effective Java] 아이템 2 : 생성자에 매개변수가 많다면 빌더를 고려하라
정적 팩토리와 생성자에는 동일한 제약 조건이 있다. -> 선택적 매개변수가 많을 때 적절히 대응하기 어렵다. 매개 변수가 많아질 경우 사용할 수 있는 세 가지를 고려해 볼 수 있다. 텔레스코핑 생성자 패턴 자바빈즈 패턴 빌더 패턴 (1) Telescoping constructor pattern 필수 매개변수와 선택 매개변수를 갖는 생성자의 형태를 띤다. 아래에 예시를 나타내겠다. 필수 매개변수만 갖는 생성자 필수 매개변수 + 하나의 선택 매개변수 생성자 필수 매개변수 + 두 개의 선택 매개변수 생성자 ... ... 위와 같이 필수 매개변수만 갖는 생성자를 생성할 수 있고, n개의 선택 매개변수를 생성하는 생성자를 함께 갖는 경우의 방식이다. 예제) 식품의 영양 정보를 표현하는 클래스를 생각해보자, 식품의..
2022.03.08 -
[Effective Java] 아이템 1 : 생성자 대신 정적 팩토리 메소드를 고려하라
아이템 1 : 생성자 대신 정적 팩토리 메서드를 고려하라 클래스의 인스턴스를 얻는 전통 수단은 public 생성자이다. 하지만, 꼭 알아둬야 하는 기법 -> static factory method public class item1 { private String name; // public 생성자 public item1(String name) { this.name = name; } // static factory method public static item1 myName(String name) { return new item1(name); } public static void main(String[] args) { item1 my = myName("haessae0"); // static factory m..
2022.03.01