참조 자료형(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번과 같이 과목 점수의 합계를 출력하는 메소들 통해 결과값이 나오는 것을 확인합니다.
  • 개인적인 정리로는 참조형 변수를 사용한다는 것 = 클래스에 인스턴스를 생성해서 사용한다는 것이라고 정리가 됩니다. 

+ Recent posts