클래스가 왜 필요한지 이해하기 위해 아래 문제를 풀어보자.
당신은 두 명의 학생 정보를 출력하는 프로그램을 작성해야 한다.
각 학생은 '이름' '나이', '성적'을 가지고 있다.
요구사항:
예시 출력:
이름: 학생1 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80
변수를 사용해서 이 문제를 풀어보면 다음과 같다.
package class1;
public class ClassStart1 {
public static void main(String[] args) {
String student1Name = "학생1";
int student1Age = 15;
int student1Grade = 90;
String student2Name = "학생2";
int student2Age = 16;
int student2Grade = 80;
System.out.println("이름: " + student1Name + " 나이: " + student1Age + " 성적: " + student1Grade);
System.out.println("이름: " + student2Name + " 나이: " + student2Age + " 성적: " + student2Grade);
}
}
이름: 학생1 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80
학생 2명을 다뤄야 하기 때문에 각각 다른 변수를 이용했습니다.
이 코드의 문제는 학생이 늘어날 때 마다 변수를 추가로 선언해야 하고, 출력하는 코드도 추가해야 합니다.
String student3Name = "학생3";
int student3Age = 17;
int student3Grade = 75;
System.out.println("이름: " + student3Name + " 나이: " + student3Age + " 성적: " + student3Grade);
배열을 적용하여 코드 변경을 최소화 해보자
package class1;
public class ClassStart2 {
public static void main(String[] args) {
String[] studentNames = {"학생1", "학생2"};
int[] studentAges = {15, 16};
int[] studentGrades = {90, 80};
for (int i = 0; i < studentNames.length; i++) {
System.out.println("이름: " + studentNames[i] + " 나이: " + studentAges[i] + " 성적: " + studentGrades[i]);
}
}
}
이름: 학생1 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80
학생을 한명 더 추가해보자
String[] studentNames = {"학생1", "학생2", "학생3"};
int[] studentAges = {15, 16, 17};
int[] studentGrades = {90, 80, 75};
배열 안에 값만 넣으면 됩니다.
배열 사용의 한계
클래스를 사용해서 "학생" 이라는 개념을 만들고, 각각의 "학생" 별로 본인의 '이름', '나이', '성적'을 관리할 것이다.
package class1;
public class Student {
String name;
int age;
int grade;
}
class 키워드를 사용해서 학생 클래스(Student)를 정의했다.
학생 클래스는 내부에 이름(name) 나이(age) 성적(grade) 변수를 가진다.
이렇게 클래스에 정의한 변수들을 멤버 변수, 또는 필드라고 한다.
클래스를 사용해서 코드를 만들어 봅시다.
package class1;
public class ClassStart3 {
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 student3 = new Student();
student3.name = "학생3";
student3.age = 17;
student3.grade = 75;
Student[] students = {student1, student2, student3};
for (Student student : students) {
System.out.println("이름: " + student.name + " 나이: " + student.age + " 성적: " + student.grade);
}
}
}
이름: 학생1 나이: 15 성적: 90
이름: 학생2 나이: 16 성적: 80
이름: 학생3 나이: 17 성적: 75
new Student() 와 같이 객체를 생성하면 자바는 메모리 어딘가에 있는 이 객체에 접근할 수 있는 참조값(주소)(x001)을 반환합니다.
지금까지 설명한 내용을 간단히 풀어보면 다음과 같다.
Student student1 = new Student(); //1. Student 객체 생성
Student student1 = x001; //2. new Student()의 결과로 x001 참조값 반환
student1 = x001; //3. 최종 결과