참조 자료형
- 변수의 자료형에는 int, char 등과 같이 기본형 타입과 클래스를 정의하여 자료형으로 사용하는 참조 자료형이 있다.
- 기본형 타입은 선언 시 고정된 길이의 메모리가 주어지지만, 참조 자료형은 정의된 클래스에 따라 가변 길이의 메모리 공간을 가진다.
- 참조 자료형 변수를 선언하면 변수에 대한 메모리 공간이 주어진다.
- 선언한 후에는 변수에 대해 생성 해주어야 한다. ( String 클래스는 예외 )
- 변수에 대한 생성은 대부분 생성자 내부에서 한다.
클래스 생성 시 유의할 점
학생의 정보와 학생이 수강한 과목에 대한 정보를 나타내고 싶다고 할때,
학생 클래스에 학생의 정보와 수강한 과목 정보를 모두 구현한다. (X)
→ 학생마다 수강하는 과목 수, 종류 등이 다 다를 수 있어 수강할 수 있는 과목에 대한 property를 모두 정의해야 한다.
학생 클래스와 과목 클래스를 따로 구현하여 상호 작용하도록 한다. (O)
→ 학생마다 수강하는 과목만 참조형 변수로 추가해주면 된다.
아직 잘 와닿지 않는다ㅜ.ㅜ
Subject.java
과목에 대한 속성만을 가지고 있는 클래스
package ch09;
public class Subject {
String subjectName;
int score;
int subjectId;
}
Student.java
학생의 정보와 수강하는 과목을 속성으로 가지는 클래스
package ch09;
public class Student {
int studentId;
String studentName;
Subject korean; // Subject 객체 선언만 했을 뿐 생성은 되지 않음
Subject math;
Student(int studentId, String studentName) {
this.studentId = studentId;
this.studentName = studentName;
korean = new Subject(); // 생성자에서 참조 자료형으로 멤버 변수를 사용하는 경우가 많음
math = new Subject();
}
public void setKoreanSubject(String name, int score) {
korean.subjectName = name;
korean.score = score;
}
public void setMathSubject(String name, int score) {
math.subjectName = name;
math.score = score;
}
public void showScoreSum() {
int scoreSum = math.score + korean.score;
System.out.println(studentName + " 학생의 점수 총 합은 " + scoreSum + "점 입니다.");
}
}
SubjectTest.java
package ch09;
public class SubjectTest {
public static void main(String[] args) {
Student studentSue = new Student(12345,"Sue");
studentSue.setKoreanSubject("국어", 96);
studentSue.setMathSubject("수학", 89);
studentSue.showScoreSum();
Student studentKim = new Student(54321,"Kim");
studentKim.setKoreanSubject("국어", 90);
studentKim.setMathSubject("수학",88);
studentKim.showScoreSum();
}
}
수행 결과
Sue 학생의 점수 총 합은 185점 입니다.
Kim 학생의 점수 총 합은 178점 입니다.
'Java & Kotlin' 카테고리의 다른 글
[Java 객체지향] 접근 제어 지시자 (0) | 2022.01.25 |
---|---|
[Java 객체지향] 생성자 (0) | 2022.01.25 |
[Java 객체지향] 인스턴스와 힙메모리 (0) | 2022.01.24 |