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());
}
}