//private 강력한 형태의 필드와 메서드를 보호하는 형태임
//Encapsulation : 멤버 은닉화. 객체의 속성 중에 외부에 노출되지 말아야 할 속성을 private 을 적용해서
//내부에서만 접근 가능하도록 하는 것
String name; //멤버필드로 선언됨.
//이 필드를 클래스 외부에서 접근시엔 반드시 객체를 생성해야만 접근 가능함
//헷갈리지 말아야 할 것은, 이 클래스 내부에 정의하는
//멤버 메서드에서는 당연히 접근 가능함'
public Avi6Student() {//생성자, 리턴타입이 없음 아규먼츠도 없음 - 기본 생성자임
name = null;
age = 0;
addr = null; //아무것도 안 넣었을 때 나오는 기본, 객체들 객체 초기화 가능
}
//생성자 오버로딩
public Avi6Student(String theName) {//시그니처가 똑같음 그래서 오버로딩을 함
name = theName;
}
public Avi6Student(String theName, int theAge) {//시그니처가 똑같음 그래서 오버로딩을 함
//생성자에서의 this() : 생성자에서 다른 생성자를 호출할떄 사용하는 키워드
//파라미터는 호출하고 싶은 생성자의 args 의 시그니쳐에 맞게 넣어주면, 컴파일러가 알아서 호출해줌
//!!!!!!중요!!!!!!!!! this() 는 생성자의 첫머리에서만 호출 가능하며, 한번만 가능
this(theName);
age = theAge;
}
public Avi6Student(String theName, int theAge, String addr) {
this(theName, theAge);
this.addr = addr;
}
//생성되는 인스턴스의 객체 변수 선언
// private int count = 1;
//생성자(constructor) : 클래스의 instance 를 생성하고, 필요시 필드값을 초기화하느 역할을 하는 일종의 메서드
//메서드와의 차이점은 숙지 해야 함
//이 생성자가 없으면 인스턴스를 생성하지 못함(VM 이)
//꼭 기억(매우 중요)
/*
* 프로그래머가 클래스를 정의할 떄 생성자를 정의하지 않으면, 컴파일시 컴파일러가 기본생성자(Default Constructor) 를
* 컴파일시에 클래스 내부에 자동으로 넣어줌
*
* 그렇기 떄문에 생성자를 정의하지 않아도 기본 객체를 만들 수 있는 이유임
*
* 기본생성자란, 아규먼트가 하나도 없는 생성자를 말함
*
* 하지만!!!!!!!!! 만약 프로그래머가 생성자를 하나 이상 클래스에 정의하게 되면
* 컴파일러는 기본생성자를 제공하지 않게 됨
*
* 반드시 기억!!!!!!
*
* 이렇게 될 경우엔, 정의된 클래스의 인스턴스를 생성할 떄는 반드시 정의한 생성자 중 하나를 호출해야만 인스턴스를 만들 수 있음
*
*/