백수의 개발
-
Item 6. 불필요한 객체 생성을 피하라백수의 개발/이펙티브 자바 2019. 7. 16. 14:58
자주 사용되는 객체의 재사용 자주 사용되는 객체가 있다면 이는 매번 생성하기보다는 객체 하나를 재사용하는것이 훨씬 빠르고 효율적이다. 우리가 많이 사용하는 Boolean객체를 사용할 때, 아래와 같이 작성한다면 Boolean객체는 항상 새롭게 생성될 것이다. Boolean trueObject = new Boolean(true); Boolean falseObject = new Boolean(false); 그래서 Boolean에서의 true와 false는 Boolean객체 내에서 정적 필드 변수로 가지고 있어 재활용 된다. 따라서 아래처럼 사용하면 별도의 객체를 생성하지 않고, 기존에 만들어진 객체를 그대로 재활용 할 수 있다. Boolean trueObject = Boolean.TRUE; Boolean f..
-
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 2. 생성자에 매개변수가 많다면 빌더를 고려하라백수의 개발/이펙티브 자바 2019. 7. 9. 15:00
점층적 생성자 패턴(Telescoping constructor pattern) 필수 매개변수만 받는 생성자부터 시작하여 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개 받는 생성자, ..., 선택 매개변수를 전부 다 받는 생성자까지 모든 생성자를 작성하는 방식이다. 아래와 같이 클래스를 정의할 수 있다. public class NutritionFacts{ private final int servingSize; // 필수 private final int servings; // 필수 private final int calories; // 선택 private final int fat; // 선택 private final int sodium; // 선택 private final int ..
-
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..
-
ContentEditable에서 커서(Caret) 활용하기(1) - 자바스크립트백수의 개발/웹 2019. 6. 11. 18:30
1. ContentEditable이란? ... 특정 요소(Element)에 텍스트를 작성할 수 있도록하는 속성 아래와 같이 생성할 수 있다. 2. ContentEditable에서의 커서(Caret) ContentEditable에서 텍스트를 작성할 때 내가 작성하는 부분에 커서가 있는 것을 확인할 수 있다. 오늘은 커서의 정보를 확인하는 방법에 대해 알아보자. * 일반적으로 커서는 마우스 커서를 지칭하고, 텍스트 창에 있는 커서는 캐럿(Caret)이라고 지칭한다. 3. 커서의 정보 Selection const selection = window.getSelection() /*Selection{ anchorNode: node, anchorOffset: number, baseNode: node, baseOffs..