chapter 4 클래스, 객체, 참조변수(1)
한 사람의 이름과 전화번호는 항상 같이 붙어다녀야 하는 데이터라면,
이 두 가지 데이터를 서로 별개의 변수에 저장하면 우리가 이름 데이터를 옮길 때마다 전화번호 데이터도 따로 옮겨줘야 한다
만약 각 사람에 대해 주소, 이메일등 데이터를 추가로 저장해야 한다면 불편은 더 심해질 것
이렇게 서로 관련있는 데이터들을 하나의 단위로 묶어두면 편하다
이게 클래스라는 개념이 등장하는 가장 기본적인 이유
클래스는 결국 하나의 '타입'이다
다만 int, double처럼 java가 미리 정해놓은 타입이 아니라 사용자가 정의한 새로운 타입이라는 의미에서 '사용자 정의 타입'이라고 부르기도 한다
int형 변수를 선언하고 사용하는 것처럼 Person1형 변수를 선언하고 사용한다
public static void main(String[] args) {
Person1 first; // Person1의 변수 선언
first = new Person1(); // object 생성
first.name = "John";
first.number = "01055556666";
System.out.println("Name: " + first.name + ", Number: " + first.number);
// Person1 타입의 배열도 만들 수 있다
Person1 [] members = new Person1 [100];
members[0] = first;
members[1] = new Person1();
members[1].name = "David";
members[1].number = "01022223333";
System.out.println("Name: " + members[1].name + ", Number: " + members[1].number);
}
first.name은 first에 저장된 Person1객체 주소의 name field를 의미
int count = 0;
Person1 first = new Person1();
count라는 이름의 변수가 만들어지고 그 안에 정수값 0이 저장
first 라는 이름의 변수가 만들어지지만 그 안에 name, number가 저장되는 않는다
이름과 전화번호를 저장할 Person1 object는 new명령으로 따로 만들어야 하고 변수 first에는 그 객체의 주소(참조)를 저장할 수 있다

모든 프리미티브 타입의 변수는 '보통 변수'이다
즉 변수 자체에 값이 저장된다
프리미티브 타입이 아닌 모든 변수는 '참조 변수'이다
즉 실제 데이터가 저장 될 '객체'는 new 명령으로 따로 만들어야하고 참조변수에는 그 객체의 주소를 저장한다
Person1 first; // Person1의 변수 선언
first = new Person1(); // object 생성
클래스인 Person1은 type이고
여기서 Person1의 변수인 first는 참조변수
first에 name과 number 가 저장되는게 아니라
first안에는 객체를 new 명령으로 만들어 객체의 주소를 저장한다