• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

overloading하지 않을 시 초기화가 불필요한 이유가 궁금합니다!!

22.02.27 14:08 작성 조회수 122

0

안녕하세요. 재밌게 수강하고 있는 학생입니다.😁 이번 강의의 객체 생성 파트에서 의문이 생겨 질문드립니다.

TPC12(<객체가 메모리에 어떻게 만들어지나(실습)> 수업)에서는 overloading하면서 default constructor이 실행되지 않기 때문에 초기화를 따로 해줘야 했습니다.

BookVO()의 class 파일에서 

public BookVO() {

   this.title="자바"

   ...}

이 부분입니다.

그런데 이번 강의에서 바로 따로 초기화하는 과정 없이 바로

public BookDTO2(String title, int price, String company, int page) {}

를 정의하면 되더군요. 이건 overloading이 아니라 그런거겠죠.

그런데, 생성자가 새로 정의돼있으면 default constructor가 자동으로 생성되지 않는 건 마찬가지일 텐데 그래도 정상으로 작동하는 이유가 뭔가요? 

 

답변해주시면 정말 감사하겠습니다.🤓

답변 1

답변을 작성해보세요.

1

class안에 생성자는 여러개 있어도 되고 없어도 됩니다. class안에 생성자가 명시적으로 없으면 기본생성자가 만들어지구요.

그리고 생성자는 객체생성시에 호출이 됩니다.
개발자가 
1. new BookVO(); 처럼 기본생성자를 호출하여 객체를 생성할 수도 있고,
2. new Book("자바",20000,"영진", 500); 이것처럼 overloading된 생성자를 호출하여 객체를 생성할 수도 있습니다.

1,2번중 어떤 생성자를 이용하여 객체를 생성할것인지에 따라서 어떤 생성자가  필요할 것인지 결정된다는 뜻입니다.
그렇기 때문에 아래 BookVO클레스에 필요한 생성자만 만들어 두시면됩니다.
2개를 만들어도 되고 1개를 만들어도 되구요. 단 어떤생성자를 사용할 것인지를 확인한 후에 만드시면 됩니다.
아래 예시는 참고하세요^^

예시)
public class BookVO{
    public BookVO(){

   }  
}
-> BookVO b=new BookVO(); // 기본생성자를 이용하여 객체생성 및 초기화
--------------------------------------------------------------------------
public class BookVO{
    public BookVO(String title, int price, String company, int page){

   }  
}
-> BookVO b=new Book("자바",20000,"영진", 500);  // 새로운생성자를 이용하여 객체생성 및 초기화
-> BookVO b=new BookVO();  // X 이렇게하면 에러가 발생합니다.(기본생성자가 만들어지지 않아서)

이해가 되셨을까요?

말그대로 defalut constructor가 만들어지지 않았기 때문에 BookVO b=new BookVO(); 가 실행되지 않은 거였군요!! 빠르고 정확한 답변 감사합니다!!👍