인스턴스
클래스가 설계도라면, 인스턴스는 클래스(설계도)로 만들어진 객체이다.
예를 들어 Song이라는 클래스가 있으면, '눈의 꽃', '진달래 꽃', '소주 한 잔' 등은 Song 클래스를 따르는 인스턴스라고 부를 수도 있고, 그냥 Song 인스턴스라고 부를 수 있다.
객체 지향 프로그래밍에서부터 다뤘던 '은행 계좌 시뮬레이션' 프로그램에서는 Person이라는 클래스가 있다.
'박효신'이라는 이름을 가진 Person 인스턴스, '임창정'이라는 이름을 가진 Person 인스턴스, '조정석'이라는 이름을 가진 Person 인스턴스 등이 있을 수 있다.
예제
실제로 인스턴스 생성하는 방법을 보자!
일단, Person.java 파일과 BankAccount.java 파일 밖에 없는데, 이 둘에는 main 메소드가 없다.
main 메소드가 있어야 프로그램이 돌아가는데 그렇다면 main 메소드를 쓰고, 이런 저런 테스트를 하기 위해서 BankDriver.java 파일을 만들어보자.
Person 인스턴스 생성
먼저, Person 인스턴스를 담는 변수를 만들어야한다.
public class BankDriver {
public static void main(String[] args) {
// 사람 선언
Person p1;
}
}
실제로 Person 인스턴스를 만들기 위해서는 '생성자'라는 것을 써야한다. 생성자에 대해서는 곧 자세히 배운다고하니 일단은 '인스턴스를 생성하는 메소드' 정도로만 알고 넘어가자~
생성자는 new 키워드와 함께 클래스의 이름을 써주면 된다.
public class BankDriver {
public static void main(String[] args) {
// 사람 선언
Person p1 = new Person();
}
}
이렇게 써주면 이제 p1에는 Person 인스턴스가 저장된다.
기억을 다시 되살려보면 Person 객체는 name 변수, age 변수, 그리고 cashAmount 변수가 있다. 각각의 변수에 값을 지정해주도록 하자.
public class BankDriver {
public static void main(String[] args) {
// 사람 선언
Person p1 = new Person();
p1.name = "박효신"
p1.age = 28;
p1.cashAmount = 30000;
}
}
제대로 들어갔는지 값들을 출력!(만약 BankAccount의 비어있는 메소드 오류 때문에 실행할 수 없다면, 해당 부분을 주석처리할 것)
public class BankDriver {
public static void main(String[] args) {
// 사람 선언
Person p1 = new Person();
p1.name = "박효신"
p1.age = 28;
p1.cashAmount = 30000;
// 테스트
System.out.println(p1.name);
System.out.println(p1.age);
System.out.println(p1.cashAmount);
}
}
박효신
28
30000
사실 Person 인스턴스는 account라는 속성도 있는데 아직 BankAccount 인스턴스가 없기 때문에 일단 그냥 두도록한다.
BankAccount 인스턴스 생성
이제 BankAccount 인스턴스도 만들어보자!
public class BankDriver {
public static void main(String[] args) {
// 사람 생성
Person p1 = new Person();
p1.name = "박효신"
p1.age = 28;
p1.cashAmount = 30000;
// 은행 계좌 생성
BankAccount a1 = new BankAccount();
a1.balance = 100000;
}
}
BankAccount 인스턴스를 생성하고 a1에 넣어주었다. 그리고 계좌 a1의 잔액을 100000으로 설정.
두 인스턴스 엮기
객체 지향 프로그래밍에서 중요한 부분은 연관된 객체들끼리 서로 엮는 것이다. p1과 a1을 한 번 엮어보겠습니다.
public class BankDriver {
public static void main(String[] args) {
// 사람 생성
Person p1 = new Person();
p1.name = "박효신"
p1.age = 28;
p1.cashAmount = 30000;
// 은행 계좌 생성
BankAccount a1 = new BankAccount();
a1.balance = 100000;
// 두 객체의 관계 설정
p1.account = a1;
a1.owner = p1;
// 테스트
System.out.print(p1.name + "의 계좌 잔액: " + p1.account.balance);
}
}
김신의의 계좌 잔액: 100000
p1(Person 인스턴스)의 account 변수의 자료형은 BankAccount이다. p1.account에 BankAccount 인스턴스인 a1을 넣어줬다. 마찬가지로 a1.owner에는 Person 인스턴스인 p1을 지정해줬다. 즉, a1은 p1의 은행 계좌이고, p1은 a1의 소유인인 셈이다.

'TIL > Java' 카테고리의 다른 글
[Java] 접근 제어자 (0) | 2021.12.31 |
---|---|
[Java] 은행 시뮬레이션 프로그램_입금, 출금 메소드 작성하기 (0) | 2021.12.31 |
[Java] 메소드(Method) (0) | 2021.12.29 |
[Java] 객체 지향 프로그래밍이란? (0) | 2021.12.29 |
[Java] 다중 배열(Multi Array) (0) | 2021.12.28 |