new BankAccount(); // 클래스 BankAccount의 인스턴스화(Instantiation)
- BankAccount에 정의된 변수와 메소드를 담고 있는 인스턴스를 메모리 공간에 생성
- 만들어진 인스턴스를 사용하기 위해 참조할 수 있는(가리키고 있을 수 있는) 무엇인가 필요하다 —> 참조변수(Reference Variable)
- 인스턴스 = 객체
BankAccount myAcnt; // 참조변수 myAcnt의 선언
BankAccount myAcnt1 ; // 참조변수 myAcnt1 선언
BankAccount myAcnt2; // 참조변수 myAcnt2 선언
// 참조 변수 myAcnt1이 새로 생성되는 인스턴스를 가리킴
myAcnt1 = new BankAccount();
// 참조 변수 myAcnt2가 새로 생성되는 인스턴스를 가리킴
myAcnt2 = new BankAccount();
- 키워드 new를 통해서 인스턴스를 생성하면 생성된 인스턴스의 주솟값이 반환된다.
- 즉 참조변수에는 생성된 인스턴스의 주솟값이 저장된다.(주솟값 = 참조 값)
- 참조변수는 인스턴스를 참조한다.
- 참조변수는 인스턴스를 가리킨다.
BankAccount myAcnt1 = new BankAccount();
BankAccount myAcnt2 = new BankAccount();
myAcnt1.deposit(1000); // myAcnt1이 참조하는 인스턴스의 deposit 호출
myAcnt2.deposit(1000); // myAcnt2가 참조하는 인스턴스의 deposit 호출
- 참조변수를 통해서 해당 인스턴스의 메소드 호출, 인스턴스 변수에 접근 가능
참조변수의 특성
BankAccount yoon = new BankAccount();
...
yoon = new BankAccount(); // 😶🌫️😶🌫️😶🌫️😶🌫️참조변수 yoon이 새 인스턴스를 참조
...
BankAccount ref1 = new BankAccount();
BankAccount ref2 = ref1;
- 참조변수가 지니고 있는 값을 다른 참조변수에 대입하여 하나의 인스턴스를 둘 이상의 참조변수가 동시에 참조하는 것도 가능
참조변수의 매개변수 선언
- 메소드를 호출할 때 값을 전달할 수 있고, 이 값은 매개변수에 저장된다. 이와 유사하게 메소드를 호출하면서 인스턴스의 참조 값을 전달하는 것도 가능

public static void check(BankAccount acc) {
acc.checkMyBalance(); // acc가 참조하는 인스턴스의 메소드 호출
}
- 메소드의 매개변수로 BankAccount의 참조변수가 선언
- 이 메소드는 인자로 인스턴스의 참조 값을 전달 받는다. 따라서 메소드 내에서는 전달된 참조 값의 인스턴스를 대상으로 메소드를 호출할 수 있다.
참조변수에 null 대입
- 때로는 참조변수가 참조하는(가리키는) 인스턴스와의 관계를 끊고 아무런 인스턴스도 참조하지 않도록 할 필요가 있다. 이때에 참조변수에 null을 대입
BankAccount ref = new BankAccount();
...
ref = null; // ref가 참조하는 인스턴스와의 관계를 끊음
BankAccount ref = null;
...
if(ref == null)
...
- 참조변수의 null 저장 유무를 다음과 같이 확인할 수 있어서 유용하다.