Java의 개인 생성자

Rupam Yadav 2023년10월12일
  1. Java에서 Private 생성자 정의하기
  2. Java에서 싱글톤 패턴을 사용하는 개인 생성자
  3. Java에서 빌더 패턴을 사용하는 개인 생성자
Java의 개인 생성자

생성자는 가장 먼저 실행되는 클래스의 가장 중요한 부분 중 하나이며 클래스의 어떤 것보다 먼저 초기화해야 하는 인수를 전달할 수 있습니다.

일반적으로 어떤 함수에서든 객체를 생성할 수 있도록 public 한정자를 사용하여 생성자를 생성하지만 프라이빗으로 만들고 싶은 몇 가지 시나리오가 있으며 다음 섹션에서 이에 대해 살펴볼 것입니다.

Java에서 Private 생성자 정의하기

이 섹션에서는 private 생성자를 사용하여 클래스의 개체를 만들려고 합니다.

이 프로그램에는 ExampleClass2AnotherClass라는 두 개의 클래스가 있습니다. AnotherClass에는 private 수정자와 print 문이 있는 생성자가 있습니다.

ExampleClass2 클래스에서 이 클래스의 개체를 만들 때 AnotherClass에 개인 액세스 권한이 있다는 오류가 발생합니다.

생성자에 대한 액세스를 제한하며 이 자습서의 다음 섹션에서 볼 특정 방식으로 유용할 수 있습니다.

public class ExampleClass2 {
  public static void main(String[] args) {
    AnotherClass anotherClass = new AnotherClass();
  }
}

class AnotherClass {
  private AnotherClass() {
    System.out.println("This is a private constructor.");
  }
}

출력:

java: AnotherClass() has private access in com.tutorial.AnotherClass

Java에서 싱글톤 패턴을 사용하는 개인 생성자

우리는 싱글톤 패턴을 사용하여 전체 프로그램에서 단일 클래스 인스턴스만 생성합니다. 공개 생성자는 프로젝트의 거의 모든 곳에서 액세스할 수 있으므로 비공개 생성자를 사용합니다.

아래 프로그램에서 메시지를 표시하는 개인 생성자를 사용하여 AnotherClass 클래스를 만듭니다. 클래스의 인스턴스를 반환하는 함수가 필요하므로 객체를 생성하지 않고 호출할 수 있도록 public 및 static인 getInstance()라는 함수를 생성합니다.

getInstance() 메소드 내에서 new AnotherClass()를 반환하고 반환 유형을 AnotherClass로 설정합니다. 인스턴스의 메서드를 호출할 수 있는지 테스트하기 위해 다른 함수를 만듭니다.

이제 AnotherClass의 인스턴스를 반환하는 getInstance() 함수를 호출하고 이 인스턴스를 사용하여 dummyMethod()를 호출합니다.

public class ExampleClass2 {
  public static void main(String[] args) {
    AnotherClass anotherClass = AnotherClass.getInstance();
    anotherClass.dummyMethod();
  }
}

class AnotherClass {
  private AnotherClass() {
    System.out.println("This is a private constructor.");
  }

  public static AnotherClass getInstance() {
    return new AnotherClass();
  }

  public void dummyMethod() {
    System.out.println("This is just a dummy method");
  }
}

출력:

This is a private constructor.
This is just a dummy method

Java에서 빌더 패턴을 사용하는 개인 생성자

개인 생성자의 또 다른 사용 사례는 프로그램에서 빌더 패턴을 사용할 때입니다. 다음 코드에서 firstName, lastNameage라는 세 개의 클래스 변수를 사용하여 User 클래스를 만듭니다.

생성자에서 이러한 모든 변수를 초기화하고 생성자를 비공개로 만듭니다.

우리는 또한 값을 인쇄하는 방법을 만듭니다. User 클래스 내부에 개체를 빌드하기 위해 BuilderClass라는 내부 클래스를 만듭니다.

‘BuilderClass’는 다른 클래스가 액세스할 수 있으므로 public입니다.

BuilderClass 클래스에 세 개의 변수를 생성하여 User 클래스의 변수를 설정합니다. 값을 설정하는 setter 메서드를 만든 다음 값과 함께 this를 반환합니다.

새로운 값이 설정된 User 객체를 반환하는 buildObject() 메서드를 생성하여 값이 있는 객체를 반환합니다.

이제 ExampleClass2 클래스에서 공개된 BuilderClass() 클래스를 얻습니다. 그런 다음 UserBuilder 개체를 사용하여 setter 메서드를 사용하여 값을 설정한 다음 User 개체를 반환하는 buildObject() 메서드를 호출합니다.

getUserDetails() 함수를 호출하여 값을 인쇄합니다.

public class ExampleClass2 {
  public static void main(String[] args) {
    User.BuilderClass userBuilder = new User.BuilderClass();
    User getUser = userBuilder.setFirstName("Micheal").setLastName("Fisk").setAge(26).buildObject();

    getUser.getUserDetails();
  }
}

class User {
  private final String firstName;
  private final String lastName;
  private final int age;

  private User(String firstName, String lastName, int age) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
  }

  public void getUserDetails() {
    System.out.println("First Name: " + firstName);
    System.out.println("Last Name: " + lastName);
    System.out.println("Age: " + age);
  }

  public static class BuilderClass {
    private String firstName;
    private String lastName;
    private int age;

    BuilderClass setFirstName(String firstName) {
      this.firstName = firstName;
      return this;
    }

    BuilderClass setLastName(String lastName) {
      this.lastName = lastName;
      return this;
    }

    BuilderClass setAge(int age) {
      this.age = age;
      return this;
    }

    public User buildObject() {
      return new User(firstName, lastName, age);
    }
  }
}

출력:

First Name: Micheal
Last Name: Fisk
Age: 26
작가: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

관련 문장 - Java Constructor