1. 객체 사용
- 클래스를 통해 객체를 생성하려면 먼저 메모리에 존재하는 객체에 접근해야 함.
- 객체를 접근하려면 .(주소연산자)를 사용하면 된다.
- 이 키워드는 변수에 들어있는 참조값을 읽어서 메모리에 존재하는 객체에 접근한다.
Student student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
(1) 객체 vs 인스턴스
Student student1 = new Student();
- 객체: 클래스에서 정의한 속성을 가진 실체이며 서로 독립적인 상태이다.
- 인스턴스: 특정 클래스로부터 생성된 객체
- 위 코드를 보았을떄 객체는 Student타입의 student1 변수를 객체라고 한다. 그리고, Student 타입을 우리는 인스턴스라고 부른다.
2. 배열 도입 - 시작
package class1;
public class ClassStart4 {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
Student[] students = new Student[2];
students[0] = student1;
students[1] = student2;
System.out.println("이름: " + student1.name + " 나이: " + student1.age + " 성적: " + student1.grade);
System.out.println("이름: " + student2.name + " 나이: " + student2.age + " 성적: " + student2.grade);
}
}
(1) 코드분석
Student[] students = new Students[2];
- Students 배열을 메모리에 새로 생성함. 생성한 참조값을 객체 students에 보관한다.
- new Students[2]는 students[0]인 student1의 참조값이 들어있고 students[1]인 student2의 참조값이 들어있다.
- students 객체의 참조값은 해당 배열값에 접근하여 대입한다.
- 자바에서 대입은 항상 변수에 들어있는 값을 복사해서 전달함.
3. 배열 도입-리팩토링
package class1;
public class ClassStart5 {
public static void main(String[] args) {
Student student1 = new Student();
student1.name = "학생1";
student1.age = 15;
student1.grade = 90;
Student student2 = new Student();
student2.name = "학생2";
student2.age = 16;
student2.grade = 80;
Student[] students = new Student[]{student1, student2};
for(int i=0; i<students.length; i++) {
System.out.println("이름: " + students[i].name + " 나이: " + students[i].age + " 성적: " + students[i].grade);
}
for(int i=0; i<students.length; i++) {
Student s = students[i];
System.out.println("이름: " + s.name + " 나이: " + s.age + " 성적: " + s.grade);
}
for(Student s : students) {
System.out.println("이름: " + s.name + " 나이: " + s.age + " 성적: " + s.grade);
}
}
}