본문 바로가기
개발공부/Java

[Java] 05. 참조 자료형 변수

by sangyeon 2021. 11. 18.
728x90

변수의 자료형에는 기본 자료형과 참조 자료형이 있다.

 

기본자료형 - int, long, float, double 등

참조자료형 - String, Date, Student 등

 

* 참조자료형은

- 클래스형으로 변수를 선언

- 기본 자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다름

- 참조 자료형을 사용할 때는 해당 변수에 대해 생성해야 함

(String 클래스는 예외적으로 생성하지 않고 사용할 수 있다.)

 

1.  참조 자료형 정의하여 사용하기

- 학생이 수강한 과목들에 대한 성적을 산출하기 위한 경우 학생 클래스 속성에 과목이 모두 있으면 불합리하다.

- 학생(Student)과 과목(Subject)에 대한 클래스를 분리하여 사용하고 Subject 클래스를 활용하여 수강한 과목들의 변수의 타입으로 선언한다.

- 선언된 Subject 변수는 생성된 인스턴스가 아니므로, Student 생성자에서 생성하여 사용한다.

 

2. 참조변수 사용 예제

- Student.java

package ch09;

public class Student {

int studentId;
String studentName;

Subject korea;
Subject math;

Student(int studentId, String studentName){
this.studentId = studentId;
this.studentName = studentName;

korea = new Subject();
math = new Subject();
}

public void setKoreaSubject(String name, int score) {
korea.subjectName = name;
korea.score = score;

}

public void setMathSubject(String name, int score) {
math.subjectName = name;
math.score = score;
}

public void showTotalScore() {

int total = korea.score + math.score;
System.out.println(studentName + "학생의 총점은 : " + total + "점 입니다.");
}
}

> 생각해보면 간단하다. 학생 클래스 속성에 국/영/수/사 모든 과목명과 과목 점수 과목코드에 대한 변수를 설정하는 것은 상당히 비효율적이라고 볼 수 있다. 

그렇기 때문에 클래스안에 클래스로 변수를 선언한다고 볼 수 있다. 

 

 

- Subject.java

package ch09;

public class Subject {

String subjectName;
int score;
int subjectId;

}

 

- SubjectTest.java

package ch09;

public class SubjectTest {

public static void main(String[] args) {

Student studentLee = new Student(100, "Lee");
studentLee.setKoreaSubject("국어", 100);
studentLee.setMathSubject("수학", 95);


Student studentKim = new Student(200, "Kim");
studentKim.setKoreaSubject("국어", 95);
studentKim.setMathSubject("수학", 55);

studentLee.showTotalScore();
studentKim.showTotalScore();

}

}
728x90