책 공부 (12) 썸네일형 리스트형 Effective Java Item 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 private 생성자를 사용하는 이유 인스턴스화란? 인스턴스화는 클래스로부터 객체를 만드는 과정이다. 인스턴스화를 통해 서로의 정보를 주고받기 위해 사용한다. Class(틀) Object(객체) -> ex) 붕어빵 틀과 붕어빵 1. 추상 클래스만으로는 인스턴스화를 막을 수 없다. - 함수를 선언하지 않기 때문에 인스턴스화 불가능 2. private 생성자를 추가하면 Class의 인스턴스화를 막을 수 있다. - 생성자를 갖고있지 않는 클래스가 있으면, 컴파일러가 자동적으로 만들어주기 때문에 private으로 선언하면 바깥에 서 호출이 불가능하여 인스턴스화를 막을 수 있다. Effective Java Item 3. Private 생성자나 열거타입으로 싱글톤을 보장하라 싱글톤을 만드는 방법 3가지 싱글톤이란? 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나만을 호출한다. 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 1. Eager Initalzation (이른 초기화) - 클래스의 인스턴스를 클래스 로딩 시점에 생성하는 방법 2. Static Block Initializatuin (정적 블럭 초기화) - Eager Initalzation (이른 초기화) 방식과 동일하지만 변수 셋팅 및 에러처리를 위한 구문을 담을 수 있다. 3. Lazy Initialization (늦은 초기화) - 클래스의 인스턴스가 사용되는 시점에 생성하는 방법 - Multi Thread 방식에서 싱글톤 보장이 되지 않는 다는 단점이 있다. 5. Enum .. Effective Java Item 2. 생성자에 매개 변수가 많다면 빌더를 고려하라 빌더를 사용하면 더 좋은 이유 1. 점층적 생성자 패턴의 단점을 회피할 수 있다. - 매개변수의 순서를 바꿔 넘겨줬을 때 컴파일러 과정에서 오류를 걸러낼 수 없고 원치 않은 데이터를 넘길 수 있다. - player1을 생성할 때 매개변수 순서를 기억해야 한다. 2. 필요한 매개변수만을 사용할 수 있다. - 매개변수가 많은 생성자를 만들 때는 불필요한 요소가 포함될 확률이 높다. - 필요한 매개변수만을 담는다면 유연성을 확보할 수 있다. 3. 코드의 가독성을 확보할 수 있다. - 코드가 좀 더 직관적으로 보이기 때문에 간결해 보이는 효과를 기대할 수 있다. 생성자나 정적 팩터리가 처리해야 할 매개변수가 많다면 빌더 패턴을 사용하는 것이 더 낫다. 빌더는 점층적 생성자보다 가독성이 좋고, 자바빈즈 보다 안정.. Effective Java Item 1. 생성자 대신 정적 팩토리 메소드를 고려하라 정적 팩터리 메서드가 생성자 보다 좋은 이유 1. 이름을 가질 수 있다. (직관적으로 해당 메서드의 역할을 알 수 있다.) - 메서드의 이름을 직관적으로 표현 ex) public int SumNum(int a, int b) 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. (싱글톤) - 정적 메서드와 캐싱 구조를 함께 쓰면 매번 새로운 객체를 생성할 필요가 없다. ex) Boolean.valueof(Bolean) 3. 반환타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. - 반환 객체의 클래스를 자유롭게 선택 할 수 있다. (유연성 확보) 4. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. - 반환 타입의 하위 타입이면 어떤 클래스의 객체를 반환하든 상관없다. 5. 정적.. 이전 1 2 다음