인프런 커뮤니티 질문&답변

qwerty111222님의 프로필 이미지

작성한 질문수

김영한의 실전 자바 - 기본편

생성자 관련 질문드립니다.

해결된 질문

24.02.16 21:10 작성

·

200

·

수정됨

1

public class MemberConstruct {
    String name;
    int age;
    int grade;

    MemberConstruct(String name, int age){
        this(name, age, 50);
    }

    MemberConstruct(String name, int age, int grade){
        System.out.println("생성자 호출 name= " + name + "age= " + age + "grade= " + grade);
        this.name = name;
        this.age = age;
        this.grade =grade;
    }
}
this(name, age, 50);
   this.name = name;
        this.age = age;
        this.grade =grade;

안녕하세요. 생성자와 관련하여 질문드립니다.

  1. this(name, age, 50) 을 실행시키기 위해서는 this.name = name, this.age = age, this.grade = grade 코드가 최소 한번은 작성되어있어야 하나요?

   MemberConstruct(String name, int age, int grade){
        System.out.println("생성자 호출 name= " + name + "age= " + age + "grade= " + grade);
        this.name = name;
        this.age = age;
        this.grade =grade;
    }
}
  1. 제 생각으로는 System.out.println("생성자 호출 name= " + name + "age= " + age + "grade= " + grade); 코드 앞

    this.name = name, this.age = age, this.grade = grade 코드가 있어야 될 것 같습니다.

     

     

    제가 이해한 바로는 MemberConstruct 메서드의 매개변수 name, age, grade를 받고, this.name, this.age, this.grade를 사용하여 생성된 객체의 맴버변수(name, age, grade)에 대입하는 과정으로 이해했습니다. 그렇다면 this.name, this.age, this.grade가 먼저 실행되어야 되는 것 아닌가요? (대입한 값을 넣은 뒤 실행해야 되는 것 아닌가요?) 위 사진으로 첨부한 코드가 (생성자 호출 name = null age=0, grade =0)으로 실행되지 않고, 어떻게 정상적으로 실행되는지 궁금합니다.

     

     

답변 1

3

OMG님의 프로필 이미지

2024. 02. 16. 22:19

안녕하세요. qwerty111222님, 공식 서포터즈 OMG입니다.

1.

this(name, age, 50); 는 나를 정의하는 생성자(여기서는 MemberConstruct) 중 3개의 인자를 전달받는

MemberConstruct(String name, int age, int grade){ }

생성자가 MemberConstruct 클래스 내에 반드시 정의되어 있어야 합니다.

다른 클래스에서 MemberConstruct OMG = new MemberCustruct("OMG",10,20); 과 같은 코드를 호출하지 않아도 상관없습니다.

이 부분을 잘 구분해주세요 😀

-

2.대입한 값을 System.out.println 과 같은 출력문으로 먼저 출력해도 전혀! 문제되지 않습니다.

전달받은 정보는 이미 new연산자를 통해 인스턴스를 생성하기 위해 전달받았기 때문입니다.

예를 들어 다음과 같은 코드가 있습니다.

(1)MemberConstruct OMG = new MemberCustruct("OMG",10,20);

OMG 객체의 생성에 필요한 데이터들을 new 연산자와 인자를 통해 이름 나이 등의 데이터가 전달되고,

 

(2)System.out.println("생성자 호출 name= " + OMG + "age= " + 10 + "grade= " + 20);

을 출력하고,

(3)

this.name= name;

this.age = age;

this.grade =grade;

OMG의 멤버변수에 각각의 데이터를 세팅하는 과정으로 진행됩니다.

 

(2)와 (3)의 순서가 변경되어도 이미 인스턴스 생성 시점에 받은 데이터를 출력하기 때문에

멤버변수를 초기화하는 코드가 뒤에 나와도 문제되지 않습니다.

감사합니다.

qwerty111222님의 프로필 이미지
qwerty111222
질문자

2024. 02. 21. 23:18

상세한 설명 감사합니다!!^^