class Cricle{
int radius;
String color;
double calcArea() {
return 3.14 * radius *radius;
}
}
public class Main {
public static void main(String[] args) {
Cricle obj; // 1) 참조 변수 선언
obj = new Cricle(); // 2) 객체 생성
obj.radius = 100; // 3) 객체 필드, 메소드 접근
obj.color = "blue";
double area = obj.calcArea();
System.out.println("원의 면적 = " + area);
}
}


⭐️ 객체란 .class를 메모리로 올린 것

Circle obj;
Circle 클래스 타입의 참조 변수 obj를 선언하게 되면, 메모리에 참조변수 obj를 위한 공간이 마련된다. 아직 인스턴스가 생성되지 않았으므로 null상태이다.

int를 선언하는 것과 마찬가지로 obj에는
1) 몇 바이트? 4byte
JVM이 32bit이므로 4바이트
2) 메모리에 들어가는 것?
주소값
이 들어간다. 주소값을 참고하는 것이므로 참조형이라고 한다.
💡 함수, 참조값는 4byte!
obj = new Circle();
new를 선언하게 되면 해당 class의 인스턴스를 heap에 올린다. 이 때, 멤버변수는 각 자료형에 해당하는 기본값으로 초기화 된다.
그리고 = 대입자에 의해 Heap에 생성된 객체의 첫번째 주소를 a에 대입한다.
이제는 참조변수 obj를 통해서 Circle 인스턴스에 접근할 수 있다. 인스턴스를 다루기 위해서는 참조변수가 반드시 필요하다.

💡 초기화
참조형 변수: nullboolean: falsebyte,short,int: 0long: 0lfloat: 0.0fdouble: 0.0 or 0.0dchar: ₩u0000'
obj.radius = 100;
obj.color = "blue";
참조변수 obj에 저장된 주소에 있는 인스턴스의 멤버변수 radius에 100을 저장한다.

class Student {
String name;
int id;
int age;
public void getInfo() {
System.out.println("학생의 이름: " + this.name);
System.out.println("학생의 학번: " + this.id);
System.out.println("학생의 나이: " + this.age);
}
}
public class CircleTest {
public static void main(String[] args) {
Student a1 = new Student();
a1.name = "훈이";
a1.id = 20180001;
a1.age = 4;
a1.getInfo();
// System.out.println("학생의 이름: " + a1.name);
// System.out.println("학생의 학번: " + a1.id);
// System.out.println("학생의 나이: " + a1.age);
}
}
class Rectangle {
int width;
int height;
public void setWidth (int width) {
this.width = width;
}
public void setHeight (int height) {
this.height = height;
}
public int getArea() {
return width*height;
}
}
public class CircleTest {
public static void main(String[] args) {
Rectangle rec = new Rectangle();
rec.setWidth(10);
rec.setHeight(10);
System.out.println(rec.getArea());
}
}