예제 및 구현을 통한 Java의 생성자 연결
게시 됨: 2023-06-05Java에서 생성자는 새로 생성된 개체를 초기화하는 데 사용되는 코드 블록으로 이해할 수 있습니다. 생성자는 Java의 인스턴스 메서드와 유사합니다. 그러나 Java의 생성자와 메소드 사이에는 중요한 차이점이 있습니다. 메소드에는 반환 유형이 있지만 생성자는 특정 반환 유형이 없습니다. 프로그래머는 종종 생성자를 Java의 특수한 유형의 메서드로 참조합니다.
Java의 생성자는 클래스와 동일한 이름을 가지며 다음과 같이 표시됩니다.
공개 클래스 myProgram{
// 생성자입니다.
마이프로그램(){
}
..
}
다른 생성자 내에서 생성자가 호출되면 Java에서 생성자 연결이 발생합니다. 그러나 Constructor Chaining에 대해 자세히 알아보기 전에 이해를 돕기 위한 몇 가지 예와 함께 Java에서 Constructor가 작동하는 방식을 먼저 간단히 살펴보겠습니다.
목차
Java의 생성자는 어떻게 작동합니까?
생성자의 작동 방식을 이해하기 위해 예제를 살펴보겠습니다. myProgram이라는 클래스가 있다고 가정합니다. 이제 이 클래스의 개체를 만들 때 다음 문을 작성해야 합니다.
myProgram obj = 새로운 myProgram()
보시다시피 위의 예에서 사용된 new 키워드는 myProgram 객체를 생성하고 생성자를 호출하여 이 새로 생성된 객체를 초기화합니다.
이것이 약간 혼란스럽게 들리더라도 걱정하지 마십시오. Java의 생성자 작업을 더 잘 이해하기 위해 Java의 간단한 생성자 프로그램을 살펴보겠습니다.
Java의 기본 생성자 프로그램
생성자를 사용하는 다음 Java 코드를 살펴보십시오.
공개 클래스 테스트{
스트링북;
//건설자
시험(){
this.book = "호밀밭의 파수꾼";
}
공개 정적 무효 메인(문자열[] 인수) {
테스트 객체 = 새로운 테스트();
System.out.println(obj.book);
}
}
산출:
호밀밭의 파수꾼
위 프로그램에서 Program 클래스의 'obj'라는 개체를 만들었습니다. 그런 다음 이 새로 생성된 개체의 인스턴스 변수 이름을 인쇄했습니다. 출력에서 볼 수 있듯이 생성자의 초기화 중에 'book'에 전달된 값과 출력이 동일합니다.
이것이 보여주는 것은 obj 객체가 생성되는 순간 생성자가 자동으로 호출된다는 것입니다. 여기서는 현재 개체를 참조하기 위해 'this' 키워드를 사용했습니다. 이 작업을 수행할 수 있는 더 많은 방법이 있으며, 이에 대해서는 이 기사의 뒷부분에서 Constructor Chaining에 대해 논의하면서 설명할 것입니다.
Java의 Constructor에 대한 기본 사항이 정리되면 Java의 Constructor Chaining 및 작동 방식으로 이동하겠습니다!
단일 클래스 내에서 생성자 연결
그러나 단일 클래스와 관련된Java의 생성자 연결은 무엇입니까 ?동일한 클래스의 다른 생성자에서 하나의 생성자를 호출하면 해당 클래스 내의 생성자 연결이 포함됩니다. "this" 키워드는 동일한 클래스 내 생성자 연결 구문에 사용됩니다. "this"가 사용될 때 현재 클래스 인스턴스가 참조됩니다.예제를 통해 Java에서 생성자 연결 의 사용법을 이해하는 것이 가장 좋습니다 .
기본/부모 클래스의 생성자 연결
Java의 클래스는 다른 클래스에서 파생될 수 있습니다. 파생 클래스는 하위 클래스라고 하며 파생 클래스는 수퍼 클래스라고 합니다. 하위 클래스는 자체 생성자를 가질 수 있으며 상위 클래스의 생성자를 호출할 수 있습니다.
수퍼클래스 생성자는 필수 입력이 뒤따르는 super()라는 용어를 사용합니다. super() 키워드는 항상 하위 클래스 생성자의 첫 번째 줄에 있어야 합니다.
다른 생성자, 빌더에서 호출
this() 키워드를 사용하여 Java의 생성자는 동일한 클래스에서 다른 생성자를 호출할 수 있습니다. 생성자의 첫 번째 키워드는 항상 this() 키워드여야 하며 동일한 유형의 다른 생성자를 호출하는 데만 사용할 수 있습니다.
전화 슈퍼클래스 생성자
Java의 super() 키워드를 사용하면 하위 클래스 생성자가 상위 클래스의 생성자를 호출할 수 있습니다. 하위 클래스의 상위 클래스 생성자를 호출하는 데만 사용할 수 있는 super() 키워드는 항상 하위 클래스 생성자의 첫 번째 줄이어야 합니다.
생성자가 다른 순서로 정렬되면 Java 프로그램이 다르게 동작할 수 있습니다. 클래스에 많은 생성자가 있고 그 중 하나가 this() 키워드를 사용하여 다른 생성자를 호출하는 경우 생성자의 순서를 변경하면 프로그램 동작 방식이 변경될 수 있습니다.
Init 블록을 사용하여 생성자를 연결하는 다른 방법
초기화 블록을 사용하는 것은 Java에서 생성자 연결 에 대한 또 다른 접근 방식입니다 .초기화 블록으로 알려진 코드 섹션은 다음과 같이 실행됩니다.
Java에서 생성자 연결의 필수 요소
같은 클래스의 다른 생성자에서 생성자를 호출하면 발생하는 일을 생성자 연결이라고 합니다. Constructor Chaining을 수행하는 주된 목적은 여러 다른 생성자를 통해 매개 변수를 전달하고 한 곳에서만 초기화하는 것입니다. 이렇게 하면 사용자에게 다른 생성자를 제공할 수 있는 동안 모든 초기화를 단일 위치에서 유지할 수 있습니다.
Constructor Chaining을 수행하지 않고 두 개의 서로 다른 Constructor에 하나의 매개변수가 필요한 경우 해당 매개변수를 두 번 초기화해야 합니다. 또한 초기화가 변경될 때마다 하나가 아닌 모든 생성자를 각각 변경해야 합니다.
일반적으로 인수가 적은 생성자에서 인수가 더 많은 생성자를 항상 호출해야 합니다. 또한 클래스에서 여러 Constructor를 오버로드할 수 있음을 알아야 합니다. 그러나 객체가 생성될 때 하나의 특정 생성자만 호출됩니다. Java로 프로그래밍하는 동안 다른 객체를 생성하지 않고 서로 여러 생성자를 호출해야 하는 상황이 꽤 있을 수 있습니다. 다른 생성자에서 하나의 생성자를 호출하는 이 메커니즘과 관련된 생성자가 다른 생성자를 호출할 때 이를 생성자 연결이라고 합니다.
세계 최고의 대학에서 온라인으로소프트웨어 과정을배우십시오. PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 취득하여 경력을 빠르게 쌓으십시오.
최대한의 명확성을 보장하기 위해 Constructor Chaining과 관련하여 염두에 두어야 할 두 가지 기본 사항이 있습니다.
- 생성자 연결의 주요 목적은 코드를 유지 관리하는 것입니다. 아이디어는 프로그램 전체에서 재사용할 수 있는 단 하나의 코드만 작성하도록 돕는 것입니다. 이렇게 하면 코드가 깨끗하고 읽기 쉬울 뿐만 아니라 모든 생성자가 아닌 한 위치에서만 발생하는 모든 수정 및 변경으로 관리하기가 훨씬 쉬워집니다.
- 호출된 생성자는 별도의 객체를 생성하지 않습니다. 대신 현재 실행 중인 개체를 사용하여 다른 생성자를 호출합니다. 생성자이기도 한다는 점을 제외하면 생성자 내에서 다른 메서드를 호출하는 것과 같습니다.
이전 예제에서 본 것처럼 이 키워드를 사용하여 Constructor의 매개변수에 액세스했습니다. 마찬가지로 Constructor Chaining에도 기본적으로 두 개의 키워드가 필요합니다. 두 키워드는 다음과 같습니다.
- this – 메소드 표현은 현재 클래스 생성자를 호출합니다.
- super – 해당 메서드 표현은 직속 슈퍼 또는 상위 슈퍼클래스 생성자를 호출합니다.
또한 Java의 Constructor Chaining과 관련하여 몇 가지 다른 중요한 용어 및 정의를 알고 있어야 합니다.
- 생성자 호출: 생성자를 호출하고 해당 생성자가 성공적으로 호출되면 이를 생성자 호출이라고 합니다.
- 생성자 실행: 생성자를 호출하면 제어가 생성자 본문의 명령문 실행을 시작합니다. 이를 생성자 실행이라고 합니다.
Java에서 생성자 연결의 주요 규칙
Constructor Chaining의 기본 사항이 정리되면 Java에서 Constructor Chaining을 사용하는 데 필요한 몇 가지 필수 규칙을 살펴보겠습니다.
- this()는 동일한 생성자에 속하는 매개변수만 호출할 수 있습니다.
- super()는 직계 슈퍼클래스 생성자만 호출할 수 있습니다.
- this() 및 super()는 생성자에서 첫 번째 문이어야 합니다.
- 이 () 및 super()는 동일한 생성자 내에서 사용할 수 없습니다. 두 개체가 모두 첫 번째 문이어야 하기 때문에 실제로는 불가능합니다.
- this() 문 없이 하나 이상의 생성자가 있어야 하므로 동일한 클래스의 모든 생성자에 this()를 추가할 수 없습니다.
- Java에서 생성자의 호출 및 실행은 반대로 발생합니다. 따라서 생성자가 A, B, C 순서로 호출되면 C, B, A 순서로 실행됩니다.
예를 들어 여기에 서로 다른 생성자를 오버로드하여 작동하는 두 개의 개별 클래스가 있습니다. 생성자를 2, 1, 4, 3, 5 순서로 실행하려고 합니다.
생성자를 순서대로 실행하려면 5, 3, 4, 1, 2와 같이 정확히 반대 순서로 생성자를 호출해야 합니다. 아래 예를 참조하세요.
클래스 부모
{
부모()// 1
{
this("안녕하세요");
System.out.println("부모 0 인수 생성자 1");
}
부모(문자열 메시지)// 2
{
System.out.println("부모(문자열) 생성자 2에서");
}
}
클래스 생성자는 부모를 확장합니다.
{
생성자()// 3
{
this(10);// 5개의 숫자 생성자 호출
System.out.println("생성자 0 인자 생성자 3");
}
생성자(문자열 메시지)// 4
{
super(); // 1개의 숫자 부모 클래스 생성자 호출
System.out.println("Constructor(String msg) arg 생성자 4");
}
생성자(int i)// 5
{
this("hello");//4개의 숫자 생성자 호출
System.out.println("In Constructor(int i) 생성자 5");
}
// 메인() 메서드
공개 정적 무효 메인(String[] args)
{
생성자 cobj = new Constructor(); // 3개의 숫자 생성자 호출
}
}
산출:
부모(문자열) 생성자 2에서
부모 0 인수 생성자 1
In Constructor(String msg) arg 생성자 4
생성자(int i) 생성자 5
생성자 0 인수 생성자 3
마지막 예를 통해 Java의 생성자 및 생성자 연결의 모든 개념을 요약하면 다음과 같습니다.
클래스 엠프
{
공개 문자열 EName;
public int E수입;
공개 문자열 주소;
공공 엠프()
{
this("라훌");
}
공개 Emp(문자열 이름)
{
this(이름, 140035);
}
public Emp(문자열 이름, int sal)
{
this(이름, 살, “뉴델리”);
}
public Employee(문자열 이름, int sal, 문자열 추가)
{
this.EName=이름;
this.EEEarnings=sal;
this.주소=추가;
}
무효 disp() {
System.out.println("이름: "+E이름);
System.out.println("급여: "+Earnings);
System.out.println("주소: "+주소);
}
공개 정적 무효 메인(String[] args)
{
직원 obj = 새 직원();
obj.disp();
}
}
산출:
직원 이름: 라훌
직원 급여: 140035
직원 주소: 뉴델리
결론
이것으로 이 글을 마치겠습니다. 이것이 Java의 Constructor Chaining에 대한 귀하의 의심을 명확히 하고 귀하의 이해를 더욱 공고히 하셨기를 바랍니다. upGrad에서는 전 세계의 학생들이 자신의 잠재력을 최대한 발휘하고 경력에서 성공할 수 있도록 도와야 한다고 믿습니다. 우리의 과정은 신입생과 경험이 풍부한 전문가 모두를 염두에 두고 설계되었습니다.
그러한 과정 중 하나 는 특히 처음 구직자를 위해 설계된 upGrad의 소프트웨어 엔지니어링 작업 관련 PG 인증입니다 . 과정 내용을 확인하고 지금 바로 등록하세요! 업계 전문가 및 선도적인 전문가로부터 Java, DSA, OODAP, JavaScript, MERN, AWS 등과 같은 모든 관련 소프트웨어 엔지니어링 기술을 배우십시오.
Q: Java에서 세 개 이상의 생성자를 연결할 수 있습니까?
Java는 최대 두 개의 생성자 체인을 허용합니다. 이렇게 하면 더 복잡한 개체를 만들고 코드 중복을 줄일 수 있습니다.
Q: Java의 생성자가 자신을 호출하면 어떻게 됩니까?
자신을 호출하는 Java의 생성자는 스택 오버플로 오류와 무한 루프를 발생시킵니다.
Q: Java의 기본 생성자는 어떻게 보입니까?
Java의 기본 생성자는 입력을 허용하지 않는 생성자입니다. 클래스에 선언된 생성자가 없으면 생성자가 자동으로 생성됩니다.