생성자 Constructor

Robyn·2023년 5월 2일
0

Java

목록 보기
12/15

생성자(Constructor)
기본 생성자, 매개변수 있는 생성자
객체를 생성해주는 일을 한다.
소괄호가 붙은 건 모두 메소드이므로 생성자도 일종의 메소드이다.

  • 생성자는 일종의 메소드로, 전달된 초기 값을 받아서 객체의 필드에 기록
                                                      (매개변수 있는 생성자가 하는 일)

★생성자 규칙★
생성자의 선언은 메소드 선언과 유사하나 ★반환 값이 없으며(void같은 걸 적지 않는다)★
★생성자명을 클래스명과 똑같이★ 지정해주어야 함

  • 생성자는 객체 생성이 주 목적(+ 필드 초기화)이고 메소드는 기능 실행이 주 목적

  • 기본 생성자
    작성하지 않은 경우, 클래스 사용 시 JVM이 자동으로 기본 생성자 생성
    (기본 생성자를 만들지 않았음에도 불구하고 Product p = new Product(); 이런 게 가능했던 이유)

오버로딩

  • 오버로딩 조건
    같은 클래스 내에 있어야 한다
    같은 메소드 이름
    매개변수의 개수, 매개변수 타입, 매개변수의 순서 이 셋 중 하나가 달라야한다.


    u1.inform();는 null, null, null, null이라고 콘솔에 찍힌다.
    u2.inform();는 user01, pass01, ~, ~라고 콘솔에 찍힌다.

public User(String userId, String pwd, String name, Date date) {
	userId = userId;	// The assignment to variable userId has no effect

파란색은 전역변수, 연한 갈색은 지역변수인데 두 개의 이름이 같을 때 지역변수에 우선권을 주기 때문에 전부 연한 갈색이 된다.

이름을 같게 해도 되는 경우는 없을까? ==> this라는 레퍼런스 변수(참조 변수)

public class Academy {
	private String name;	// 필드
	public Academy() {}		// 기본 생성자
	public Academy(String name) {	// 매개변수 있는 생성자
		this.name = name;
	//필드의 name
	}
}

this는 나 자신에 대한 주소값을 가지고 있다
this.userId라고 하면 지역변수가 아니라 내 필드에 있는 userId에 접근이 된다.


public User(){
	System.out.println("User: " + this);
}

의 결과도 같다.


this()


this() <== 생성자, 변수와 다르게 소괄호가 붙어있다.
같은 클래스의 다른 생성자를 호출할 때 사용하며 반드시 첫 줄에 선언

this() 사용 예시

public class Academy {
	private int age;
	private String name;
	public Academy() {
		this(20, "김철수");	// 원래 같으면 0이랑 null이 들어갈텐데
	}
	public Academy(int age, String name) {
		this.age = age;
		this.name = name;
	}
}

this는 나, super는 내 부모

0개의 댓글