객체를 만들어 내기 위한 설계도/틀이자, 연관되어 있는 변수와 메서드의 집합임
클래스에 선언된 모양 그대로 생성된 실체
생성된 인스턴스를 참조할 수 있는 변수, 인스턴스의 주소값이 저장됨
BankAccount myAcnt = new BankAccount();
BankAccount yoon = new BankAccount();
yoon = new BankAccount(); // yoon이 새 인스턴스를 참조함
BankAccount ref1 = new BankAccount();
BankAccount ref2 = ref1;
BankAccount ref = new BankAccount();
인스턴스 생성 과정에서 초기화를 위해 자동으로 호출되는 일종의 메소드
위의 조건을 모두 만족하면, 이는 자바 컴파일러에 의해서 생성자로 인식됨
-> 인스턴스 생성 시 자동으로 호출되어 인스턴스를 초기화함
public BankAccount(String acc, String ss, int bal) {
accNumber = acc;
ssNumber = ss;
balance = bal;
}
BankAccount yoon = new BankAccount("12-34-89", "990990-9090990", 10000);
인스턴스 생성의 마지막 단계는 생성자 호출이며, 어떠한 이유로든 생성자 호출이 생략된 인스턴스는 인스턴스가 아님
단, 생성자를 생략한 상태의 클래스를 정의하면
자바 컴파일러가 '디폴트 생성자'를 클래스의 정의에 넣어줌
class BankAccount {
int balance;
public BankAccount() { // 컴파일러에 의해 자동 삽입되는 '디폴트 생성자'
// empty
}
public int deposit(int amount) { ... }
public int withdraw(int amount) { ... }
}
컴파일러에 의해서 디폴트 생성자가 삽입이 되더라도, 생성자는 직접 정의해 주는 것이 좋음
아주 예외적인 상황이 아니라면, 생성자가 필요없는 클래스는 잘 정의된 클래스가 아니기 때문
💡 전역 변수 vs 지역변수, 클래스 변수 vs 인스턴스 변수
선언위치에 따라 전역변수와 지역변수로 나눌 수 있음
- 전역변수: 어디서든 호출이 가능함
- 클래스 변수: 객체 생성 없이 사용가능
- 인스턴스 변수: 객체를 생성해야 사용 가능
- 지역변수: {특정 구역} 안에서 생성되어 그 구역 안에서만 사용할 수 있음
전역변수를 2가지로 구분할 수 있음class Ex_variables { int global_int; // 전역변수(인스턴스 변수): 같은 객체에서 호출 가능 static int global_statuc_int; // 전역변수(클래스변수): 다른 객체에서도 호출 가능 void method(){ int local_int = 0; // 지역변수: { }안에 생성되며 { }를 벗어나면 사용 불가 } }
객체의 생성 없이 호출이 가능한 메소드