
모든 클래스는 생성자를 만들어주는 과정을 거쳐야 한다.
자바파일을 처음 만들었는데 아무런 생성자가 없어보이는 거기에서도
실은 생성자가 숨겨져 있다.
public class Ex01 {
public Asdf(){ } // 자동 생성된 생성자. 보이지 않는다.
public static void main(String[] args) {
Asdf asdf123 = new Asdf(); // 인스턴스 생성 및 생성자 호출
}
}
생성자에 대한 예제를 보고 있자면 .this 가 갑자기 등장한다.
this에는 두가지 용법이 있다.
this. : 현재 객체를 참조하기 위한 용도
this() : 다른 생성자를 호출하는 용도
멤버변수를 참조하는 this.멤버변수명
현재 객체를 참조하기 위한 용도로 사용하는 this. 만 보자.
아래 코드를 보자.
멤버변수명과 매개변수명을 동일하게 설정했다.
컴파일러가 첫번째 name과 두번째 name을 잘 구분할수있을까?
참고 : 생성자자동생성단축키(Generate Constructor) : Alt + Shift + S → C
매개변수로 만들고싶은 멤버변수의 체크박스를 틱하면 생성자를 생성해준다.
public class ThisPerson {
String name;
int age;
boolean isHugry;
ThisPerson(String name, int age, boolean isHungry){
name = name; //컴파일러가 첫번째 name은 멤버변수로 두번째 name은 매개변수로 잘 구분할수있을까?
age = age;
isHungry = isHungry;
}
}
정답은 NOPE! 구분하지못한다.
이때 구분해주기위해 멤버변수명앞에 this를 붙여준다.
public class ThisPerson {
String name;
int age;
boolean isHugry;
ThisPerson(String name, int age, boolean isHungry){
this.name = name;
this.age = age;
this.isHungry = isHungry;
}
}
객체는 인스턴스를 포함하는 일반적인 의미.
책상은 인스턴스다.
책상은 객체다.
책상은 책상 클래스의 객체다
책상은 책상 클래스의 인스턴스다
객체는 속성과 기능의 집합.
속성과 기능을 객체의 멤버라고 한다.
속성은 변수로, 기능은 메서드로 정의한다.
클래스를 정의할 때 속성은 변수로 기능은 메서드로 정의한다.
자바 객체가 가지고 있는 속성
-> "필드" / 멤버변수
자가 객체가 가지고 있는 기능
-> 메소드(함수)
// 고양이의 추상화.
class cat {
//필드
String name;
int age;
//생성자(객체를 생성할 때 사용)
//생성자의 이름은 클래스명과 동일하게 만든다
//생성자가 있어야 클래스명을 인스턴스화 할 수 있다.
//생성자는 리턴타입이 없다. (무조건 void)
//클래스에 아무 생성자가 없다면 기본적으로 셋팅 되어있다.(기본적으로)
//이말인 즉, 생성자를 직접 만든다면 기본적인 생성자는 없어진다.
public Cat(String name, int age){
this.name = name; // 이 this는 생성될 인스턴스 그 자체다.
this.age = age; // this를 이용해서 생성자에서 다른 생성자를 불러낼 수 있다.
}
//메소드 (객체의 기능)
public void cry(){
System.out.println("애옹");
}}