본문 바로가기

📚Study Note/JAVA

[ JAVA ] 클래스와 인스턴스 ② 생성자 (Constructor)

/*
==========================================
 ■■■  클래스와 인스턴스 ■■■
 - 생성자 Constructor
 ===========================================*/
/*
○ 생성자 constructor의 역할
	ⓐ 메모리 할당
	ⓑ 초기화

○ 생성자의 특징

	ⓐ 생성자는 메소드이지만 일반 메소드처럼 호출될 수 없으며(아무때나 호출불가)
		반환자료형을 가질 수 없다. ex) void조차 쓸 수 없으며 값을 반환할 수도 없다.

	ⓑ 생성자는 클래스의 이름과 동일한 이름을 가져야 한다. 대소문자도 일치해야한다. 
		(대소문자까지도 정확히 일치해야한다.)

	ⓒ 생성자는 객체를 생성하는 과정에서(=인스턴스 생성 과정에서) 『new 생성자()』 의 형태로 호출된다,
		인스턴스 생성 시 단 한 번만 호출된다.
*/

class NumberTest

{
	int num;

	/*NumberTest()
	{
		//텅비어있는상태 
	}*/

	// 텅비어있는것은 자동으로 삽입되는 default 생성자
	// 컴파일 과정에서 자동으로 생성되는 이 생성자는 사용자 정의 생성자가 존재하지 않을 경우에만 만들어진다.
	
	// 사용자 정의 생성자 

	NumberTest()
	{
		num = 10;
		System.out.println("사용자 정의 생성자 호출된 결과 테스트");
	}	
	
	
	int getNum()
	{
		return num;
	}
}

// ※ 모든 클래스에는 생성자가 존재한다 (사용자 정의 생성자를 따로 만들지 않을 경우)
// 컴파일 과정에서 default 생성자가 자동으로 삽입된다.

public class Test074
{
	public static void main(String[] args)
	{

		NumberTest nt1 = new NumberTest();
		//NumberTest 클래스 기반 인스턴스 생성

		// -- 인스턴스가 생성되는 시점에서 이와 동시에 생성자 호출이 이루어진다.
		System.out.println(nt1.getNum());

		nt1.num = 100;
		System.out.println(nt1.getNum());

		/*-==>>
		사용자 정의 생성자 호출된 결과 테스트
		10
		100		
		*/
		System.out.println("");

		NumberTest nt2 = new NumberTest();
		nt2.num = 20000;
		System.out.println(nt2.getNum());
		//-==>> 사용자 정의 생성자 호출된 결과 테스트
		//		20000


		//NumberTest nt = new NumberTest(300);
		// 에러 :  error: constructor NumberTest in class NumberTest cannot be applied to given types; 
		// 매개변수를 넘겨주면서 생기는 오류
		//System.out.println(nt.getNum());
		
	}
}

 

 

 

 

 

 

/*==========================================
 ■■■  클래스와 인스턴스 ■■■
 - 생성자 (Constructor)
 ===========================================*/

class NumberTest2
{
	int num;
/*  NumberTest2()
	{
		
	}   */ //이게 디폴트값으로 생긴다. 디폴트 생성자

	
	// 사용자 정의 인스턴스 생성 
	NumberTest2(int n)
	{
		num = n;
		System.out.println("인자 전달  : " + n); //인자가 전달되는 지 확인하는 출력 (인자 전달 : ) 
	}										     //사용자 정의 생성자가 이미 있을때는 디폴트 생성자가 생기지 않는다.

	int getNum()
	{
		return num;
	}

}




public class Test075
{
	public static void main(String[] args)
	{
		// NumberTest2 ob = new NumberTest2();
		// NumberTest2 클래스 기반의 인스턴스 생성했지만 
		// 사용자 정의 생성자를 정의한 이후 컴파일 에러가 발생한다.  
		// WHY?  NumberTest2 클래스에는 (인자가 필요한 )사용자 정의 생성자가 존재하고 있는 상황이기에
		// default 생성자가 자동으로 생성되지 않기 때문이다.


		NumberTest2 ob = new NumberTest2(10);
		System.out.println("메소드 반환 값 : " +ob.getNum());

		NumberTest2 ob2 = new NumberTest2(2456);
		System.out.println("메소드 반환 값 : " +ob2.getNum());


/*
인자 전달  : 10
메소드 반환 값 : 10
인자 전달  : 2456
메소드 반환 값 : 2456
계속하려면 아무 키나 누르십시오 . . .*/

		
	}
}

/*모든 클래스는 생성자가 있고 컴파일을 할 때 디폴트 생성자가 생긴다. 
생성자는 메소드지만 아무때나 부를 수 없고, 클래스와 이름이 같아야하고, 
인스턴스 생성과정에서 의지와 상관없이 꼭 한 번 호출됨. 
'딱 한번 호출된다'는 특징 때문에 파이널상수 초기화 가능.
값을 반환할 수 없고 리턴자료형도 없다. 아예 없다. 무조건 리턴 자료형이 없다. 
있어도 되고 없어도 되고가 아니다. 특정값을 반환하지 않는다고 했을 때 void 쓰지만 
생성자는 보이드 조차도 없다 */