생성자(Constructor)

Ina Kim·2021년 1월 6일
0

Java_초급

목록 보기
4/11

생성자(Constructor)란?
인스턴스를 초기화 하는 메서드이다

인스턴스(Instance)란 메모리에 생성된 클래스를 말한다.
어떠한 클래스를 사용하고자 할 때는
new 연산자를 사용해 메모리 상에 클래스를 생성(인스턴스화) 하고
이 생성된 주소(인스턴스의 주소)를 리턴해 레퍼런스 변수에 저장하게 된다.

java Card c = new Card();

이때 생성자가 사용된다.

대체...어디...?


Card c = new Card();

new Card( );는 사실 생략이 되어있다. 생략을 하지 않고 보게 되면
new 클래스명 생성자명( ); 이라고 생각하면 된다.
new 연산자에 의해 클래스가 힙 메모리 상에 인스턴스로 생성이 되고 이 인스턴스는 생성자에 의해 초기화가 된다. ( 정확히 말하면 인스턴스 변수 초기화)
이 초기화된 인스턴스의 주소가 레퍼런스 변수에 저장이 되는것이다.


하지만 생성자에는 조건이 있다.

1. 생성자명은 클래스명과 같아야 한다.

2. 리턴타입이 없어야 한다.

그래서 다시 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()를 삭제해도 무방하다.


중요 내용만 정리하면, 생성자는

1. 클래스의이름과 같은 메서드이다.

2. 유일하게 메서드의 리턴타입이 없다.

3. 인스턴스 변수를 초기화 하는 역할을 한다.


출처: https://aljjabaegi.tistory.com/408 [알짜배기 프로그래머]

profile
기록하는것을 좋아합니다

0개의 댓글