Java

Java, 생성자 메소드/ this와 this()의 차이 / varargs

greenyellow-s 2024. 7. 17. 11:50

 

생성자(Constructor) 메소드

 

생성자 메소드는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다.

 

생성자명은 반드시 클래스명과 동일해야하며 클래스를 메모리에 생성 시 자동 호출된다.

 

생성자 메소드는 returnType(결과형)이 없다. 따라서, 생성자 앞에 void를 넣지 않는다.

 

클래스 안에 생성자가 하나도 없을 시에는 자동으로 기본(default) 생성자를 호출한다. - (기본 생성자)

 

## 기본 생성자는 인수가 없는 메소드 이다.

 

 

생성자 Overload

 

Overload된 생성자끼리는 서로 호출이 가능하다.

 

호출 방법

 

this(); 이용

 

메소드명은 같고 인수형이 다르거나 개수가 다른것이기 때문에

Test();

Test (String a);

Test (int a);

세개의 overload된 생성자가 있을 경우,

 

Test();를 호출하는 방식은, this();

Test(String a);를 호출하는 방식은, this("코난");

Test(int a);를 호출하는 방식은, this(25);

 

이렇게 각자 맞는 인수형의 데이터를 this에 넣어 호출하면 된다.

 

	private String name;
	private int age;
	
	public Constructor01(){  // void를 쓰면 생성자가 아니다.
		System.out.println("기본 생성자");
		System.out.println("this = " + this);
	}
	
	public Constructor01(String name) {
		this(); // 1번생성자 // Overload된 생성자를 호출, 반드시 첫번째 줄에 싸야된다
		System.out.println("Constructor01(String name)");
		this.name = name;
	}
	public Constructor01(int age) {
		this("코난"); //2번 생성자
		System.out.println("Constructor01(int age)");
		this.age = age;
	}

 


this와 this()

 

this자신의 클래스의 참조값을 갖고 있고 생략이 가능하다.

this()Overload된 다른 생성자를 호출할 수 있다.

 

단, this()는 생성자의 첫 줄에 써야한다.


varargs(Variable Argument)

 

varargs로 통일된 인수의 자료형에 인수의 개수를 자유롭게 구현할 수 있다.

varargs는 내부적으로 배열화 작업을 처리해준다.

 

예를 들어,

인수(10,20)을 받아 숫자들의 합을 구하는 메소드 하나.

인수(10,20,30)을 받아 숫자들의  합을 구하는 메소드 하나.

인수(10,20,30,40)을 받아 숫자들의  합을 구하는 메소드 하나

 

이렇게 총 3개의 메소드를 사용하고 싶을 때

 

통일된 인수이며 인수의 개수만 변화되기 때문에

int... ar으로 int형의 인수의 개수를 나의 마음대로 넣을 수 있다.

 

ar은 배열명으로 내부적으로 배열로 인식 되기 때문에 따로 배열 선언을 하지 않아도 된다.

 

	public int sum(int... ar) { //... 개수를 너의 마음대로 넣어라
		int hap = 0;
		
		for(int i=0; i<ar.length; i++) {
			hap+=ar[i];
		} 
		return hap;
	}

 

main에서는

 

VarArgs va = new VarArgs();

vs.sum(10,20);

으로 호출하고 데이터를 보내고 또 값을 가져온다.

	public static void main(String[] args) {
		VarArgs va = new VarArgs();
		
		System.out.println("10 + 20 = "+ va.sum(10, 20));
		System.out.println("10 + 20 + 30 = "+ va.sum(10, 20, 30));
		System.out.println("10 + 20 + 30 + 40 = "+ va.sum(10, 20, 30, 40));
	}
}