본문 바로가기

이펙티브자바10

Effective Java #05 불필요한 객체는 만들지 말라 기능적으로 동일한 객체는 필요할 때마다 만드는 것보다 재사용하는 편이 낫다.객체를 재사용하는 프로그램은 메모리 관리에 더 용이하다. 절대로 피해야 할 극단적 예를 하나 들어보자. String s = new String("stringette"); 만위 위의 문장이 순환문(loop)나 자주 호출되는 함수 안에 있으면 그 숫자대로 String 객체가 만들어진다.* 가령 필자는 2년차 시절, 야구 기록 웹 API XML 반복문 안에 string 문을 통해 작성한 뒤 속도가 현저하게 떨어지는 증상을 겪은 뒤로 StringBuilder를 사용하기 시작했다. C#이나 자바나 string 문자가 변경되면 새로 객체가 생성된다.String s = "stringette"; 이라면 stringette2가 되면 새로운 객체가.. 2016. 4. 13.
Effective Java #04 객체 생성을 막을 때는 private 생성자를 사용하라 생성자를 생략하면 컴파일러는 자동으로 인자없는 public 기본 생성자를 만들어 버린다.사용자는 자동 생성자와 일반 생성자를 구별할 수 있는 방법이 없다.객체를 만들 수 없도록 하려고 클래스를 abstract로 선언해봤자 하위 클래스를 정의하는 순간 객체 생성이 가능해지며상속 받아 사용하는 것이 맞다고 생각 할 수도 있다. 이 경우 기본 생성자는 클래스에 생성자가 없을 때 생성되니, private 생성자를 클래스에 넣어 객체 생성을 방지해야 된다. 123456789//객체를 만들 수 없는 유틸리티 클래스public class UtilityClass{ //기본 생성자가 자동 생성되지 못하도록 하여 객체 생성 방지 private UtilityClass(){ throw new AssertionError(); .. 2016. 4. 13.
Effective Java #02 private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하라. 싱글턴은 객체를 하나만 만들 수 있는 클래스를 뜻한다. JDK 1.5 이전에는 싱글턴을 구현하는 방법이 두 가지라고 한다. (현재 글을 쓰고 있는 시점에 JDK 버전은 1.8까지 나온 것 같다.) 1234567//public final 필드를 사용한 싱글턴public class Elvis{ public static final Elvis INSTANCE = new Elvis(); private Elvis() {...} public void leaveTheBuilding() { ...}}Colored by Color Scriptercs 123456789//정적 팩터리를 이용한 싱글턴public class Elvis{ private static final Elvis INSTANCE = new Elvis(); .. 2016. 4. 13.
Effective Java #02 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라. 책에 나온 예문을 추려보면 다음과 같다. 1회 제공 칼로리에 지방, 포화 지방, 트랜스 지방, 콜레스테롤, 나트륨 등이 있는데 이런 클래스에는 어떠한 생성자나 정적 팩터리 메서드가 적합할까? 보통 프로그래머들은 이런 상황에는 다음과 같은 점층적 생성자 패턴 패턴을 적용한다고 한다.점층적 생성자 패턴은 다음과 같다. 123456789101112131415161718192021222324252627282930313233343536373839public class NutritionFacts{ //자바에서 final은 변수면 C#으로는 readonly이며 //함수에 final을 사용할 경우 상속 시, override를 사용할 시 오류가 난다. private final int servingSize; //(mL) .. 2016. 4. 12.