Programming/JAVA

자바의 생성자(Constructor) : new

sky Jeong 2021. 3. 31. 19:34

생성자

클래스의 인스턴스. 즉, 객체를 생성할 때마다 new 키워드를 사용한다.

 

 Animal animal = new Animal( );

이렇게 말이다. ' new 클래스명( ) '을 자세히 살펴보면 열고 닫는 소괄호가 존재한다. 이는 한 마디로 ' 클래스명( ) ' 또한 메서드임을 이야기한다.

 

  • 객체 생성자 메서드 : 반환값이 없고 클래스명과 동일한 이름의 메서드로 객체를 생성하는 메서드임

객체 생성자 메서드의 경우 매개인자가 아무것도 없는 default 생성자를 자바에서 자동으로 생성한다. 하지만, 만약 인자 값을 요하는 생성자 메서드를 선언할 경우, default 생성자는 따로 명시해야 선언된다.

 

 

위 예시 코드를 보면, Animal 클래스 내에는 아무것도 선언되어 있지 않지만 Driver 클래스에서 객체 생성자 메서드를 호출해 객체를 생성하였다.

 

앞서 언급되었듯이 default 생성자는 따로 명시하지 않아도 생성된다. 필요에 따라 인자를 갖는 생성자를 생성할 수 있다.

 

이렇게 말이다. 하지만 이 경우 앞서 작성한 코드가 말썽을 부린다.

 

 

이유는 무엇일까? 생성자에서 String을 인자로 받고 있다. Default 생성자는 이전에 있지 않았나? 이전에는 존재하였으나, 인자를 갖는 생성자를 생성함으로 자바는 자동으로 default 생성자는 지운다고 보면된다.

 

Default 생성자와 인자 값을 요하는 생성자가 모두 필요하다면 아래와 같이 Default 생성자 또한 구현하면 된다.

 

매개인자를 다르게 하여 메서드를 구현한 것을 오버로딩이라한다.

이로 앞서 발생한 오류가 해결된다. 다시 Driver 클래스로 돌아가 보면

 

매개인자 값에 맞추어 오버로딩 된 생성자 중 알맞는 생성자를 생성한다.

정리해보겠다.

 

  • 개발자가 어떠한 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 생성한다.

  • 하지만 인자가 있는 생성자를 하나라도 만든다면, 자바는 기본 생성자를 만들지 않는다.

  • 생성자가 필요한 만큼 개발자는 오버로딩하여 여러 생성자를 만들 수 있다.

  • 생성자라 이야기하지만, 정확하게 표현하자면 '객체 생성자 메서드'이다.