Java에서 개인 생성자를 구현하는 방법



이 기사는 Java의 Private Constructor에 대한 상세하고 포괄적 인 지식을 제공하며 예제와 함께 사용됩니다.

생성자 개체의 상태를 초기화하는 데 사용됩니다. 메서드와 마찬가지로 생성자는 명령 만 호출 할 수있는 명령문 모음을 보유 할 수도 있습니다. 이 기사에서는 개인 생성자에 대해 다음 순서로 :

자바 생성자 소개

생성자는 객체 생성시 실행됩니다. 생성자와 그 응용 프로그램을 더 잘 이해하려면 상자를 클래스로 생각하십시오. Box 클래스에는 일부 클래스 변수 (예 : 길이, 너비 및 높이)가 있다고 가정합니다. 그러나 개체를 만들 때 (즉, 컴퓨터의 메모리에 상자가 있음) 치수 수량에 대해 정의 된 값이없는 상자가 존재할 수 있습니다.





당연히 아닙니다.

따라서 객체 생성시 클래스 변수에 값을 할당하기 위해 생성자가 도입되었습니다. 이것은 프로그래머 또는 Java 자체에 의해 명시 적으로 수행 될 수 있습니다. Java 자체에 의해 수행되면 기본 생성자라고합니다.



코더가 생성자에게 제공하는 액세스 지정자를 소유 한 모든 메서드는 비공개로 설정되며 클래스 자체 내에서만 액세스 할 수 있음을 이해하는 것이 중요합니다.

자바의 개인 생성자

싱글 톤 클래스

이름 자체에서 해당 클래스의 객체 수를 하나로 제한하면 클래스를 싱글 톤이라고 부를 수 있습니다. 이러한 경우 클래스는 둘 이상의 단일 객체를 가질 수 없습니다. 싱글 톤 클래스는 네트워킹 및 데이터베이스 연결과 같은 개념에서 철저하게 사용됩니다. 싱글 톤 클래스는 개인 수업 .



클래스의 인스턴스를 추출하는 다른 방법과 결과를 다시 가져 오는 반환 방법이 있어야합니다. 아래는 동일한 그림입니다. 첫 번째 그림은 'a.x'값이 20과 같고 'b.x'값도 20이되는 가능한 결과를 나타냅니다. 코드에서 싱글 톤 프라이빗 클래스를 정의하는 동안 생성자는 클래스 외부에서 액세스 할 수 없습니다.

a.x의 값 = 20

b.x의 값 = 20

// 프라이빗 생성자를 사용하여 싱글 톤 패턴 구현을 보여주기위한 // Java 프로그램. import java.io. * class MySingleton {static MySingleton instance = null public int x = 10 // private 생성자는 클래스 외부에서 액세스 할 수 없습니다 private MySingleton () {} // 사용자에게 인스턴스를 제공하는 팩토리 메서드 static public MySingleton getInstance () {if (instance == null) instance = new MySingleton () return instance}} // 드라이버 클래스 클래스 Main {public static void main (String args []) {MySingleton a = MySingleton.getInstance () MySingleton b = MySingleton.getInstance () ax = ax + 10 System.out.println ( 'Value of ax ='+ ax) System.out.println ( 'Value of bx ='+ bx)}}

Java에서 Private Constructor의 영향

전용 생성자는 다른 클래스의 파생 클래스에 액세스 할 수 없습니다. 따라서 우리는 private 생성자를 호출하는 public 함수를 제공해야합니다. 객체가 초기화되지 않은 경우 또는 초기화 된 경우 객체에 인스턴스를 다시 보내야합니다. 이것은 초기화 할 수없는 객체에 특히 유용합니다. 개인 생성자는 다음과 같은 경우에 사용됩니다.

자바의 정적 블록 예제
  • 정적 메서드와 멤버 만있는 각 클래스.
  • 정적 최종 멤버 (상수) 만 널리 사용되는 특정 클래스입니다.
  • 싱글 톤을 통합합니다.
  • 공장 방법을 통합합니다.

형식이 안전한 열거를 활용합니다.

내부 생성자 체인

내부 생성자 체이닝은 생성자가 동일한 클래스의 다른 생성자를 호출 할 때 생성자 체이닝이라고 할 수 있습니다. 이 키워드를 사용하여 클래스의 다른 생성자를 호출하는 것이 우리의 의무입니다. 어떤 경우에는 클래스 변수의 일부 기본값을 정의하는 데 사용됩니다. 또 다른 생성자 호출은 코드 블록의 첫 번째 문이어야합니다.

또한 무한 루프를 생성하는 재귀 호출이 있어서는 안됩니다. 이제 자바 프로그램에서 생성자 체이닝의 예를 살펴 보겠습니다.

package com.journaldev.constructor public class Employee {private int id private String name public Employee () {this ( 'John Doe', 999) System.out.println ( 'Default Employee Created')} public Employee (int i) { this ( 'John Doe', i) System.out.println ( '기본 이름으로 만든 직원')} public Employee (String s, int i) {this.id = i this.name = s System.out.println ( '직원 생성')} public static void main (String [] args) {Employee emp = new Employee () System.out.println (emp) Employee emp1 = new Employee (10) System.out.println (emp1) Employee emp2 = new Employee ( 'Pankaj', 20) System.out.println (emp2)} @Override public String toString () {return 'ID ='+ id + ', Name ='+ name} public int getId () {return id } public void setId (int id) {this.id = id} public String getName () {return name} public void setName (String name) {this.name = name}}

싱글 톤 클래스 디자인 패턴

  • 클래스 레벨 멤버 (Eager Initialization Method) :

  1. 먼저 싱글 톤 클래스의 개인 상수 정적 인스턴스를 만듭니다.

  2. 그런 다음 클래스 멤버 인스턴스로 만든 싱글 톤 클래스의 객체를 반환하는 정적 메서드를 작성합니다.

    스윙 자바 사용 방법
  3. 정적 멤버를 공용으로 표시하여 상수 정적 인스턴스에 직접 액세스 할 수 있습니다.

  4. 싱글 톤 클래스는 인스턴스화 측면에서 일반 Java 클래스와 다릅니다. 일반 클래스에서는 생성자가 사용되지만 싱글 톤 클래스에서는 get Instance () 메서드를 사용합니다.

  • 클래스 수준 멤버 (지연 초기화 방법) :

  1. 먼저 생성자를 비공개로 시작합니다.

  2. 그런 다음이 싱글 톤 클래스의 비공개 정적 인스턴스를 만듭니다. 인스턴스화하지 마십시오.

  3. 그런 다음 정적 인스턴스 멤버의 null을 확인하고 인스턴스를 시작하는 정적 메서드를 작성합니다. 마지막으로 싱글 톤 클래스의 객체를 반환합니다.

  • 클래스 수준 멤버 (이중 잠금 방법을 사용한 지연 초기화) :

인스턴스가 null 인 동안 두 스레드가 동시에 'if'문 안에 들어가는 두 스레드를 실행하는 것을 고려하십시오. 여기서 한 스레드는 동기화 된 블록으로 들어가 인스턴스를 만들고 다른 스레드는 차단됩니다. 첫 번째 스레드가 동기화 된 블록에 상주하므로 대기열의 스레드는 또 다른 싱글 톤 객체를 생성합니다. 두 번째 스레드가 동기화 된 블록에 들어가면 인스턴스가 null이 아닌지 확인하지 못합니다.

  • 중첩 된 내부 클래스 사용 (Lazy Load 메서드) :

여기에서는 JLS (Java Language Specification)를 기반으로합니다. Java Virtual Machine은 요청시에만 정적 데이터 멤버를로드합니다. 따라서 Singleton 클래스는 JVM에 의해 먼저로드됩니다. 따라서 클래스에는 정적 데이터 멤버가 없습니다.

싱글 톤 클래스 홀더는 SINGLE_INSTANCE를로드하지 않습니다. getIntance 메서드를 호출 할 때만이 일이 발생합니다. JLS는 클래스 초기화 실행을 보장합니다. 로드 및 초기화를 위해 정적 getInstance () 메서드에 대한 명시 적 동기화를 제공합니다. 초기화시 정적 변수 SINGLE_INSTANCE를 순차적으로 생성하므로 getInstance ()의 모든 동시 호출은 동기화 오버 헤드없이 동일하게 돌아옵니다.

  • 열거 형을 사용하여

위의 모든 접근 방식이 모든 경우에 완전한 솔루션은 아닙니다. 리플렉션을 사용하여 위 구현의 여러 인스턴스를 만들 수 있습니다. 두 시나리오 모두 개인 생성자를 우회하고 여러 인스턴스를 만들 수 있습니다. 따라서 새로운 접근 방식은 열거 형을 사용하여 싱글 톤 클래스를 만드는 것입니다. 열거 형 필드는 컴파일 된 시간 상수이므로 열거 형 유형의 인스턴스입니다. enum 형식이 처음으로 참조 될 때 생성됩니다.

이것으로 우리는 Java 기사의 Private Constructor의 끝으로 왔습니다. Private Constructors를 이해하고 Java에서 어떻게 사용할 수 있는지 이해하시기 바랍니다.

확인 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

SQL Server의 하위 문자열 (예제 포함)

질문이 있으십니까? 이 'Java Tutorial'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.