Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

AI가 번역한 다른 언어 보기

제이온

[이펙티브 자바] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

  • 작성 언어: 한국어
  • 기준국가: 모든 국가 country-flag

언어 선택

  • 한국어
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

durumis AI가 요약한 글

  • 정적 메서드와 필드만을 포함하는 유틸리티 클래스는 생성자가 필요하지 않지만, 컴파일러는 자동으로 public 기본 생성자를 생성하기 때문에 인스턴스화를 막기 위해 생성자의 접근 제어자를 private으로 설정하는 것이 좋다.
  • private 생성자는 외부에서 접근할 수 없도록 하며, 내부에서 호출될 경우 예외를 발생시키도록 설정하여 유틸리티 클래스의 인스턴스화를 방지한다.
  • private 생성자는 사용자가 생성자를 이해하기 어려울 수 있으므로 주석을 달아주는 것이 좋으며, 생성자를 private으로 설정하면 상속도 불가능하게 된다.

가끔 정적 메서드와 정적 필드만을 담은 클래스를 사용하면 유용할 때가 있다.


대표적으로, java.lang.Math, java.util.Arrays 와 같이 수학 연산이나 배열에 관련된 메서드들을 모아 놓는 유틸리티 클래스들을 사용할 수 있다. 혹은 java.util.Collections 와 같이 특정 인터페이스를 구현하는 객체를 생성해 주는 정적 팩터리 메서드를 모아 놓을 수도 있다.


이러한 유틸리티 클래스들은 따로 인스턴스 변수나 메소드가 없어도 사용할 수 있으므로 생성자가 필요하지 않다. 하지만, 생성자를 명시하지 않으면 컴파일러가 자동으로 public 기본 생성자를 만들어 준다. 그래서 사용자는 이 생성자가 자동으로 생성된 것인지 구분할 수가 없다.


이를 막기 위해 추상 클래스로 만드는 경우가 있는데, 추상 클래스로는 인스턴스화를 막을 수 없다. 하위 클래스를 만들어 인스턴스화하면 그만이기 때문이다.


public abstract class Person {

    public static void speak(String message) {
        System.out.println(message);
    }
}

public class Student extends Person {

    public Student() {
        super();
    }
}


그래서 유틸리티 클래스의 인스턴스화를 막기 위해서는 생성자의 접근 제어자를 private으로 만들어 주어야 한다.


public abstract class Person {

    private Person() {
        throw new AssertionError();
    }

    public static void speak(String message) {
        System.out.println(message);
    }
}


위와 같이 기본 생성자의 접근 제어자가 private이면 클래스 외부에서는 접근할 수 없다. 또한, 기본 생성자가 내부에서 호출될 경우 예외를 발생하도록 막아두었다.


이러한 private 생성자는 사용하는 입장에서 생성자를 이해하기 어려울 수 있으므로 주석을 달아주는 것도 좋다. 참고로 생성자를 private으로 막으면 상속을 불가능하게 하는 효과도 있다.


출처

제이온
제이온
제이온
제이온
[이펙티브 자바] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩터리 메서드는 생성자 대신 인스턴스를 생성하는 데 사용할 수 있는 유용한 방법입니다. 이름을 가질 수 있고, 생성자보다 더 많은 유연성을 제공하며, 플라이웨이트 패턴, 싱글톤 패턴, 서비스 제공자 프레임워크와 같은 디자인 패턴을 구현하는 데 사용할 수 있습니다.

2024년 4월 27일

[이펙티브 자바] 아이템 5. 자원을 명시하지 말고 의존 객체 주입을 사용하라 클래스가 내부적으로 하나 이상의 자원에 의존하는 경우, 싱글턴과 정적 유틸리티 클래스 대신 의존 객체 주입을 사용하는 것이 좋습니다. 의존 객체 주입을 통해 클래스의 유연성, 재사용성, 테스트 용이성을 향상시킬 수 있습니다.

2024년 4월 28일

[이펙티브 자바] 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 매개변수가 많은 클래스를 생성할 때 빌더 패턴을 사용하면 코드 가독성을 높이고, 안정적인 객체 생성을 보장할 수 있습니다. 빌더 패턴은 필수 매개변수를 이용하여 빌더 객체를 생성하고, setter 메서드를 통해 선택 매개변수를 설정하며, build() 메서드를 호출하여 최종 객체를 얻는 방식입니다. 빌더 패턴은 클라이언트 입장에서 코드 작성 및 읽기가 용이하며, 계층적으로 설계된 클래스와 잘 어울립니다.

2024년 4월 27일

물리적 데이터 모델링 물리적 데이터 모델링은 논리적 데이터 모델링을 기반으로 저장 공간 효율성, 오브젝트 파티셔닝, 인덱스 최적화 등 성능 향상에 중점을 둡니다.
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024년 4월 9일

[비전공, 개발자로 살아남기] 14. 신입 개발자 자주 묻는 기술면접 내용 요약 신입 개발자 면접에서 자주 나오는 기술 질문과 답변을 정리했습니다. 메모리 영역, 자료구조, 데이터베이스, 프로그래밍 패러다임, 페이지 교체 알고리즘, 프로세스와 스레드, OSI 7 계층, TCP와 UDP 등 다양한 주제를 다룹니다.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024년 4월 3일

[Next.js] Runtime env injection Next.js 프로젝트에서 빌드 타임 이후 환경 변수를 설정하는 방법을 윈도우 환경에서도 사용할 수 있도록 cross-env를 이용하여 `package.json`의 스크립트를 수정하는 방법을 설명합니다.
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

2024년 3월 20일

[Javascript] Object의 구조 (V8) JavaScript에서 Object는 내부적으로 해시테이블과 유사한 방식으로 동작하지만, V8 엔진에서는 Hidden class를 이용하여 Fast 모드와 Dictionary 모드로 변환되어 성능을 최적화합니다. Hidden class는 객체의 구조를 정의하고 Fast 모드에서는 빠른 속도를 제공하지만, 키 추가 등의 변화가 발생하면 Dictionary 모드로 전환되어 해시테이블처럼 동작하며 성능이 저하될 수 있습니다.
곽경직
곽경직
곽경직
곽경직
곽경직

2024년 3월 18일

Rust가 동시성 버그를 방지하는 방법 Rust는 강력한 타입 시스템을 통해 동시성 프로그래밍에서 발생하는 일반적인 버그를 컴파일 타임에 감지하여 안전성을 높입니다. 특히, 스레드에 값을 전달할 때 move 클로저를 사용하여 값을 이동시켜야 하고, 여러 스레드에서 공유되는 변수는 Arc와 Mutex와 같은 내부 가변성 패턴을 활용하여 안전하게 관리할 수 있습니다.
곽경직
곽경직
곽경직
곽경직
곽경직

2024년 3월 28일

개념적 데이터 모델링 개념적 데이터 모델링은 정보를 엔티티로 분리하고, 엔티티 간의 관계를 ERD로 표현하는 과정입니다. 엔티티는 독립적인 데이터 저장 단위이며, 속성은 엔티티가 가진 데이터를 의미합니다. ERD에서는 식별자를 사용하여 엔티티를 고유하게 식별하며, 식별자는 기본 키, 후보 키, 대체 키, 중복 키 등으로 구분됩니다. 엔티티 간의 관계는 존재에 의한 관계와 행위에 의한 관계로 나뉘며, 카디널리티와 옵셔널리티를 통해 수적 관계와 필수/선택적 관계를 표현합니다.
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

2024년 4월 8일