JAVA

자바의 데이터 타입

정코딩딩 2023. 9. 29. 22:59

데이터 타입에 대해서 알아보겠습니다.

데이터 타입이란?

--> 자료에 대한 형태를 지정하는 것입니다.

 

데이터 타입의 역할은?

--> 데이터가 가질 자료형을 지정하고 데이터가 가질 메모리 크기를 지정합니다.

 

데이터 타입의 종류에는

기본형 데이터 타입(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;

 

하지만, 명시적 타입변환에 의한 강제 변환은 값 손실의 우려가 있으니 주의해서 사용해야합니다.

 

다음 게시글에서는 자바의 기본 입출력에 대해 살펴보겠습니다.