1. 참조 자료형(Reference data type) 이란?
변수의 자료형은 기본 자료형과 참조 자료형 2가지로 구분된다.
1) 기본 자료형과 참조 자료형의 차이점은?
기본 자료형은 사용하는 메모리가 정해져있는 자료형이다.
대표적으로 int, long, float, double 등이 존재한다.
참조 자료형은 클래스를 타입으로 변수를 선언하는 자료형이다. 그러므로 클래스에 따라 할당되는 메모리가 다르다.
대표적으로 String, Date 등이 존재하고 또한 임의로 내가 원하는 클래스를 만들어 참조 자료형으로 사용할 수있다.
2) 참조 자료형 구현
Student라는 이름의 클래스 안에 학생에 대한 정보가 저장되어있는데, 과목에 대한 정보를 다른 클래스에 구현한 후 참조 자료형을 이용하여 더욱 쉽게 데이터를 관리 하려고 한다.
2.1) Student.java (1)
학생에 대한 기본 정보를 저장하기 위해 학번과 학생 이름을 멤버 변수로 생성한 후 생성자를 호출할 때 각각 항목을 초기화 할수 있도록 구현한다.
public class Student {
//기본 자료형
public int studentID; //학번
public String studentName; //학생 이름
public Student(int studentID, String studentName) {
this.studentID = studentID;
this.studentName = studentName;
}
}
2.2) Subject.java
과목 이름별 멤버 변수를 생성하지 않고 효율적으로 관리하기 위해 Subject 클래스를 생성한 뒤 과목 이름, 과목 점수 멤버 변수를 생성한다.
public class Subject {
public String subjectName; //과목 이름
public int subjectScore; //과목 점수
}
2.3) Student.java (2)
① 2.2에서 생성한 Subject 참조 자료형을 이용해 국어, 수학 변수를 생성한 뒤 생성자 호출 시 자동으로 초기화 하기 위해서 생성자 안에 new 키워드를 사용하여 해당 변수를 초기화한다.
② 국어, 수학 점수를 가져오기 위해 각 과목이름, 과목점수를 매개 변수로 설정한 메서드를 생성한 후 매개변수 값을 참조 자료형 변수에 대입한다.
③ 기본자료형과 참조 자료형의 값을 출력하기 위해 메소드를 생성한 후 출력한다.
package classpart;
public class Student {
//기본 자료형
public int studentID; //학번
public String studentName; //학생 이름
//참조 자료형
public Subject korea;
public Subject math;
public Student(int studentID, String studentName) {
this.studentID = studentID;
this.studentName = studentName;
//생성자 호출 시 참조 자료형 초기화
korea = new Subject();
math = new Subject();
}
//국어 점수 가져오기
public void setKorSubjectName(String subjectName, int subjectScore) {
korea.subjectName = subjectName;
korea.subjectScore = subjectScore;
}
//수학 점수 가져오기
public void setMathSubjectName(String subjectName, int subjectScore) {
math.subjectName = subjectName;
math.subjectScore = subjectScore;
}
//점수 출력
public void showStudentInfo() {
int total = korea.subjectScore + math.subjectScore;
System.out.println("학번: " + studentID);
System.out.println("이름: " + studentName);
System.out.println("총점: " + total);
}
}
2.4) StudentTest.java
① main 함수에서 Student 객체인 studentPark을 생성하고 학번과 이름을 생성자를 통해 설정한다.
② 이전에 생성한 메서드를 통해 과목이름, 과목 점수를 설정한다.
③ 생성한 정보들을 출력한다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student(100, "park");
studentPark.setKorSubjectName("국어", 90);
studentPark.setMathSubjectName("수학", 95);
studentPark.showStudentInfo();
}
}
2.5) 출력 결과
3) 다른 방식으로 구현
3.1) Subject.java
참조 자료형인 Subject에 멤버 변수를 선언한 후 Setter를 구현한다.
public class Subject {
public String subjectName; //과목 이름
public int subjectScore; //과목 점수
public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}
public void setSubjectScore(int subjectScore) {
this.subjectScore = subjectScore;
}
}
3.2) StudentTest.java
메인 함수에서 객체를 생성한 후 해당 Setter를 직접 호출하여 값을 설정 후 출력한다.
public class StudentTest {
public static void main(String[] args) {
Student studentPark = new Student(100, "park");
studentPark.korea.setSubjectName("국어");
studentPark.korea.setSubjectScore(95);
studentPark.math.setSubjectName("수학");
studentPark.math.setSubjectScore(100);
studentPark.showStudentInfo();
}
}
'Language > JAVA' 카테고리의 다른 글
[JAVA]this 키워드 개념 및 구현 (0) | 2021.02.15 |
---|---|
[JAVA]접근 제어자(Access modifier) 개념 및 구현 (0) | 2021.02.14 |
[JAVA]생성자(Constructor), 생성자 오버로딩(Overloading) 개념 및 구현 (0) | 2021.02.14 |
[JAVA] 클래스와 객체를 이용한 간단한 예제 풀이 (0) | 2021.02.13 |
[JAVA] 함수(Function), 메서드(Method), 인스턴스(Instance) 개념 및 구현 (0) | 2021.02.13 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊