programming/JAVA

[JAVA] 생성자(Constructor)

코딩찔찔이 2021. 11. 6. 16:55

 

📌생성자란?

"인스턴스를 초기화하는 메서드"

  • 인스턴스란? "메모리에 생성된 클래스"
  • new 연산자를 사용하여 메모리 상에 클래스를 선언하고, 선언된 클래스의 주소(인스턴스 주소)를 리턴하여 레퍼런스 변수에 저장
  • 클래스명 참조변수 = new 클래스명 인스턴스명(생략)();
<생성자의 조건>

1.리턴타입이 없어야 한다.
2.클래스명과 생성자명이 동일해야 한다.

2번 조건에 의해 클래스명과 인스턴스명이 동일해지기 때문에 중복되어 생략이 가능하다.

 

생성자를 만들어보자. 

'Car' 클래스에 String 타입의 model, color, 그리고 int 타입의 maxSpeed인 인스턴스 변수를 넣어주었다.

이클립스는 생성자가 없을 경우, 컴파일러를 통해서 자동으로 생성자를 생성해주는 기능을 제공하고 있다.(alt+ Shift+ s)

 

class Car2 {
	
	String company = "Hyundai";
	String model;
	String color;
	int maxSpeed;
    
    public Car2(String model,String color, int maxSpeed) {
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
}

 

이전 포스팅을 통해 'this' 의 의미를 알아보았다. 간단히 얘기하자면 자기 자신의 메모리를 참조하게 되어 멤버변수와 필드가 같은 의미를 가지게 되는 기능을 구현하는 것이다.

https://cozzilzzil2.tistory.com/24

 

public class Constructor {

	public static void main(String[] args) {

Car2 car4 = new Car2("sonata","red",200); // 생성자 호출
		System.out.println(car4.company);
		System.out.println(car4.model);
		System.out.println(car4.color);
		System.out.println(car4.maxSpeed);

 

클래스 내부에 있는 생성자에 의해 인스턴스를 필드 클래스에서 호출하였다. 인스턴스를 호출 할 때 매개변수에 해당하는 값을 넣어주었다.

 


📌기본 생성자(Default Constructor)

public Car2( ) {}

자바의 모든 클래스는 하나의 생성자를 반드시 가지고 있어야 한다.

클래스에 생성자가 정의되어 있지 않거나, 매개변수를 가지지 않은 생성자를 정의하면, 기본 생성자가 자동으로 호출된다.

기본생성자는 아무런 동작을 하지 않고 매개 변수를 클래스 필드에서 바로 수행이 가능하다. 

 

 

📌생성자 오버로딩(Constructor Overoading)

 

이전에 생성자를 사용하지 않고, 매개변수가 다른 또 다른 생성자를 생성해야 할 때, 두 개 이상의 생성자를 구현해야 하는 경우를 대비하여 생성자를 재정의 하는 과정을 거쳐야 한다.

그럴 때 사용하는 것이 생성자 오버로딩이다.

<예시>

class Car {
	
	
	String model;
	String color;
	int maxSpeed;

public Car2(String model) {
		//this.model = model;
		this(model,null); 
	}

public Car2(String model,String color) { //초기화 코드 개선
this(model, color, 0); // 생성자를 호출
.
.
public class Constructor {

	public static void main(String[] args) {
		
Car car1 = new Car("sonata","blue");
		System.out.println(car1.model);
		System.out.println(car1.color);

2개의 생성자에서 해당 생성자에 맞는 매개 변수를 입력하여, 객체를 생성해줄 수 있다.