Java

클래스 - 배열

공부처음하는사람 2024. 5. 7. 02:39

 

이전 코드에서의 아쉬운 점은 출력문이다.

마찬가지로 학생이 추가된다면 출력문을 하나씩 추가해야한다.

 

이것을 해결하기위해 배열을 도입해봤다.

 

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("이름: " + students[0].name + " 나이: " + students[0].age + " 성적: " + students[0].grade);
        System.out.println("이름: " + students[1].name + " 나이: " + students[1].age + " 성적: " + students[1].grade);
    }
}

 

코드해석을 해보면, Student 클래스를 기반으로 student1, student2 인스턴스를 생성하고 필요한 값을 초기화했다.

그 다음 Student를 담을 수 있는 배열을 생성하고, 해당 배열에 student1, student2 인스턴스를 보관하려고 한다.

 

Students[] students = new Student[2];

 

배열을 생성했을 때 Student 타입의 변수 students는 이전글에서 다룬것처럼 Student 인스턴스의 참조값을 보관한다.

아직 배열에 참조값을 대입하지 않았기 때문에 null값으로 초기화된다.

 

이제 배열에 객체를 보관하는 코드

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

students[0] = x001;
students[1] = x002;

 

자바에서 대입은 항상 변수에 들어가 있는 값을 복사한다.

추가적인 과정을 거쳤음에도 변함없이 student1의 참조값은 x001이고, student2의 참조값은 x002 이다.

 

변수에는 인스턴스 자체가 들어있는 것이 아니다.

인스턴스의 위치를 가리키는 참조값이 들어있을 뿐이다.

인스턴스가 복사되는것이 아닌 참조값만 복사되는걸 명심하자.

 

배열에 들어있는 객체를 사용하는 과정이다.

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

 

students -> x005 -> x005[0] -> x001

 

 

배열을 사용했기 때문에 for문을 사용해 리팩토링을 해봤다.

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 = {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);
        }
    }
}

 

향상된 for문까지 총 3가지를 작성해봤다.

iter을 사용하면 더욱 간편하게 for문을 사용할 수 있다.

 


 

확실히 코틀린과 문법적으로 차이가 많은 것 같아 새로운걸 배우는 느낌이다.

하지만 문법적인 부분말고 부캠에서는 배우지 않은 내용들이 많이 있어 도움이 많이 된다!

 

자바는 data class가 없는 것 같다.  public class 를 선언하고 psvm을 작성하지 않고 멤버 변수를 작성하면

데이터클래스의 역할을 하는 것 같다.

'Java' 카테고리의 다른 글

생성자  (0) 2024.05.15
객체 지향 프로그래밍  (1) 2024.05.08
기본형과 참조형  (0) 2024.05.07
클래스, 객체, 인스턴스  (0) 2024.05.07
삼항 연산자  (1) 2024.04.25