[Java] 클래스와 객체 - 참조 자료형

나영원·2020년 8월 25일
0

Java_basic

목록 보기
26/60

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

0개의 댓글