일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Map 인터페이스
- 인터페이스
- 깃
- CSS
- java
- 메서드
- 패키지
- 해결
- Git
- 클래스
- 컬렉션 프레임워크
- singlrton pattern
- 싱글톤 패턴
- 버전관리
- 이클립스 설치
- Class
- Method
- html
- GitHub
- Eclipse
- 자바
- 깃허브
- Collection Framework
- 오류
- Collection 인터페이스
- 이클립스
- Today
- Total
안루피취뽀일기
참조 자료형 본문
참조 자료형이란?
크기가 정해진 기본 자료형(int, char, float, double 등)으로 선언하는 변수가 있고, 클래스 자료형으로 선언하는 참조 자료형 변수가 있다. 참조 자료형 변수의 특징에 대해 좀 더 자세히 살펴보고, 클래스를 선언하여 참조형을 이용한 프로그램을 구현해보자.
어떤 학생이 있다. 이 학생이 국어와 수학 과목을 수강하는데, 시험을 본 후 국어 성적과 수학 성적 정보를 저장하는 프로그램을 만든다고 생각해보자. 객체 지향 프로그래밍을 시작할 때는 일단 클래스를 어떻게 만들지 생각한다. 먼저 클래스가 제공해야 할 멤버 변수와 메서드를 생각해볼 수 있다. 이를 바탕으로 다음처럼 학생 클래스를 만들어 보았다.
package reference;
public class Student1 {
int studentID;
String studentName;
int koreaScore;
int mathScore;
}
여기에서 String이 JDK(Java Development Kit)에서 제공하는 참조 자료향이다. 나버지 변수는 기본 자료형을 사용했다. 성적을 저장하는 변수가 두 개(int koreaScore, int mathScore)있는데, 만약 성적뿐만 아니라 이 학생이 수강하는 과목의 이름도 함께 저장해야 한다면 어떻게 할까? 아주 간단한 방법으로는 String을 사용해서 과목 이름 변수까지 추가할 수 있다.
package reference;
public class Student2 {
int studentID;
String studentName;
int koreaScore;
int mathScore;
//과목 이름 변수 추가
String koreaSubject;
String mathSubject;
}
이렇게 구현하고 보니 뭔가 개운하지 않다. 이 클래스는 학생에 대한 클래스인데 과목에 대한 변수가 계속 늘어나고 잇다. 이 문제를 해결하기 위해 과목의 이름과 성적을 Subject라는 클래스로 분리하고, 학생에 Subject 변수를 각 과목 별로 추가해보자. 그러면 다음과 같은 클래스의 관계도가 나올 것이다.
위 내용을 우리가 사용하는 변수 형태로 보면 다음과 같다.
과목을 의미하는 Subject라는 클래스를 새로 만들었다. Subject 클래스는 과목의 이름과 점수를 멤버 변수로 가지고 있다. 이렇게 수정하면 과목과 관련한 내용은 Subject 클래스로 분리하여 구현할 수 있다. 또한 Student는 Subject 클래스를 멤버 변수로 가지면 된다. 이 학샹은 두 과목을 수강하므로 Subject형 변수를 두 개 선언했다.
package reference;
public class Subject {
String subjectName;
int scorePoint;
}
package reference;
public class Student3 {
int studentID;
String studentName;
//Subject형을 사용하여 선언
Subject korean;
Subject math;
}
이렇게 구현하면 달라지는 것이 무엇일까? 기존의 Student2 클래스에 과목 이름을 추가해야 한다면, KoreanSubjectName, mathSubjectName 이렇게 두 개의 변수를 추가해야 할 것이다. 하지만 Subject로 클래스를 분리하면 subjectName은 Subject클래스에 선언하면 된다. 그리고 국어 과목이름ㄹ은 Korean.subjectName으로 사용하고, 수학 과목 이름른 math.subjectName으로 사용할 수 있어 편리하다.
지금까지 Student 클래스와 Subject 클래스를 분리하면 참조 자료형을 어떻게 사용하는지 알아보았다. 참조 자료형은 프로그래머가 필요에 의해 만든 클래스를 사용할 수도 있고, JDK에서 제공하는 클래스를 사용할 수도 있다. 기본 자료형을 사용하듯이 클래스 자료형 변수를 선언해서 사용한다고 생각하면 이해하기 쉽다.