참조 자료형(reference data type)
- 변수의 자료형은 int,long,float,double와 같은 기본 자료형과 String, Date, Student등과 같은 참조자료형이 있습니다.
- 그 중 참조 자료형은 클래스형으로 변수를 선언하는 것으로 기본자료형은 메모리가 정해져 있지만, 참조 자료형은 클래스에 따라 메모리가 다르다는 특징이 있습니다.
참조 자료형 직접 만들어서 사용하기
- 가장 왼쪽 표와 같이 학생이라는 클래스에 함께 들어 있던 속성들을 각각 학생과 과목 클래스로 나누어서 관리하고학생 클래스에서 필요할때 과목이라는 참조 자료형으로 변수를 만들어 과목의 속성들을 활용하도록 해보겠습니다.
public class Student {
int studentID;
String studentName;
int koreanScore;
int mathScore;
int engScore;
String koreaName;
String mathName;
String engName;
}
- 첫번째 그림과 같이 Student 클래스에 학생과 과목에 속성이 혼재되어 있는 모습입니다. 이것을 각각 Student와 Subject 클래스로 나누어주도록 하겠습니다.
public class Subject {
String subjectName;
int score;
int subjectID;
}
- 다음과 같이 Subject 클래스를 만들고 그 안에 Subject의 속성들을 멤버 변수로 선언해 줍니다..
public class Student {
int studentID;
String studentName;
Subject korea;
Subject math;
}
//2번
public Student (int id, String name ) {
studentID = id;
studentName = name;
korea = new Subject();
math = new Subject();
}
//3번
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 showStudentScore() {
int total = korea.score + math.score;
System.out.println(studentName+ "학생의 총점은" + total + "입니다.");
}
- Student 클래스로 돌아와 Subject 클래스를 사용하기 위해 1번과 같이 Subject 클래스를 참조변수로 삼는 korea; math; 변수를 선언해 줍니다.
- String과 같은 참조형 변수는 기본 자료형과 같이 바로 사용할 수 있는게 있지만 그 외의 참조형 변수는 생성자를 구현해야 사용할 수 있습니다. 그래서 2번과 같이 Student의 생성자를 구현하며 함께 korea와 math를 참조변수로 하는 Subject 인스턴스를 생성합니다.
- 3번과 같이 각각 과목의 이름과 점수를 입력할 수 있는 setSubjct메소드를 만들고 그 합산을 구해 출력하는 showStudentScore 메서드를 만듭니다.
public class StudentTest {
public static void main(String[] args) {
//1번
Student studentLee = new Student(100,"이순신");
//2번
studentLee.setKoreaSubject("국어", 100);
studentLee.setMathSubject("수학", 80);
//1번
Student studentKim = new Student(101,"김유신");
//2번
studentKim.setKoreaSubject("국어", 80);
studentKim.setMathSubject("수학", 90);
//3번
studentLee.showStudentScore();
studentKim.showStudentScore();
}
//결과값
이순신학생의 총점은180입니다.
김유신학생의 총점은170입니다.
}
- 테스트를 위해 StudentTest 클래스를 생성하고 1번처럼 StudnetLee를 참조변수로 하는 Student 인스턴스를 생성합니다.
- 2번과 같이 setSubject메서드를 통해 각각의 과목명과 점수를 입력한 뒤에 3번과 같이 과목 점수의 합계를 출력하는 메소들 통해 결과값이 나오는 것을 확인합니다.
- 개인적인 정리로는 참조형 변수를 사용한다는 것 = 클래스에 인스턴스를 생성해서 사용한다는 것이라고 정리가 됩니다.
'Java' 카테고리의 다른 글
[Java] 클래스와 객체 - this에 대하여 (0) | 2020.07.10 |
---|---|
[Java] 클래스와 객체 - 정보 은닉 (0) | 2020.07.10 |
[Java] 클래스와 객체 - 생성자, 생성자 오버로딩 (0) | 2020.07.10 |
[Java] 클래스와 객체 - 예제(1) (0) | 2020.07.10 |
[Java] 클래스와 객체 - 인스턴스, 힙 메모리 (0) | 2020.07.09 |