사용자가 직접 정의하는 사용자 정의 타입을 만드는 설계도가 바로 설계도
설계도(클래스)를 바탕으로 실제 메모리에 만들어진 것을 객체(인스턴스)라고 한다.
같은 클래스에서 파생된 객체이더라도 모든 객체를 서로 독립적이다.
뉘앙스의 차이이다. 인스턴스는 관계에 집중하여 Student에서 파생된 s1, s2가 있다면 s1과 s2는 Student의 인스턴스라고 표현한다.
Student s1 = new Student();
위 코드를 통해 Studnet의 객체인 s1은 실제 메모리상의 어딘가에 생성된다.
이 때 s1은 메모리상의 주소를 참조하게 되고 s1을 통해 객체에 접근할 수 있게 된다.
Student s1 = new Student(); //1. Student 객체 생성
Student s1 = x001; //2. new Student()의 결과로 x001 참조값 반환
student1 = x001; //3. 최종 결과
객체 사용을 위해선 '.'을 사용하면 된다.
s1.name = "홍공진"
위와 같이 '.'을 이용해서 s1이라는 객체의 멤버 변수에 값을 지정할 수 있다.
s1이 참조하는 메모리 주소상으로 '.'을 통해 접근하게 된다.
public class StudentMain {
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "홍공진";
s1.age = 21;
s1.grade = 3;
Student s2 = new Student();
s2.name = "깅깅";
s2.age = 21;
s2.grade = 3;
Student[] students = new Student[2];
students[0] = s1;
students[1] = s2;
}
}
Student라는 클래스를 이용해 s1, s2라는 객체를 생성한 후 Student 타입을 저장하는 students라는 배열을 생성했다.
위 배열도 객체이기 때문에 실제 메모리에 생성되어 주소값을 가질 수 있고 s1, s2를 저장하여 접근할 수 있게한다.
즉 x005라는 주소에서 x001, x002라는 주소로 타고 들어갈 수 있다는 것이다.