public class ClassStart3 {
public static void main(String[] args) {
//클래스 설계도 기반으로 메모리에 만들어진걸 인스턴스라고함
Student student1;
student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
}
클래스 안에 있는 멤버변수를 필드라고 한다.
student1 = new Student();에서
메모리에 x001번지에 실제 student 인스턴스가 만들어지고 참조값(주소)를 student1변수에 저장한다.
우리는 앞으로 메모리에 올라가있는 인스턴스에 접근을할때 Student student1 변수에 저장되어있는 참조값을 사용하여서 실제 메모리에 있는 인스턴스에 접근이 가능하다.
객체에 접근하기 위해서는 .을 이용한다.
Student student1이라면 student1인스턴스의 필드에 접근하기위해서는 .을 이용해서 접근한다.
예를들어, student1에는 x001이라는 참조값이 들어있으므로 student1.name="hello"라면 x001.name="hello"로 접근하는것과 같다.
클래스,객체,인스턴스 정리
객체 vs 인스턴스
둘다 클래스에서 나온 실체라는 의미에서 비슷하다.
특정 클래스와의 관계를 명확히 할때 인스턴스라고 한다.
ex). student1은 Student의 인스턴스이다.
사실 둘다 혼용해서 쓰므로, 둘을 구분하지 않고 사용한다.
배열
★★★JAVA에서의 대입은 항상 변수에 들어있는 값을 복사해서 전달한다. => 인스턴스가 복사되는게 아니라 참조값이 복사된다.
배열을 사용해보자.
student[]students를 하면 배열이 생성된다.
students에는 x005라는 참조값이 들어있다.
여기다가 students[0]=student1을 하면 이 배열인 students[0]에 인스턴스 student1이 복사되는게 아니다.
참조값이 복사되는것이다.
배열에 있는 객체를 사용하기위해서는
이런식으로 접근하게 된다.
for문으로 배열을 돌면서 접근도 가능하다.
우선 배열에 넣을때 최적화로 {}로 초기화할때 같이 넣어주자.
그다음에 length로도 돌릴수있지만 너무 번거로우니까, iter를 사용해서 돌릴수 있다.
iter를 사용하면 인텔리제이가 자동으로 만들어준다.