JAVA

[JAVA] 생성자

개발로 먹고 살자 2022. 1. 4. 17:41

우리가 변수를 선언할 때 초기화를 하지 않으면 변수에는 자동으로 쓰레기 값이 들어가게 된다.

그래서 변수를 선언할 때 반드시 초기화를 해준다.

 

자바에서는 객체를 생성함과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 

생성자라는 메소드를 제공한다.

 

우선 생성자는 다음과 같은 특징을 가진다.

  • 생성자 이름은 해당 클래스와 이름이 같아야 한다.
  • 반환 값이 없지만 void형으로 선언하지 않는다.
  • 초기화를 위한 데이터를 인수로 전달받을 수 있다.(명시적)
  • 하나의 클래스가 여러 개의 생성자를 가질 수 있다.(오버로딩 가능)

 

생성자는 구현 방법에 따라 기본 생성자, 묵시적 생성자, 명시적 생성자로 나뉜다.

 

모든 클래스는 반드시 하나 이상의 생성자를 가지고 있다.

클래스에 생성자를 선언하지 않으면 기본 생성자가 자동으로 선언이 된다.

클래스에 생성자 선언 시 파라미터가 없다면 묵시적 생성자라고 한다.

클래스에 생성자 선언 시 파라미터가 있다면 명시적 생성자라고 한다.

 

하나의 클래스가 여러 생성자를 가지는 경우(오버로딩)

public class Person {
	
	public Person() {}
	
	public Person(String name) {}
	
	public Person(String name, String age) {}
}

 

기본 생성자

public class Person {
	// public Person() {} // 기본 생성자
    
	int age = 20;
	String name = "홍길동";
}

public class Test {

	public static void main(String[] args) {	
		Person person = new Person(); // 객체 생성
		System.out.println(person.name); // 홍길동이 출력됨
	}
}

클래스 내에 어떠한 생성자도 존재하지 않을 경우 컴파일러가 자동으로 기본 생성자를 생성한다.

클래스 내에 생성자가 없다면 접근이 불가능하기에 이 기본 생성자가 존재해야만 객체에 접근이 가능하다.

 

묵시적 생성자

public class Person { // 묵시적 생성자
	
	int age = 20;
	String name = "홍길동";
	
	public Person() {
		age++;
	}
}
public class Test {

	public static void main(String[] args) {	
		Person person = new Person();
		System.out.println(person.age); // 21이 출력됨
	}
}

클래스 내에 생성자는 존재하지만 파라미터가 없는 경우 묵시적 생성자라고 할 수 있다.

기본 생성자와 다른 점은 age++과 같이 원하는 방식으로 초기화가 가능하다는 점이다.

 

명시적 생성자

public class Person { // 명시적 생성자
	int age;
	String name;
	
	public Person(int age, String name) { // 파라미터를 받음
		this.age = age;
		this.name = name;
	}
}
public class Test {

	public static void main(String[] args) {	
		Person person = new Person(21, "홍길동"); // 명시적 생성자
		System.out.println(person.name); // 홍길동이 출력됨
	}
}

객체를 생성할 때 파라미터에서 받은 값을 통해 초기화가 된다.

 

생성자는 초기화뿐만 아니라 오버로딩, 오버라이딩, 객체지향 등 많은 부분에서

사용하게 되는 필수 요소이다.

 

'JAVA' 카테고리의 다른 글

[JAVA] 정적 변수, 정적 메소드(Static)  (0) 2022.01.05
[JAVA] 접근제어자  (0) 2022.01.04
[JAVA] 오버로딩과 오버라이딩  (0) 2022.01.04
[JAVA] 상속  (0) 2022.01.04
[JAVA] List와 ArrayList  (0) 2022.01.04