자바의 자료형에는 기본 자료형과 참조 자료형이 있다.
기본 자료형은 정수형,문자형 등이 있다. (2-1부터 2-4까지의 문서를 참고)
https://digiconfactory.tistory.com/23
그 다음이 참조 자료형인데 클래스가 참조 자료형이다. 대표적인 참조 자료형은 문자열을 표현하는 String 클래스이다. JDK(Java Development Kit)를 설치했을 때 설치된다.
String 객체는 생성자에 기본 자료형 char 배열을 매개변수로 생성된다.
String str = "abc";
이 문장은 아래와 같은 의미다.
char data[] = {'a', 'b', 'c'};
String str = new String(data);
출처: Java Oracle Documentation
https://docs.oracle.com/javase/8/docs/api/java/lang/String.html
String 의 경우 기본 자료형 처럼 new 키워드를 쓰지않고 바로 쓰고 있다. 그러나 컴파일러는 String에 값을 할당할 때 자동으로 생성자를 만든다.
이번 예제에 사용할 객체는 농구선수이다.
class BasketballPlayer {
String name;
int age;
double height;
double weight;
}
이름과 나이 신장과 체중까지 만들었다. String 은 JDK가 제공하는 참조 자료형이라는 것을 기억하자.
여기에 이 선수의 경력정보를 멤버 변수로 추가해보자.
class BasketballPlayer {
String name;
int age;
double height;
double weight;
int totalPoint;
int totalAssist;
int totalRebound;
}
이 선수의 기록을 몇개만 추가했는데도 벌써부터 멤버 변수가 늘어나고 있다. 계속 늘릴 수도 있겠지만 경력정보도 객체로 볼수 있으니까 클래스로 분리할 수 있지 않을까?
그래서 경력정보 클래스를 하나 더 만들어서 BasketballPlayer에서 참조 변수로 넣는다.
class BasketballPlayer {
String name;
int age;
double height;
double weight;
Record totalRecord;
}
class Record{
int totalPoint;
int totalAssist;
int totalRebound;
}
분리시키니까 좀더 이해하기 편하다. 총 점수와 도움 리바운드, 블록, 필드골 성공률 출전시간 등 모든 기록을 넣어도 통일성이 있을 것이다.
<예제>
농구선수 르브론 제임스를 인스턴스로 생성시켰다. 그의 생애 총 득점은 34,087 점으로 어림잡아 34000을 넣어줬다. 한가지 주의할 점은 참조형 변수가 클래스의 멤버변수일때 생성자나 다른 곳에서 new 키워드로 참조형 변수를 생성해줘야 사용할 수 있다.
BasketballPlayer new 키워드로 생성시켰다고 해도 아직 Record 클래스는 메모리상에 없다.
여기서
this.totalRecord = new Record( );
p1.totalRecord = new Record( );
가 된다.
클래스 안에 기본 자료형 뿐 아니라 참조 자료형 (클래스)을 선언해서 사용할 수 있다. 물론 JDK 의 수많은 클래스들도 참조 자료형이므로 사용가능하다. 그렇게 하면 이미 기능들이 갖춰진 클래스 들을 조합하여 나만의 클래스를 만들 수 있을 것이다.