• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

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

24.02.16 21:10 작성 24.02.21 23:18 수정 조회수 135

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님의 프로필

OMG

2024.02.16

안녕하세요. 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)의 순서가 변경되어도 이미 인스턴스 생성 시점에 받은 데이터를 출력하기 때문에

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

감사합니다.

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