메소드에서 현재 인스턴스를 가르키는 역할

class Person {
    private String name;
    
    public Person(String pName) {
        name = pName;
    }
    
    public void sayHello() {
        System.out.println("Hi. My name is " + this.name);
    }
}

클래스 변수를 가르키는 역할

class Person {
    private String name;
    
		public void setName(String name) {
				// name = name;
		    this.name = name;
		}
}

name = name;이라는 애매한 코드가 생기게 된다. 두 name은 서로 같은 변수이며, 클래스의 인스턴스 변수가 아닌 파라미터를 가리키게 된다.

this를 통해 해결

생성자에서의 사용

public class BankAcount {
    private Person owner;

    ...

		public BankAccount(Person owner) {
			this.owner = owner;
			owner.setAccount(this);
		}

    ...
}
public Person(String name) {
    this(name, 12, 0); // 12살을 기본 나이로 설정, 초기 현금 보유액은 0원.
}

public Person(String name, int age) {
    this(name, age, 0); // 초기 현금 보유액은 0원.
}

public Person(String name, int age, int cashAmount) {
    if (age < 0) {
        this.age = 12;
    } else {
        this.age = age;
    }

    if (cashAmount < 0) {
        this.cashAmount = 0;
    } else {
        this.cashAmount = cashAmount;
    }
    this.name = name;
}

첫 번째 경우의 this(name, 12, 0);은 세 번째 생성자 Person(name, 12, 0);에 각각의 파라미터를 넘겨 호출하는 것과 같다고 생각할 수 있고, 두 번째 경우의 this(name, age, 0);Person(name, age, 0);에 파라미터를 넘겨 호출하는것과 같다