[JAVA / 자바] 자바의 데이터 타입
변수 (Variable)
- 어떤 값을 저장하는 공간
- 사용할 변수 선언(변수에 저장할 값의 타입, 즉 데이터 타입을 함께 선언)
기본 타입(primitive type) : 키워드로 정의된 8개의 기본 데이터 타입
- 정의된 형태의 값을 변수에 저장하기 위한 데이터 타입(문자 데이터 저장 시 유니코드 값 사용)
- 데이터 타입을 사용하여 변수를 선언하면, 해당 타입에 따라 정해진 메모리 크기가 변수에 할당
구분 | 기본 타입 | 메모리 크기 (byte: 바이트) |
정수타입 | byte | 1 |
short | 2 | |
int | 4 | |
long | 8 | |
char | 2 | |
부동 소수점 타입 | float | 4 |
double | 8 | |
불리언 타입 | boolean | - |
참조 타입(reference type)
- 참조값(reference value)을 다루기 위한 데이터 타입 (참조값: 메모리 주소를 계산할 수 있는 값)
- 기본 타입을 제외한 나머지 타입 (배열, 클래스, 인터페이스, 열거 타입)
배열 타입(array type)
- 같은 데이터 타입의 변수들을 메모리에 연속으로 저장한 데이터들의 그룹
- 인덱스 (배열의 요소를 구별하기 위해 사용하는 번호로 0부터 시작한다.)
- 1차원 배열의 선언과 생성 및 사용
ex) 데이터 타입 배열 이름[]; OR 데이터 타입[] 배열 이름;
1. 데이터 타입: 배열을 구성하는 각 요소에 대한 공통된 데이터 타입
2. 배열 이름: 배열 변수의 이름으로 사용자가 정한 식별자
3. 대괄호: 보통의 변수가 아니라 배열 변수임을 나타내는 기호
- 데이터 타입에 따른 배열 선언 예
배열 선언 | char c[]; char[] c; |
int i[]; int[] i; |
long l[]; long[] l; |
의미 | char형 배열 요소들에 대한 배열 c 선언 | int형 배열 요소들에 대한 배열 i 선언 | long형 배열 요소들에 대한 배열 l 선언 |
- 배열 생성
☞ 기본 타입의 변수를 선언하면 그에 대한 메모리 공간이 자동으로 생성되지만, 참조 타입의 변수는 메모리 참조값을 저장할 수 있는 공간만 확보한다.
☞ new 연산자를 사용하여 데이터가 저장될 전체 메모리 생성 작업 필요
☞ 생성되는 메모리 크기 = 데이터 타입에 지정된 메모리 크기 X 배열 크기
ex) new 데이터 타입 [배열 크기];
1. new: 메모리 생성(할당) 연산자
2. 데이터 타입: 생성할 배열의 데이터 타입
3. 배열 크기: 생성할 배열의 내부 요소의 개수
- 배열 생성 예
배열 생성 | c = new char[10]; | i = new int[10]; | l = new long[10]; |
의미 | char형 배열 요소 10개에 대한 메모리가 생성된 배열 c | int형 배열 요소 10개에 대한 메모리가 생성된 배열 i | long형 배열 요소 10개에 대한 메모리가 생성된 배열 l |
배열 요소 | [0] ~ c[9] | [0] ~ i[9] | [0] ~ l[9] |
메모리 할당 크기 | 2byte X 10 = 20 byte | 4byte X 10 = 40byte | 8byte X 10 = 80 byte |
- 다차원 배열의 선언과 생성 및 사용
☞ 다차원 배열 = 1차원 배열의 집합
☞ 다차원 배열의 크기 = 배열크기1 X 배열 크기 2
☞ 다차원 배열의 선언과 생성 예
데이터 타입 배열 이름[][]; (OR 데이터 타입[][] 배열 이름;) = new 데이터 타입 [배열크기1][배열크기2];
ex) int array [][] = new int [2][3];
논리적 구조:
array[0][0] | array[0][1] | array[0][2] |
array[1][0] | array[1][1] | array[1][2] |
물리적 구조:
array[0][0] | array[0][1] | array[0][2] | array[1][0] | array[1][1] | array[1][2] |
클래스 타입(class type)
- 여러 타입의 변수와 메서드를 그룹으로 묶어서 새롭게 정의한 사용자 정의 데이터 타입
- 기본 타입의 메서드를 사용할 수 없으므로, 클래스 타입의 데이터를 연산할 수 있는 새로운 메서드 정의 필요
- 클래스 타입의 정의와 선언 및 생성(사용자 정의 데이터 타입이므로 먼저 사용할 클래스 타입에 대해 정의)
- 클래스 타입 변수의 선언과 생성 예
ex) PointXY point1 = new PointXY(10, 20);
인터페이스 타입(interface type)
- 여러 클래스 타입에서 공통으로 사용하는 상수와 메서드를 따로 분리하여 추상화시킨 타입
- 메서드 멤버 ☞ 상수만 사용하여 내용 없이 선언 = 추상 메소드
- 인터페이스 타입 정의 예
ex )
interface InterfaceName{
void methodName();
}
- 인터페이스 타입에 대한 구현 클래스 정의 예
interface Sound{
void speak();
}
// 구현 클래스 1
class Dog implements Sound{
int num;
Dog(int num){
this.num = num;
}
public void speak(){
for(int i=0; i<this.num; i++){
System.out.println("bark");
}
}
}
// 구현 클래스 2
class Cat implements Sound{
int num;
Cat(int num){
this.num = num;
}
public void speak(){
for(int i=0; i<this.num; i++){
System.out.println("meow");
}
}
}
- 인터페이스 타입 변수의 선언
☞ 인터페이스 타입의 이름을 사용하여 변수 선언
ex) Sound sound1;
- 인터페이스 타입 변수의 생성
☞ new 연산자와 인터페이스 타입을 구현한 클래스의 이름을 사용하여 변수 선언
ex) Sound sound1 = new Dog(1);
열거 타입(enum type)
- 표현할 데이터가 정해진 수의 값만 가지고 있는 경우
ex) 요일을 표현하는 값 = 일, 월, 화,..., 토 7개
- 열거 타입 정의
☞ 키워드 enum 뒤에 열거 타입 이름을 쓰고, 중괄호 사이에 선언할 상수를 콤마로 구분
ex)
enum Week{SUN, MON, TUE, WED, THU, FRI, SAT}
- 열거 타입 변수의 선언과 사용
ex)
Week myWeek = Week.WED;