전체 글(76)
-
[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 -
[Effective Java] 이펙티브 자바를 읽기 시작..
읽기 시작하는 이유 탄탄하고 효율적이게 코드를 짜는 법을 배우기 위해 읽기 시작한다. 이 책의 주요 원칙 명료성과 단순성 또한, 컴포넌트는 정해진 도앚ㄱ이나 예측 가능한 동작만 수행해고, 가능한 작게 만들어야 한다. 코드는 재사용 되어야 한다. 컴퍼넌트 사이의 유존성은 최소로 유지되어야 한다. 오류는 가능한 빨리 잡혀야 한다. 자바 8용 언어 면세 자바가 지원하는 타입 (자료형) 인터페이스, 클래스, 배열, 기본 타입 총 네 가지 Annotation 인터페이스의 일종, Enum은 클래스의 일종 공부 방법 자바봄 님의 방식 인용 https://javabom.tistory.com/70 처음 보는 용어에 대한 설명 요구 글로만 적혀있는 기술에 대한 사용법 요구 예제 코드에 대한 설명 문단 문맥 이해 코드에 대..
2022.02.28