자바에서는 Data Type(값의 타입)은 8가지이다. 이를 기본형이라고 하는데, 

1. 문자 - char

2. 숫자 

 2-1. 정수 - byte, short, int, long

 2-2. 실수 - float, double

3. 논리 - boolean

으로 구성된다.

 

변수(Variable)의 타입은 기본형과 참조형으로 나눌 수 있다.

1.기본형(Primitive type)

 위의 8가지와 동일하고, 실제 값을 저장한다.

2. 참조형(Reference type)

 기본형을 제외한 나머지(String, System 등)를 의미한다.

 메모리 주소를 저장한다. ( 4byte 또는 8byte )

 객체의 주소를 저장한다.

 

Theme. 기본형의 종류와 크기

1. 논리형

 boolean type으로 true와 false 중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용된다.

 

2. 문자형

 char type으로 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

 

3. 정수형

 byte, short, int, long type으로 정수 값을 저장하는 데 사용된다.

 

4. 실수

 float, double type으로 실수 값을 저장하는 데 사용된다.

 

기본형의 종류에 따른 크기를 나타낸 표는 다음과 같다.

종류 / 크기(byte) 1 2 4 8
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

Theme. 기본형의 표현 범위

1. byte

byte b;

1byte = 8bit이고, 1bit는 2진수의 한자리를 의미한다(0 or 1이 존재하는 자리)

1bit당 0 or 1의 2개의 값을 표현할 수 있으므로 n비트로 표현할 수 있는 값의 개수는 2^n개이다.

n비트로 표현할 수 있는 부호없는 정수(양수)의 범위: 0 ~ 2^n - 1 (0을 포함해야 해서 2^n에서 1을 빼줌)

따라서 , 8비트로 표현할 수 있는 부호 없는 정수(양수)의 범위는 0 ~ 255이다.

n비트로 표현할 수 있는 부호있는 정수의 범위: -2^(n-1) ~ 2^(n-2) - 1

따라서, 8비트로 표현할 수 있는 부호 없는 정수의 범위는 -128 ~ 127이다.

 

byte type의 변수에 값이 저장되는 방식은 아래 그림과 같다.

먼저, 전체 8bit 중 왼쪽의 1bit는 값의 부호를 나타내는 데 사용하는데, 이 비트를 .부호 비트(Sign bit)라고 한다.

부호비트의 값이 0이면 양수이고, 1이면 음수이다.

7bit는 128개의 값을 표현할 수 있으므로 양수 128개(0 ~ 127), 음수 128개(-128 ~ -1) 총 256개의 수를 나타낼 수 있다.

 

2. short

 short는 크기가 2byte이므로 총 16bit이다.

위와 같은 방법으로 계산해보면,

2^15 = 32768이므로 -32768 ~ 32767의 수를 표현할 수 있다.

 

3. char

 char는 크기가 2byte이므로 총 16bit이다. 

4. int

 int는 크기가 4byte이므로 총 32bit이다.

5. float, double

E38 = 10^38을 의미.

이때, float와 int는 동일한 4byte의 크기를 가지는데, float의 저장 가능한 값의 범위가 훨씬 큰 이유는 무엇일까?

그 이유는 값의 저장 방식에 있다.

S는 부호, E는 지수, M은 가수를 의미하는데, 3.4E38에서 3.4가 가수이고, 38이 지수에 해당한다. 따라서 int보다 더 큰 범위를 가지게 되는 것이다.

위 표에서 "정밀도"란 값과의 오차없이 표현할 수 있는 자릿수를 의미한다.

float의 경우 10진수로 7자리까지는 오차없이 표현할 수 있고, double의 경우 15자리까지는 오차없이 표현할 수 있다.

'Java > 자바의 정석 정리' 카테고리의 다른 글

문자와 문자열  (0) 2023.01.16
변수, 상수, 리터럴  (2) 2023.01.04
변수(variable)  (0) 2023.01.03

char ch = 'A'; // 문자

char ch = 'AB'; // 에러 발생

String s = "ABC"; // 문자열

 

String은 자료형이 아니라 클래스이다. 따라서, 원칙적으로는 new 연산자를 사용하여

String str = new String("AB"); 라고 작성해야하지만,  문자열은 워낙 자주 사용하다 보니 자바에서

String str = "AB"; 라고 작성할 수 있도록 허용되었다.

 

String s1 = "AB"에서

참조변수 s1에는 문자열 "AB"의 주소가 저장된다.

 

그런데, 어떤 것들을 "문자열"이라고 할까? 아래를 살펴보자.

 

String s= "ABC"; // 연속된 여러문자

String s = "A"; // 하나의 문자.

String s = ""; // 빈 문자열  

 

모두 문자열에 해당된다.(주의! char ch = '';와 같이 작은 따옴표로는 표현할 수 없다.)

 

String s = "A" + "B"; // 문자열을 이어붙인다. 따라서, 변수 s에 "AB"가 저된다.

이때, 숫자와 문자열의 결합을 살펴보면,

""(String) + 7(int) -> "" + "7" -> "7" // 숫자와 문자열의 결합시 숫자가 문자열로 변환된다.

 

숫자뿐만 아니라, 문자열과 어떤 type을 결합하면 그 type은 문자열이 되고, 결합 결과도 문자열이다.

(문자열 + 어떤 타입 = 문자열)

 

문자열의 결합시 순서가 존재한다. 즉, 왼쪽에서 오른쪽방향으로 결합이 되는 것.

1. "" + 7 + 7 -> "7" + 7 -> "7" + "7" -> "77"

2. 7 + 7 + "" -> 14+ "" -> "14" + "" -> "14"

 

 

 

 

 

'Java > 자바의 정석 정리' 카테고리의 다른 글

Data Type(값의 타입)  (0) 2023.01.17
변수, 상수, 리터럴  (2) 2023.01.04
변수(variable)  (0) 2023.01.03

Theme. 변수, 상수, 리터럴의 구분

변수(variable): 하나의 값을 저장하기 위한 공간

상수(constant): 한 번만 값을 저장할 수 있는 변수

리터럴(literal): 그 자체로 값을 의미하는 것

일반적으로 우리가 아는 상수가 자바에서는 리터럴을 의미하는데, 보다 확실한 구분을 위해 아래 예를 살펴보자.

색을 달리하여 구분해보자면, 변수 / 상수 / 리터럴 

 

int score = 100;

     score = 200;

final int MAX = 100;  //final을 붙여서 상수임을 나타냄

             MAX = 200; // 에러 발생

char ch = 'A';

String str = "abc";

 

Theme. 리터럴의 접두사와 접미사

종류 리터럴 접미사
논리형 false, true 없음
정수형 123, 0b0101, 077, 0xFF, 100L L(long을 의미)
실수형 3.14, 3.0e8, 1.4f, 0x1.0p-1 f(float), d(double, 생략가능)
문자형 작은 따옴표 안, 'A', '1', '\n' 없음
문자열 큰 따옴표 안 "ABC", "123", "A" 없음

추가적인 설명을 하자면, 

변수에 값을 저장하기 위해서 변수의 타입과 리터럴의 타입을 일치시켜야 하고,

 

byte b = 127;

byte b = 128; //에러

왜냐하면, byte는 -127 ~ 128의 리터럴만 변수에 저장할 수 있다.

 

0b0101에서 앞의 "0b"는 2진 접두사로 이진수를 나타낼 때 사용한다.

같은 논의로

0100에서 맨앞 '0'은 8진수를,

0x100에서 앞의 "0x"는 16진수를 나타낼 때 사용한다.

 

long l = 10_000_000_000L; // 100억은 long 타입의 리터럴로 반드시 뒤에 L을 붙여줘야 한다.

int는 20억까지 가능하므로 int l = 10_000_000_000은 불가능하다.

float f = 3.14f; // f 생략 불가능

double d = 3.14d; // d 생략 가능

즉, 리터럴이 실수형인데 f가 안붙으면 double로 간주하게 된다.

아래 리터럴들의 타입에 대해 알아보자

10. - > 10.0

.10 - > 0.10

둘다 double

10f - > 10.0f로 float

1e3 - > e는 10^n을 의미하고, 즉 1 * 10^3이므로 1000.0을 의미(double타입)

 

Theme. 변수와 리터럴의 타입 불일치

변수는 그릇, 리터럴은 물건처럼 생각해보자

 

1. 범위가 "변수  >  리터럴"인 경우, 가능!

int i = 'A'; // 변수(int) > 리터럴(char), ASCII 코드와 관련있는데, A의 ASCII 코드 값은 65다.

long l = 123; // 변수(long) > 리터럴(int)

double d = 3.14f; // 변수(double) 리터럴(float)

 

2. 범위가 "변수  <  리터럴"인 경우, 에러 발생

int i = 30_0000_0000; // int의 범위 (-20억 ~ 20억) 벗어남

long l = 3.14f; // long이 8byte이고, float가 4byte이지만, 실수형이 정수형보다 저장범위가 커서 에러 발생

float f = 3.14; // 3.14는 double이므로 float < double이어서 에러 발생

'Java > 자바의 정석 정리' 카테고리의 다른 글

Data Type(값의 타입)  (0) 2023.01.17
문자와 문자열  (0) 2023.01.16
변수(variable)  (0) 2023.01.03

Theme. 변수란?

하나의 값을 저장할 수 있는 메모리 공간(메모리 공간은 RAM을 의미한다)

 

전체 메모리 공간을 1byte 단위로 나누고, 각각의 저장공간에 0,1,2,3,4.. 처럼 연속된 번호를 붙여준다. 이를 메모리 주소라고 한다.

원래는 메모리에 값을 저장할 때 메모리 주소를 이용해야 하지만, 메모리 주소가 복잡하여 사람이 이용하기 불편하다.

따라서, 특정 메모리 영역에 이름을 붙이고 주소 대신에 이름을 통해 메모리에 값을 저장하고, 읽을 수 있게 하는 것이 변수다.

변수는 하나의 값만 저장할 수 있기 때문에 변수에 새로운 값을 저장하면 기존의 값은 지워지고 새로 저장한 값만 남게 된다.

 

Theme. 변수의 선언

메모리에 값을 저장하려면 먼저 변수를 선언해야 한다.

즉, 값(data)를 저장할 공간을 마련하기 위해 변수를 선언하는 것이다.

변수를 선언하는 방법: 변수타입 변수이름;

예) int age; // 정수(int)타입의 변수 age를 선언

그 결과 아래와 같은 age라는 이름의 저장공간이 생기게 된다.

 

Theme. 변수에 값 저장하기

1. 변수에 값 저장하기

int age; //정수(int)타입의 변수 age를 선언

age = 25; //변수 age에 25를 저장

혹은 int age = 25;

이때, '='는 등호가 아니라 '=' 오른쪽 값을 왼쪽 변수에 대입하는 대입연산자이다.

2. 변수의 초기화

변수에 처음으로 값을 저장하는 것을 말한다.

int x = 0; // 변수 x를 선언 후, 0으로 초기화

int y = 5; // 변수 y를 선언 후, 0으로 초기화

혹은 int x = 0, y = 0;

변수의 종류로 클래스 변수, 인스턴스 변수, 지역변수가 있는데, 

클래스변수, 인스턴스 변수는 자동으로 초기화되지만, 지역변수는 그렇지 않으므로

지역 변수는 읽기 전에 반드시 초기화를 해줘야 한다.

 

Theme. 변수의 타입

변수의 타입은 저장할 값의 타입에 의해 결정된다.

저장할 값의 타입과 알치하는 타입으로 변수를 선언해야 한다.

char ch = '가';

double pi = 3.14;

 

데이터의 기본형(기본 타입)

값을 크게 문자, 숫자, 논리형(true/false)으로 나누었을 때, 

문자 - char

숫자 - 정수( byte, short, int, long), 실수(float, double)

논리 - boolean

변수를 선언할 때 이중 적합한 타입을 선택하여 선언한다.

 

 

 

 

'Java > 자바의 정석 정리' 카테고리의 다른 글

Data Type(값의 타입)  (0) 2023.01.17
문자와 문자열  (0) 2023.01.16
변수, 상수, 리터럴  (2) 2023.01.04

+ Recent posts