기본자료형은 변수로 값에 접근 한다. 하지만 참조자료형은 변수에 할당값이 주소값(위치)이기 때문에 곧바로 값에 접근할수 없다.
참조한다는 말은 주소값을 통해 특정 데이터 값에 접근할 수 있다는 말이다.
일반적으로 힙에 인스턴스(객체)를 생성하고, 이를 참조하기 위해 참조변수(주소값)를 스택에 생성한다.
스택에 생성된 참조 변수는 참조값을 갖게 되고, 그때 부터 객체라고 부르게 된다.
Book b = new Book();
![[꾸미기]1111.jpg](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/72714ff6-9c19-448c-95f0-971c0812bc77/%EA%BE%B8%EB%AF%B8%EA%B8%B01111.jpg)
package com.java.datatype03.refer;
//커피클래스 생성 (틀)
public class Coffee {
//속성
public int coffeeNo;
public String coffeeName;
public int coffeePrice;
//메소드(행위,기능)
public void coffeeRoasting() {
System.out.println("커피를 로스팅 한다.");
}
}
package com.java.datatype03.refer;
public class Cafe {
public static void main(String[] args) {
// 커피 판매 프로그램
// 자료형 참조변수(객체) 인스턴스 생성 연산자 생성자 ->heap Coffee 인스턴스 생성
Coffee c = new Coffee();
// 값을 할당
c.coffeeNo = 1;
c.coffeeName = "아메리카노";
c.coffeePrice = 1500;
System.out.println("-----" + c.coffeeName + "--------");
System.out.println("커피번호 [" + c.coffeeNo + "]");
System.out.println("커피이름 [" + c.coffeeName + "]");
System.out.println("커피가격 [" + c.coffeePrice + "]");
c.coffeeRoasting();
Coffee c1 = new Coffee();
// 값을 할당
c1.coffeeNo = 2;
c1.coffeeName = "까페라떼";
c1.coffeePrice = 3000;
System.out.println("-----" + c1.coffeeName + "--------");
System.out.println("커피번호 [" + c1.coffeeNo + "]");
System.out.println("커피이름 [" + c1.coffeeName + "]");
System.out.println("커피가격 [" + c1.coffeePrice + "]");
c.coffeeRoasting();
Coffee c2 = new Coffee();
// 값을 할당
c2.coffeeNo = 3;
c2.coffeeName = "딸기 스무디";
c2.coffeePrice = 3000;
System.out.println("-----" + c2.coffeeName + "--------");
System.out.println("커피번호 [" + c2.coffeeNo + "]");
System.out.println("커피이름 [" + c2.coffeeName + "]");
System.out.println("커피가격 [" + c2.coffeePrice + "]");
}
}