본문 바로가기

Java/Effective Java 3E61

[이펙티브자바 3판] ITEM63. 문자열 연결은 느리니 주의하라 이번장의 핵심은... 성능에 신경 써야 한다면 많은 문자열을 연결할 때는 문자열 연결 연산자(+)를 피하자 String 대신 StringBuilder의 append()를 사용하자 String + String 문자열 연결 연산자(+)는 문자열을 하나로 합쳐주는 편리한 수단이다 작고 크기가 고정된 객체의 문자열 표현을 만들때라면 괜찮지만, 성능 저하가 올 수 있다 문자열 연결 연산자로 문자열 n개를 잇는 시간은 n 제곱에 비례한다 문자열은 불변이라서 두 문자열을 연결할 경우, 양쪽의 내용을 모두 복사해서 새로 문자열을 생성하므로 성능 저하는 피할 수 없는 결과다 * 문자열 연결을 잘못 사용한 경우 - 느리다.. 품목이 많을 수록 이 메서드는 심각하게 느려질 수 있다 public String statement.. 2020. 9. 5.
[이펙티브자바 3판] ITEM4. 인스턴스화를 막으려거든 private 생성자를 사용하라 이번장의 핵심은... 단순히 정적 메서드와 정적 필드만을 담을 클래스를 만들고 싶다면, 객체가 인스턴스화되는 것을 막기 위해서 priate 생성자를 추가하자 java.lang.Math, java.util.Arrays 기본 타입 값이나 배열 관련 메서드들을 모아놓음 java.util.Collections 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드 또는 팩터리를 모아 놓음 -> java8 부터 이런 메서드를 인터페이스에 넣을 수 있다 final 클래스 final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능하기 때문에 final 클래스와 관련된 메서드들을 모아놓을 때도 사용 이렇게 정적 멤버만 담은 유틸리틔 클래스는 인스턴스로 생성하도록 설계하면 안된다 주의할점은 추상 클래스로 만드.. 2020. 9. 5.
[이펙티브자바 3판] ITEM3. private 생성자나 열거타입으로 싱글턴임을 보증하라 이번장의 핵심은... 싱글턴을 이해하고 싱글턴을 만드는 3가지 방식을 알아두자 - (3번째 방식[열거 타입으로 싱글턴 생성]이 가장 좋은 방법) 싱글턴이 뭐야? 인스턴스를 오직 하나만 생성할 수 있는 클래스이다 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어렵다 (타입을 인터페이스로 정의하여 구현한 싱글턴이 아닌 싱글턴 인스턴스는 Mock 구현으로 대체할 수 없다) 싱글턴을 만드는 3가지 방식 1. public static 멤버를 통해 인스턴스에 접근 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {..} public void leaveTheBuilding() {..... 2020. 9. 4.
[이펙티브자바 3판] ITEM2. 생성자에 매개변수가 많다면 빌더를 고려하라 이번장의 핵심은... 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 선택하는게 더 낫다 → 매개변수 중 다수가 필수가 아니거나 같은 타입이면 특히 더 그렇다. 빌더는 점층적 생성자보다 클라이언트 코드를 읽고 쓰기가 훨씬 간결하고, 자바빈즈보다 훨씬 안전함 점층적 생성자 패턴 A a = new A(240,2,2,3,4,...) → 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기 어려움 자바빈즈 패턴 → 매개변수가 없는 생성자로 객체를 만든 후, setter 메서드들을 호출해 원하는 매개변수의 값을 설정하는 방식 A a = new A(); a.setName(~); a.setAge(~); → 자바빈즈 패턴에서는 객체 하나를 만들려면 메서드를 여러 개 호출해야 하고, 객체가 완전히.. 2020. 9. 3.
[이펙티브자바 3판] ITEM1. 생성자 대신 정적 팩터리 메서드를 고려하라 이번장의 핵심은... 정적 팩터리 메서드와 public 생성자는 각자의 쓰임새가 있으니 상대적인 장단점을 이해하고 사용하는 것이 좋음 → 정적 팩터리 사용이 유리한 경우가 더 많으므로 무작정 public 생성자를 제공하던 습관이 있다면 고치자 정적 팩터리 장점 이름을 가질 수 있음 ex) 생성자 BigInteger(int, int, Random), 정적 팩터리 메서드 BigInteger.probablePrime 호출될 때마다 인스턴스를 새로 생성하지 않아도 됨 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있음 자바 8부터 인터페이스가 정적 메서드를 가질 수 없다는 제한이 풀림 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있음 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클.. 2020. 9. 3.