/*
==========================================
■■■ 클래스와 인스턴스 ■■■
- 생성자 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 쓰지만
생성자는 보이드 조차도 없다 */
'📚Study Note > JAVA' 카테고리의 다른 글
[ JAVA ] 배열 Array 의 선언, 초기화, 기본적인 사용 (0) | 2021.03.14 |
---|---|
[ JAVA ] 클래스와 인스턴스 ③ 메소드 오버라이딩, 초기화블럭 (0) | 2021.03.14 |
[ JAVA ] 클래스와 인스턴스 ① (0) | 2021.03.14 |
[ JAVA ] break ; / continue; / return; (0) | 2021.03.13 |
[ JAVA ] for문을 활용해서 구구단출력, 별찍기 (0) | 2021.03.13 |