크기가 정해진 기본 자료형(int, char, float, double 등)으로 선언하는 변수가 있고, 클래스 자료형으로 선언하는 참조 자료형 변수가 있다.
- 클래스를 선언하여 참조형을 이용한 프로그램 구현 예시
어떤 학생이 존재한다.
학생이 국어와 수학 과목을 수강하는데, 시험을 본 후 국어 성적과 수학 성적 정보를 저장하는 프로그램을 만든다고 생각해보자.
객체 지향 프로그래밍을 시작할 때는 일단 클래스를 어떻게 만들지 생각한다.
먼저 클래스가 제공해야 할 멤버 변수와 메서드를 생각해 볼 수 있다.
이를 바탕으로 다음처럼 학생 클래스를 만들어 보자.
package exercise;
public class Student1 {
int studentID;
String studentName;
int koreaScore;
int mathScore;
}
여기서 String이 JDK에서 제공하는 참조 자료형이다.
나머지 변수는 기본 자료형을 사용했다.
그런데 성적을 저장하는 변수가 두 개 있는데, 만약 성적뿐만 아니라 이 학생이 수강하는 과목의 이름도 함께 저장해야 한다면? 아주 간단한 방법으로는 String을 사용해서 과목 이름 변수까지 추가할 수 있다.
package exercise;
public class Student1 {
int studentID;
String studentName;
int koreaScore;
int mathScore;
String koreaSubject;
String mathSubject; //과목 이름 변수 추가
}
이렇게 구현하니 이 클래스는 학생에 대한 클래스인데 과목에 대한 변수가 계속 늘어나고 있다.
이 문제를 해결하기 위해 과목의 이름과 성적을 Subject라는 클래스로 분리하고, 학생에 Subject 변수를 각 과목별로 추가하는 것이 좋아 보인다.
| 학생 |
| 학번 학생 이름 국어 성적 수학 성적 수강하는 과목 이름 |
이었던 걸
| 학생 | 과목 |
| 학번 학생 이름 국어 과목 수학 과목 |
과목 이름 과목 점수 |
로 나눈다.
위 내용을 우리가 사용하느 변수 형태로 보면 다음과 같다.
| Student | Subject |
| int studentID String studentName Subject korean Subject math |
String subjectName int scorePoint |
과목을 의미하는 Subject라는 클래스를 새로 만들었다.
Subject 클래스는 과목의 이름과 점수를 멤버 변수로 가지고 있다.
이렇게 수정하면 과목과 관련한 내용은 Subject 클래스로 분리하여 구현할 수 있다.
또한 Student는 SUbject 클래스를 멤버 변수로 가지면 된다.
package exercise;
public class Subject {
String subjectName;
int scorePoint;
}
package exercise;
public class Student1 {
int studentID;
String studentName;
Subject korean;
Subject math; //Subject 형을 사용하여 선언
}
기존엔 Student1 클래스에 과목 이름을 추가해야 한다면 koreanSubjectName, mathSubjectName 이렇게 두 개의 변수를 추가해야 한다.
하지만 Subject로 클래스를 분리하면 subjectName은 Subject 클래스에 선언하면 된다.
그리고 국어 과목 이름은 Korean.subjectName으로 사용하고 수학 과목 이름은 math.subjectName으로 사용할 수 있어 편리하다.
참조 자료형은 프로그래머가 필요에 의해 만든 클래스를 사용할 수도 있고, JDK에서 제공하는 클래스를 사용할 수도 있다.
기본 자료형을 사용하듯이 클래스 자료형 변수를 선언해서 사용한다고 생각하면 이해하기 쉽다.
'JAVA' 카테고리의 다른 글
| this (0) | 2024.12.16 |
|---|---|
| 정보 은닉(접근 제어자, get(),set()) (0) | 2024.12.13 |
| 생성자 (0) | 2024.12.13 |
| 클래스와 인스턴스 (0) | 2024.12.12 |
| 함수(매개변수, return), 스택 메모리, 메서드 (0) | 2024.12.11 |