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
'개발공부 > Java' 카테고리의 다른 글
[Java] 07. 객체 자신을 가리키는 this / 객체 간의 Collaboration (0) | 2021.11.22 |
---|---|
[Java] 06. 접근 제어 지시자, 정보 은닉과 캡슐화 (0) | 2021.11.20 |
[Java] 04. 생성자란? (Constructor) (0) | 2021.11.17 |
[Java] 03. 인스턴스 생성과 힙 메모리 (heap memory) (0) | 2021.11.17 |
[Java] 02. 객체의 속성은 멤버변수로, 객체의 기능은 메서드로 구현한다.(feat 함수와 메서드 개념) (0) | 2021.11.17 |