생성자(Constructor)란?
인스턴스를 초기화 하는 메서드이다
인스턴스(Instance)란 메모리에 생성된 클래스를 말한다.
어떠한 클래스를 사용하고자 할 때는
new 연산자를 사용해 메모리 상에 클래스를 생성(인스턴스화) 하고
이 생성된 주소(인스턴스의 주소)를 리턴해 레퍼런스 변수에 저장하게 된다.
java Card c = new Card();
이때 생성자가 사용된다.
대체...어디...?
new Card( );는 사실 생략이 되어있다. 생략을 하지 않고 보게 되면
new 클래스명 생성자명( ); 이라고 생각하면 된다.
new 연산자에 의해 클래스가 힙 메모리 상에 인스턴스로 생성이 되고 이 인스턴스는 생성자에 의해 초기화가 된다. ( 정확히 말하면 인스턴스 변수 초기화)
이 초기화된 인스턴스의 주소가 레퍼런스 변수에 저장이 되는것이다.
하지만 생성자에는 조건이 있다.
그래서 다시 new Card( ) ; 를 보게 되면
1번 조건에 의해서 new Card Card ( ); 가 되고
여기서 클래스명이 중복이 되기 때문에 생략 되는것이다.
new (클래스명)클래스명( );
package bmi2;
public class PersonData {
private String name;
private double height;
private double weight;
name, height, weight를 인스턴스 변수로 갖는 클래스가 있다.
이렇게만 코드를 작성하여도 PersonData pd = new PersonData();로 생성자를 만들 수 있다.
컴파일러에서 하나의 생성자도 없을 경우에 자동으로 생성자를 생성해주기 때문이다.
package bmi2;
public class PersonData {
private String name;
private double height;
private double weight;
//만들때만 값을 세팅하고 나머지는 복사본 데이터에만 엑세스할수 있게 -->생성자
public PersonData(String name, double height, double weight) {
super();
this.name = name;
this.height = height;
this.weight = weight;
리턴 타입도 없고 클래스와 이름도 똑같다. 생성자가 맞다
그런데 생성자 내의 super();은 뭘까?
Object는 모든 클래스의 최상위 클래스로 extends Object가 생략된 것이다.
다시말해 super() 는 최상위 클래스인 Object의 생성자이다.
하지만 앞에서 말했듯이 생성자는 생략이 가능하기 때문에
Object 클래스에도 생성자가 보이지 않는다. (컴파일러에서 자동으로 디폴트 생성자를 생성)
물론 super()를 삭제해도 무방하다.
중요 내용만 정리하면, 생성자는
출처: https://aljjabaegi.tistory.com/408 [알짜배기 프로그래머]