자바의 데이터 타입
데이터 타입에 대해서 알아보겠습니다.
데이터 타입이란?
--> 자료에 대한 형태를 지정하는 것입니다.
데이터 타입의 역할은?
--> 데이터가 가질 자료형을 지정하고 데이터가 가질 메모리 크기를 지정합니다.
데이터 타입의 종류에는
기본형 데이터 타입(primitive data type) 과 참조형 데이터 타입(reference data type) 이 있습니다.
먼저 기본형 데이터 타입 에 대해 알아보겠습니다.
기본 타입의 크기는 CPU나 운영체제에 따라 변하지 않는다는 특징을 가지고 있습니다.
참조형 데이터 타입 에는 String 클래스가 있는데
문자열은 기본타입이 아니고 String 클래스로 문자열을 표현할 수 있습니다.
String toolName = "JDK";
다음과 같이 선언할 수 있으며 문자열이 섞인 연산은 문자열을 연결합니다.
toolName + 1.8 -> "JDK1.8"
"(" + 3 + "," + 5 + ")" -> "(3,5)"
System.out.println(toolName + "이 출시됨"); -> "JDK1.8이 출시됨"
식별자(identifier)
변수, 상수, 메소드, 클래스 등에 붙이는 이름입니다.
식별자 작성 규칙은 다음과 같습니다.
1. 문자, 숫자, '_', '$'는 사용가능
2. 자바 언어의 키워드는 식별자로 사용 불가
3. 식별자의 첫 번째 문자로 숫자는 사용 불가
4. 길이 제한 없음
5. 대소문자 구별
6. 보통 변수와 메서드 이름은 소문자로 시작하고 클래스 이름은 대문자로 시작하는 관례
ex. 사용 가능한 예
int name;
char student_ID; // '_'사용가능
void $func(){} // '$'사용가능
class Monster3 {} // 숫자 사용 가능
int whatsyournamemynameiskitae; //길이 제한 없음
int barChart; int barchart; //대소문자 구분, barChart 와 barchart는 다름
int 가격; //한글 이름 사용 가능
ex. 잘못된 예
int 3Chapter; //식별자의 첫문자로 숫자 사용 불가
class if{} //자바의 예약어 if 사용불가
char false; //false 사용 불가
void null(){} //null 사용 불가
class %calc{} // '%'는 특수문자
변수
프로그램 실행 중에 값을 임시 저장하기 위한 공간을 변수라고 합니다.
변수값은 프로그램 수행 중 변경될 수 있습니다.
변수 선언
데이터 타입에서 정한 크기의 메모리를 할당합니다. 각 변수에는 해당 타입 값만 저장할 수 있고, 메서드 안에서는 어느 위치에나 변수를 선언할 수 있습니다. 보통은, 사용하기 직전에 변수 선언하는 것을 선호합니다.
int radius;
double weight = 75.56;
char c1, c2, c3 ='c'; // 이렇게 선언하면 c3 만 'c'로 선언됩니다.
//선언과 동시에 초기화
int a = 100;
//선언과 할당을 분리
int a;
a = 100;
//여러 개를 선언함과 동시에 초기화
int a = 100, b = 200;
//변수끼리의 할당
int a = 100;
int b;
b = a;
여기서 주의사항은 메서드 안에 변수를 선언했다면 해당 변수는 반드시 초기화 한 후에 사용해야합니다.
초기화가 되어 있지 않으면 컴파일 오류가 발생하게 됩니다.
리터럴(literal)
리터럴이란 프로그램에서 직접 표현한 값입니다. 정수, 실수, 문자, 논리, 문자열 리터럴 이 있습니다.
정수 리터럴
10진수, 8진수, 16진수, 2진수 리터럴이 있고
15 -> 10진수 리터럴 15
015 -> 0으로 시작하면 8진수, 십진수로 13
0x15 -> 0x로 시작하면 16진수, 십진수로 21
0b0101 -> 0b로 시작하면 2진수, 십진수로 5
int n = 15;
int m = 015;
int k = 0x15;
int b = ob0101;
위와 같이 사용할 수 있습니다. 정수 리터럴은 int형으로 컴파일하고 long 타입 리터럴은 숫자 뒤에 L 또는 l 을 붙여 표시합니다.
실수 리터럴
소수점 형태나 지수 형태로 표현한 실수입니다.
ex. 12. / 12.0 / .1234 / 0.1234 / 1234E-4
실수 타입 리터럴은 double 타입으로 컴파일 합니다.
double d = 0.1234;
double e = 1234E-4; //1234E-4 = 1234x10^-4 이므로 0.1234와 동일
숫자 뒤에 f 나 d을 명시적으로 붙이기도 합니다.
float f = 0.1234f;
double w = .1234D; //.1234와 .1234D는 동일
문자 리터럴
단일 인용부호 ' ' 로 문자를 표현합니다.
ex. 'a', 'W', '가', '*', '3', '7'
char a = 'W';
char b = '글';
특수 문자 리터럴은 백슬래시(\) 로 시작합니다.
논리 타입 리터럴
true 또는 false 만 사용가능합니다. c/c++와 달리 자바에서는 0과 1은 사용할 수 없습니다.
boolean 타입 변수에 치환하거나 조건문에 이용합니다.
boolean a = true;
boolean b = 10 > 0; //10>0이 참이므로 b 값은 true
boolean c = 1; //타입 불일치 오류
기본 타입 이외 리터럴
-null
레퍼런스에 대입하여 사용합니다.
int n = null; // 기본타입에는 사용 불가
String str = null;
-문자열 리터럴(스트링 리터럴)
이중 인용부호로 묶어서 표현합니다. 문자열 리터럴은 String 객체로 자동 처리됩니다.
String str = "Good";
상수
final 키워드를 사용하여 한번 할당하면 실행 중에 변경할 수 없는 값입니다.
보통 상수는 대문자로 선언하는 관례를 가집니다.
예시를 살펴보면 다음과 같습니다.
final int LENGTH = 20;
static final double PI = 3.141592; //static으로 선언하는 것이 바람직합니다.
열거체 타입
서로 관련있는 상수를 나열할 때 사용하는 타입입니다.
enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};
Weekday startDay = Weekday.MONDAY;
열거체를 사용하여 요일을 나타내고, 변수 startDay에 초기값으로 Weekday.MONDAY를 할당하는 코드입니다.
타입 변환
한 타입의 값을 다른 타입의 값으로 변환합니다.
자동 타입 변환(implicit conversion) 과 명시적 타입 변환(explicit conversion) 이 존재합니다.
주의할 점은 정수는 int, 실수는 double 이 기본타입이고 산술연산자의 결과는 기본 타입을 반환합니다.
먼저 자동 타입 변환(implicit conversion)에 대해 알아보겠습니다.
컴파일러에 의해 원래의 타입보다 큰 타입으로 자동 변환됩니다. 다음 예제와 같이 int 타입의 25가 long 타입으로 자동 변환됩니다.
실수 연산을 위해 10이 10.0 으로 자동변환되어 계산됩니다.
long m = 25;
double d = 3.14 * 10;
명시적 타입 변환(explicit conversion) 은 개발자의 의도적 타입 변환입니다. () 안에 개발자가 명시적으로 타입 변환을 지정합니다.
int n = 300;
byte b = (byte)n;
하지만, 명시적 타입변환에 의한 강제 변환은 값 손실의 우려가 있으니 주의해서 사용해야합니다.
다음 게시글에서는 자바의 기본 입출력에 대해 살펴보겠습니다.