본문 바로가기
Java/[패스트캠퍼스] Java & SpringBoot로 시작하는 웹 프로그래밍

Ch 02. 객체 지향 입문 - 12. 객체 자신을 가리키는 this

by hinote 2022. 12. 30.

this : 다른 언어에도 종종 보이는 키워드임

 

 

this가 하는 일

  • 인스턴스 자신의 메모리를 가리킴

  • 생성자에서 또 다른 생성자를 호출 할때 사용 (후에 서술되는 super도 알아두기)

  • 자신의 주소(참조값)을 반환 함

 

 

 

 

 

생성된 인스턴스 메모리의 주소를 가짐

  • 클래스 내에서 참조변수가 가지는 주소 값과 동일 한 주소 값을 가지는 키워드

public void setYear(int year)
{
    this.year = year;
}

 

 

 

생성자에서 다른 생성자를 호출 하는 this

  • 클래스에 생성자가 여러 개 인경우, this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음
  • 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸 수 없음

 

public class Person {

	String name;
	int age;
	
	public Person() {
		//int num = 10; 
		//name = "test";	이런식으로 constructor이 불리기 전 앞에 넣을 수 없다
		this("이름없음", 1);
	}//생성자는 인스턴스를 초기화하는 역할을 함. 
    //this를 호출할때 string과 int가 맵핑되는 똑같은 타입의 매개변수를 가진 것을 찾아야 함
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}//이쪽 호출이 끝나야 인스턴스가 생성됨. 그래서 이 이전에 다른 코드를 집어넣으면 오류가 생김
    
	public void showPerson() {
		System.out.println(name + ", " + age);
	}
	
	public static void main(String[] args) {
		
		Person person = new Person();
		person.showPerson();
		
	} //결과 : 이름없음, 1    
}

 

 

 

 

 

 

 

자신의 주소를 반환하는 this

 

public class Person {

	String name;
	int age;
	
	public Person() {
		this("이름없음", 1);
	}
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public void showPerson() {
		System.out.println(name + ", " + age);
	} //생략가능
    
	public Person getPerson() {
		return this;
	}
	
	//자료코드 - 수업코드와 자료코드 중 하나 사용
/*	public static void main(String[] args)
	{
		Person p = new Person();
		p.name = "James";
		p.age = 37;
		
		Person p2 = p.getPerson();
		System.out.println(p);
		System.out.println(p2);
	}*/
    
    //수업코드
    public static void main(String[] args) {
		
		Person person = new Person();
		person.showPerson();
		
		System.out.println(person);	//ch12.Person@15db9742
		
		Person person2 = person.getPerson();
		System.out.println(person2);	//ch12.Person@15db9742두개의 반환값이 같음
		
	}
}

 

 

댓글