왜 매개변수가 있는 생성자를 정의하면 매개변수가 없는 기본 생성자는 없어지는거죠?


C#이랑 C++이랑 자바에서 매개변수가 있는 생성자를 만들면 매개변수가 없는 디폴트 생성자는 없어지잖아요. 전에는 그냥 그렇구나했었는데 갑자기 이게 왜 그런지 궁금해졌어요.

이렇게 되는 이유가 뭔가요? 이건 그냥 "이미 생성자를 하나만들었으니까 아마 이런 임의의 디폴트생성자는 필요없을거야" 하는 안전을 위한 예방조치인가요? 아니면 생성자를 하나 추가하면 컴파일러가 만들지 못하게 하는 기술적인 이유가 있는건가요?

  • 2016년 02월 01일에 작성됨

조회수 219


1 답변


좋아요
0
싫어요
채택취소하기

사용자가 생성자를 정의한다고 컴파일러는 추가하지 못한다는 기술적인 이유는 없습니다. 그러나 만약 생성자를 정의하지 않은 non-static클래스에서 클래스를 인스턴스화 시키길 원할때 컴파일러는 아무 일도 하지 않지만 인스턴스화가 가능하게 디폴트 생성자를 추가시켜야 합니다. 그러므로 내 코드가 제대로 작동하게 하기위해서 굳이 빈 생성자를 포함할 필요가 없게끔 만들어줍니다.

만약 매개변수가 하나이상 있는 생성자를 정의한다는것은 클래스를 인스턴스화 할때 이 생성자를 써서 클래스의 내용물을 초기화시켜주고 어떤 목적이 있을 가능성이 높은데 컴파일러가 임의로 디폴트 생성자를 정의해줄 경우 누군가가 이런 로직을 건너띄고 버그를 만들 가능성을 키웁니다. 만약 디폴트 생성자가 필요하다면 명시적으로 디폴트 생성자를 정의하는게 더 바람직한 방법입니다.

  • 2016년 02월 01일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close