본문 바로가기

BackEnd/Java

생성자 (Constructor)

  • 리턴 타입이 없고 이름을 클래스명과 동일하게 정의
  • 메서드와 마찬가지로 파라미터가 없을 수도 있고 있을 수도 있음
  • 별도의 생성자를 만들지 않았을 때 컴파일러에 의해 자동으로 생성 됨
  • 파라미터 생성자를 추가하면 컴파일러는 기본 생성자를 별도로 생성하지 않음
  • 생성자는 반드시 최소 한 개 이상이 존재해야 함 (기본생성자 포함)

기본 문법

 

[제한자] 클래스명([파라미터...]) {
	...
}

 

 

기본 생성자란?

 

public static void main(String[] args) {
	DefaultPerson dp = new DefaultPerson();
	// 파라미터가 없는 메서드 생성자를 호출 (기본생성자)
}

class DefaultPerson {
	String name;
	
	public DefaultPerson() {} // 기본생성자 (Default Constructor)
}

 

main 메서드 내 'new DefaultPerson()' 이 부분이 기본 생성자를 호출하는 부분이고

DefaultPerson 클래스에서 생성한 DefaultPerson() 메서드가 기본생성자 메서드이다

별도로 추가한 파라미터 생성자가 없을 경우 컴파일러가 자동으로 삽입해주지만

별도로 추가한 파라미터 생성자가 있을 경우 기본 생성자가 따로 필요할 경우가 있다

 

예제로 하나씩 살펴보자!

 

class DefaultPerson {
	String name;
	
	public DefaultPerson() {} // 기본(Default) 생성자
}

public static void main(String[] args) {
	DefaultPerson dp = new DefaultPerson();
	System.out.println("DefaultPerson의 name = " + dp.name);
}

 

1. 생성자 내에서 수행한 작업이 없으므로 String의 기본값인 null 출력

 

 

class DefaultPerson2 {
	String name;
	
	public DefaultPerson2() {
		System.out.println("DefaultPerson2() 생성자 호출됨!");
		name = "홍길동";
	}
}

public static void main(String[] args) {
	DefaultPerson2 dp2 = new DefaultPerson2();
	System.out.println("DefaultPerson의 name = " + dp2.name);
}

 

2. 생성자 내에서 멤버변수 name을 "홍길동"으로 초기화

 

 

class ParameterPerson {
	String name;

	public ParameterPerson(String s) {
		System.out.println("ParameterPerson(String) 생성자 호출됨!");
		name = s;
	}
}

public static void main(String[] args) {
	ParameterPerson pp = new ParameterPerson("홍길동");
	System.out.println("ParameterPerson의 name = " + pp.name);
}

 

3. 파라미터로 데이터를 전달받아 name을 "홍길동"으로 초기화

 

 

 

단축키

Alt + Shift + S 누르고 o

 

단축키를 적어놓은 글들은 많은 양의 코드를 작성할 때 자주 쓰는 작업이라 적어놨음을 인지하자..

'BackEnd > Java' 카테고리의 다른 글

super, 부모를 가리키는 예약어  (0) 2020.03.16
this, 자신을 가리키는 예약어  (0) 2020.02.12
패키지(Package)와 import  (0) 2020.02.11
오버로딩(Overloading)과 가변인자(비정형인자)  (0) 2020.02.11
Getter, Setter  (0) 2020.02.11