코딩이란 무엇일까

[Java/자바]클래스-생성자 본문

Java

[Java/자바]클래스-생성자

둥구는 지굴다 2022. 9. 30. 16:50

안녕하세요 오늘은 클래스 부분에서 생성자란 무엇인가?

그리고 생성자를 사용한 예시 코드에 대해 알아보겠습니다.

생성자(Constructor)

생성자는 객체를 생성할 때 초기화를 담당합니다.

우리가 클래스를 만들 때 다양한 필드 값들이 있을 텐데 그 값들을 객체를 생성할 때 초기화를 해주거나 메서드를 호출해서 객체를 사용할 준비를 합니다.

 

생성자 구조

클래스이름 ( ){ };

생성자의 형태는 클래스 이름과 동일한 이름을 갖습니다.

메서드와 구조가 같다고 생각할 수 있지만 생성자는 이름 앞에 void, int와 같이 리턴 타입이 없다는 게 차이점입니다.

 

기본 생성자 사용예시

public class Constructor {

	public static void main(String[] args) {
			new Dclass();
		
	}

}
class Dclass{
	//기본 생성자(default 생성자)
	Dclass(){
		System.out.println("Aclass 기본생성자( )");
	}
}

Dclass라는 클래스 안에 기본 생성자를 만들어 주었습니다.

사실 이렇게 클래스 내부에 기본 생성자를 생성하지 않아도

클래스가 생성될 때 컴파일러가 자동으로 기본 생성자를 추가하게 돼 있습니다.

따라서 저희가 새로운 객체를 생성할 때 Dclass D=new Dclass( );

이렇게 적어주는 이유가 바로 기본 생성자를 불러온 것이지요.

출력 결과

생성자에 매개변수 넣어 값 받아오기 예시

public class Constructor3 {

	public static void main(String[] args) {
		Bclass b1= new Bclass("뇽뇽");
		//Bclass b2= new Bclass(); 매개변수 생성자를 만드는 순간 기본 생성자는 자동 생성 X
		System.out.println(b1.name);
	}

}
class Bclass{
	String name;
	Bclass(String name){
		System.out.println("Bclass의 매개변수 생성자( )");
		name=name;
	}
}

이번에 사용한 생성자는 매개변수가 있네요?!

생성자에 매개변수를 사용하면 객체를 생성할 때 필드의 값을 초기화할 수 있습니다.

따라서 Bclass b1= new Bclass("뇽뇽");

"뇽뇽"이라는 문자열이  클래스의 필드 값  name에 들어가는 것입니다.

그런데 한 가지 문제점이 있습니다.

생성자 내부를 보면  name=name이 있습니다. 이렇게 변수의 이름을 같게 해주는 이유는 생성자를 초기화할 때 매개변수가 어떤 필드 값인지 코드의 가독성을 높여주려고 같게 해 주는 것인데

위의 코드처럼  name=name으로 돼있으면 사용자가 어떤 게 필드 값인지 어떤게 매개변수인지 헷갈리겠죠?

따라서 이때 사용하는 게  this입니다.

 this

this의 형태는 this. 필드 이러한 형태로 사용됩니다.

따라서 위의 생성자에 this를 사용하여 초기화해보자면

	Bclass(String name){
		System.out.println("Bclass의 매개변수 생성자( )");
		this.name=name;
		//클래스 내에있는 필드를 this로 명시해줌
	}

이렇게 this로 필드에 있는 값과 매개변수로 받은 값을 구분해줄 수 있는 것입니다.

생성자 오버 로딩

메서드의 오버 로딩 기억나시나요? 혹시 모르시는 분들은 아래 글을 참고해 주세요!

https://nangnyamnyomnyomnyom.tistory.com/31

 

[Java/자바] 메소드 오버 로딩(Overloading)

 안녕하세요 오늘은 메소드의 오버 로딩(Overloading)에 대해 알아보려 합니다! 메소드 오버 로딩(Overloading)이란? 메소드의 오버로딩이란 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것을

nangnyamnyomnyomnyom.tistory.com

생성자 오버 로딩은 메서드 거의 비슷하다고 보시면 됩니다.

생성자로 매개변수에 값을 받아올 때 자동차 클래스가 있다고 치면

어떤 객체는 색상, 모델명만 받아올 수도 있고

자동차 클래스로 만들어진 또 다른 객체는 색상, 배기량, 모델명을 받아올 수도 있는 것입니다.

따라서 이때 값을 받기 위해 매개변수들을 달리하여 생성자를 여러 개 만들어주는 것이 생성자 오버 로딩입니다.

 

`public class Car{
Car ( ) { ...}` 

 `Car( String model) { … }`

`Car(String model, String color){…}`

`Car(String model, String color, int maxSpeed){ … }`

`}`

위와 같이  car클래스 안에 기본 생성자가 있고

model만 받는 생성자가 있고, color, model을 받아오는 생성자가 있습니다.

이와 같은 생성자이지만 매개변수의 개수를 달리해 생성자 오버 로딩이 이루어집니다.

추가적으로 생성자 오버 로딩을 할 때 주의할 점은

생성자의 매개변수의 개수, 타입에 따라 달라지지만

단순히 매개변수의 순서만 바꾼다 해서 생성자 오버 로딩이 이러나지 않습니다.

 

잘못된 생성자 오버 로딩의 예시

Car( String model, String color ){…}

Car(String color, String model) {…}

 


자 이렇게 해서 오늘은 클래스 부분 생성자에 대해 알아보았는데요.

생성자는 아마 클래스를 많이 사용하다 보면 익숙해질 것입니다.

이상으로 포스팅 마치겠습니다.

글 읽어주셔서 감사합니다~

Comments