이 챕터에서는 몇가지 용어를 정리한다.
1. refrence type의 인터페이스 (interface)
- Annotation 이 포함됨
- Collection 내에 List 인터페이스가 존재. List 내부적으로는 array타입 사용
2. refrence type의 클래스 (class)
- 멤버로는 field, method, member class, member interface가 존재
- enum이 포함됨
- String class는 사실상 char array type에 메서드를 추가함
3. refrence type의 배열 (array)
4. 기본형 (primitive)
여기서 살짝 흠칫한 부분이, array가 타입이라는 점이었다.
사실 아무 생각 없이 Array를 선언하거나 List를 만드는 식으로 프로그래밍을 했었다.
(대부분 List를 선언하였었다.)
약간의 예시를 들어보자.
//배열을 선언하고 (참조변수를 위한 껍데기만 만들어짐)
int[] scores;
//참조 변수에 값을 저장하는 공간(껍데기속 속살)을 생성
scores = new int[4];
//배열을 선언하고, 배열을 생성 껍데기만들고 한꺼번에 속살까지 채움
int[] scores = new int[4];
연산자 new로 실제로 메모리의 빈 공간에 연속적인 주소로 (위의 예시에서는) 4개의 int가 들어가는 공간을 만든다. 또한 원소들의 값들을 지정해주지 않았으므로, default로 0이 들어갈 것이다. (만약 객체,즉 reference type이라면 null이겠죠?)
Array는 위의 예시처럼 고정적으로 원소의 개수를 지정해서 사용해야만 한다.
하지만 List는 인터페이스임을 확실히 구분해야 한다. 정확히 말하면 List는 Collection
이라는 상위 인터페이스를 상속한 것이다.
그리고 내부적으로는 array를 사용하고 있었다.
또한, String 클래스도 마찬가지로 char배열에 메서드를 추가한 것이기 때문에 결국 array로부터 출발한 형태이다.
정리하자면, String 클래스나, List라는 인터페이스 등등의 것들이 모두 array 자료형을 사용한다.
개인적으로 생각해 보았을 때, 결국 어떠한 데이터를 표기하기에는 array는 필수적이었다. 메모리에 연속적으로 데이터를 저장해준다는 점에서 큰 장점이 있기 때문이다.
그렇기에 자바의 타입을 위 네가지로 정리해 놓은 것이 아닌가 싶다.
1. 상속과 서브클래싱은 동의어(inheritance == subclassing)
2. 클래스가 인터페이스를 implement, & 인터페이스가 인터페이스를 extends
3. access level(private,public)에서 아무것도 명시하지 않은 경우 -> package-private으로 정함