개발 공부/[java]

[java] 김영한의 실전 자바 기본편 / 강의 정리 / 1. 클래스와 데이터 2

죽밥죽밥화이팅 2024. 2. 16. 16:37

해당 내용은 인프런에 있는 [김영한의 실전 자바 기본편] 강의를 보고 참고하여 정리한 글이다.

혹시 문제가 된다면 꼭 알려주시길 바랍니도...😢

 

 

 

배열 도입 

클래스와 객체를 이용하여 데이터를 구조적으로 이해하기 쉽게 변경함

System.out.println("이름: " + student1.name + " 나이: " + student1.age + " 성적: " + student1.grade);
System.out.println("이름: " + student2.name + " 나이: " + student2.age + " 성적: " + student2.grade);

하지만 학생 출력 부분이 아쉬움 / 새로운 학생 추가할 때 마다 같이 추가해 줘야하는 번거로움 발생

 

배열을 도입하여 특정 타입을 연속한 데이터 구조로 묶어 관리하면 편함

Student 클래스를 사용한 변수들이 Student 타입이기 때문에 배열을 사용하여 하나의 데이터로 묶어버리자

 

package class1;

public class ClassStart4 {
    public static void main(String[] args) {
        //Student 클래스를 기반으로 student1, student2 인스턴스를 생성 & 값을 채워 넣음
        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("이름: " + students[0].name + " 나이: " + students[0].age + " 성적: " + students[0].grade);
        System.out.println("이름: " + students[1].name + " 나이: " + students[1].age + " 성적: " + students[1].grade);
    }
}

메모리 상에 student 인스턴스 객체  두 개가 있음

 

배열에 참조값 대입 

Student를 담을 수 있는 배열을 생성 & 해당 배열에 student1, student2 인스턴스를 보관

Student[] students = new Student[2];

 

 

Student 변수 2개를 보관할 사이즈 2의 배열을 만듦

Student타입의 변수(student1, student2)는 Student 인스턴스의 참조값(x001, x002)을 보관 / Student 배열의 각각의 항목([0], [1])도 Student 타입의 변수일 뿐 => 참조값을 보관함

배열엔 아직 참조값 대입을 하지 않았으므로 참조값이 없다는 의미인 null이 값으로 초기화 됨

students[0] = student1;
students[1] = student2;

//자바에서 대입은 항상 변수에 들어있는 값을 복사함
students[0] = x001;
students[1] = x002;

 

자바에서 대입은 항상 변수에 들어있는 값을 복사함

student1, student2에 각각 들어있던 참조값인 x001, x002를 복사하여 배열에 대입해주는 것임

 

배열은 참조값을 가지게 됨 // Student 인스턴스에 모두 접근할 수 있게 됨 // 학생1(x001), 학생2(x002)

 

 

배열에 들어있는 객체 사용 

배열에 든 객체를 사용하려면 먼저 배열에 접근 -> 객체에 접근

위의 이미지를 참고하여 코드 보기

학생1 예제)

System.out.println(students[0].name); //배열 접근 시작
System.out.println(x005[0].name); //[0]를 사용해서 x005 배열의 0번 요소에 접근
System.out.println(x001.name); //.(dot)을 사용해서 참조값으로 객체에 접근
System.out.println("학생1");

 

 

배열 최적화 

Student[] students = {student1, student2}; //배열 최적화

 

for문 최적화

for문 도입

for (int i = 0; i < students.length; i++) { //출력 for문
    System.out.println("이름: " + students[i].name + " 나이: " + students[i].age + " 성적: " + students[i].grade);
}

 

for문  - 반복 요소 변수에 담아서 처리

for (int i = 0; i < students.length; i++) { //출력 for문 최적화
    Student s = students[i];
    System.out.println("이름: " + s.name + " 나이: " + s.age + " 성적: " + s.grade);
}

 

향상된 for문

변수에 담아서 사용할 경우 향상된 for문을 사용해주면 가장 깔끔해진다

* Tip) ITER 단축키 사용시 향산된 for문 자동 완성됨 

for (Student s : students) { //향상된 for문
    System.out.println("이름: " + s.name + " 나이: " + s.age + " 성적: " + s.grade);
}