java class 생성자, .this 인스턴스 오브젝트

Wald Eisen·2023년 7월 3일

study

목록 보기
11/26
post-thumbnail

객체 - 클래스, 오브젝트, 인스턴스

  • (일반적 객체)인스턴스는 실제로 만들어진 특성을 말한다.
  • 클래스는 추상적 특성. 가구를 만들라는건 가구는 만들 수 있는게 아니다.
  • 오브젝트는 상상할 순 있지만 실체화되진 않은것. 책상 같은것.

생성자 - Constructor

모든 클래스는 생성자를 만들어주는 과정을 거쳐야 한다.
자바파일을 처음 만들었는데 아무런 생성자가 없어보이는 거기에서도
실은 생성자가 숨겨져 있다.

public class Ex01 {
	public Asdf(){ } // 자동 생성된 생성자. 보이지 않는다.
	
	public static void main(String[] args) {
		Asdf asdf123 = new Asdf(); // 인스턴스 생성 및 생성자 호출
	}
}

그런데 this. 는 무엇일까?

생성자에 대한 예제를 보고 있자면 .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("애옹");
    }}

0개의 댓글