이펙티브 자바
-
Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라백수의 개발/이펙티브 자바 2019. 7. 15. 17:22
우리가 개발을 진행하면서 한 클래스 내에서 다양한 자원에 의존하는 경우가 많았을 것이다. 이러한 경우 의존 객체를 어떻게 관리하는 것이 좋을지 알아보자. 정적 유틸리티와 싱글턴 맞춤법 검사기를 구현하는 예를 통해 정적 유틸리티와 싱글턴을 통한 의존 객체 사용이 좋지 않음을 보자. 아래는 정적 유틸리티를 잘못 사용한 예이다. public class SpellChecker{ private static final Lexicon dictionary = ...; private SpellChecker(){} public static boolean isValid(String word){...} public List suggestions(String type){...} } 아래는 싱글턴을 잘못 사용한 예이다. publ..
-
Item 4. 인스턴스화를 막으려거든 private 생성자를 사용하라백수의 개발/이펙티브 자바 2019. 7. 14. 16:34
단순히 정적 메서드와 정적 필드만을 담은 클래스를 만든다면, 사실상 해당 객체의 인스턴스화를 목적으로 만든 것이 아닐 것이다. 그렇기 때문에 별도로 객체의 인스턴스화를 막아준다. 이는 객체 지향적으로 좋지 않은 클래스라고 여기는 경향이 있지만, 이도 나름 쓰임새는 있다. 객체 인스턴스화 막기 대표적으로 이러한 객체는 java.lang.Math, java.util.Arrays, java.util.Collections 등이 있다. 이 객체들은 인스턴스화를 막았기 때문에 아래와 같이 코드를 작성할 수 없다. Math mathObject = new Math(); Arrays arraysObject = new Arrays(); Collections collectionsObject = new Collection()..
-
Item 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라백수의 개발/이펙티브 자바 2019. 7. 13. 15:41
싱글턴이란? 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등의 경우, 인스턴스를 여러개 생성하면 자원을 낭비하거나 버그가 발생될 수 있어 오직 하나의 인스턴스만 생성하여 사용하도록 한다. 싱글턴을 보증하기 위해서는 private생성자 또는 열거 타입을 사용할 수 있다. private 생성자를 통한 싱글턴 보증 싱글턴으로 객체를 만들기 위해서는 new를 통해 인스턴스를 생성할 수 없도록 생성자에 private 접근 제어자를 지정해야한다. 또한 유일한 인스턴스를 반환할 수 있도록 정적 메소드를 지원해야하며, 해당 인스턴스를 참조할 정적 참조변수가 필요하다. 아래는 public static final 필드 방식의 싱글턴이다. public cl..
-
Item 1. 생성자 대신 정적 팩터리 메서드를 고려하라백수의 개발/이펙티브 자바 2019. 7. 3. 13:14
우리가 자주 사용하는 정적 팩터리 메서드 java개발을 하다보면 정적 팩터리 메서드를 사용하는 경우들이 있다. 대표적으로 Arrays, Collections 클래스에서 사용하는 메서드들이다. String[] nameArray = {"홍길동", "홍길순", "홍길두", "홍길희"}; List nameList = Arrays.asList(nameArray); Collections.sort(nameList); 이 뿐만 아니라 java의 primitive type에 대한 객체들에서도 정적 팩터리 메서드를 사용할 수 있다. int five = Integer.valueOf(5); boolean isCorrect = Boolean.valueOf(true); BigInteger bigIntegerTen = BigInt..