자료형(Data Type)

kxsxh·2024년 1월 22일
2

JAVA

목록 보기
8/16

기본(primitive) 타입

  • 정수,실수,논리값을 저장할 수 타입이다
    자바에서 제공하는 기본 타입은 총 8개이다

정수를 저장할 수 있는 타입 : byte, char, short, int, long
소수점이 있는 실수를 저장할 수 있는 타입 : float, double
true와 false 같은 논리값을 저장할 수 있는 타입에는 boolean이 있다


정수형(byte, short, int, long, char)

int (정수형의 기본타입)

그러므로 정수형의 값이 -2,147,483,648 ~ 2,147,483,647 범위를 벗어난 것이라면 반드시 숫자뒤에 소문자 l 또는 대문자 L 을 붙여야 한다.

 byte (1byte == 8bit)  : -2^7  ~ 2^7-1  ==> -128 ~ 127 
 short(2byte == 16bit) : -2^15 ~ 2^15-1 ==> -32,768 ~ 32,767
 char(2byte == 16bit)
 int  (4byte == 32bit) : -2^31 ~ 2^31-1 ==> -2,147,483,648 ~ 2,147,483,647  
 long (8byte == 64bit) : -2^63 ~ 2^63-1 ==> -9,223,372,036,854,775,808 ~  9,223,372,036,854,775,807
 * 메모리 사용 크기 정도는 알고 있는 것이 좋다

char 타입은 음수 값을 가질 수 없으며, 나머지 정수 타입이 저장할 수 있는 값의 범위는 -2^n-1 ~ (2^n-1-1)이다
여기서 n은 메모리 bit수이다


리터럴 : 소스코드에서 프로그래머에 의해 직접 입력된 값


  • 컴파일러는 정수 리터럴을 int 타입으로 간주한다. 그래서 정수 리터럴이 int 타입의 허용범위를 초과할 경우, long 타입임을 컴파일러에게 알려줘야한다
    -> 방법 ) 정수 리터럴 뒤에 소문자 l나 대문자 L을 붙이면 된다 소문자 l은 숫자 1과 비슷해 혼동하기 쉬우므로 대문자 L을 사용한다

*long 타입 변수에 정수 리터럴을 저장할 때 반드시 L을 안붙여도 된다
정수 리터럴이 int 타입의 허용범위 이내라면 L을 붙이지 않아도 된다

long balance = 300000000000; -> 컴파일 에러
long balance = 300000000000L;

  • 정수형인 데이터타입(byte, short, int, long)은
    자동적으로 0으로 초기화가 되고
  • 실수형인 데이터타입(float, double)은 자동적으로 0.0 으로 초기화가 된다
  • 문자형인 데이터타입(char)는 자동적으로 ' '으로 초기화가 되고,
  • String을 포함한 클래스 타입은 자동적으로 null로 초기화가 된다

실수형(float, double)

float(4byte) : 단정밀도 소수점이하 7자리까지 표현됨. 135.3246235

double(8byte) : 배정밀도 소수점이하 15~16자리까지 표현됨. 135.3246234502345642

-- 자바에서 실수형의 기본타입double 이다.
그러므로 실수값을 float 형태로 나타내기 위해서는 실수뒤에 반드시 소문자 f 또는 대문자 F를 붙여야 한다.

문자형(char) : 자바는 유니코드 체계를 사용하므로
문자형 타입인 char 는 2byte 이며, 범위는 0 ~ 65535 이다. 그래서 char 타입에는 문자 1개 또는 숫자(0~65535)도 올 수 있다.


[⭐]
int(4byte) 아래의 크기인 byte(1byte), hort(2byte), char(2byte) 타입이 사칙연산(+ - * /)을 만나면 자동적으로 int 타입으로 자동 형변환이 발생된다

	'A' => 65     'a' => 97
    'B' => 66     'b' => 98
    'C' => 67     'c' => 99
    
    '대문자' + 32 => 소문자에 해당하는 숫자
    '소문자' - 32 => 대문자에 해당하는 숫자
    
    '0' => 48
    '1' => 49
    '2' => 50
    '9' => 57
    ' ' => 32
    

참조형 타입(Reference Type)

메모리상에 저장되어진 객체(인스턴스)의 메모리 주소를 참조하는 것이다.
예: Member mbr = new Member();
--> 참조형 타입(Reference Type)은 메모리상에 크기는 4byte 를 차지한다.

byte (1byte == 8bit)  : -2^7  ~ 2^7-1  ==> -128 ~ 127 
short(2byte == 16bit) : -2^15 ~ 2^15-1 ==> -32,768 ~ 32,767
int  (4byte == 32bit) : -2^31 ~ 2^31-1 ==> -2,147,483,648 ~ 2,147,483,647  
long (8byte == 64bit) : -2^63 ~ 2^63-1 ==> -9,223,372,036,854,775,808 ~  9,223,372,036,854,775,807 ```

char 타입

문자 리터럴: 하나의 문자를 작은따옴표(')로 감싼 것

  • 문자리터럴은 유니코드(Unicode)로 변환되어 저장함
  • 유니코드를 저장할 수 있도록 2byte크기인 char 타입을 제공함
  • 유니코드는 정수이므로 char도 정수타입에 속한다
    그래서 char 변수에 작은따옴표(')로 감싼 문자가 아니라 10진수 또는 16진수 형태로 유니코드를 저장할 수 있다
    문자 'A'는 10진수로 65이고, 16진수로 0x0041이므로 다음과 같이 char 변수에 직접 저장할 수 있다
char c = 65; 	//10진수
char c = 0x0041;	//16진수
  • 문자리터럴을 int 타입에 저장할 경우
    - 작은따옴표(')로 감싼 문자 리터럴을 유니코드로 변환되기 때문에 int 타입 변수에도 저장할 수 있다 char 타입 변수에 저장하면 자동으로 문자로 매핑되어 출력되지만, int 타입 변수에 저장하면 유니코드 자체가 출력된다
char var1 = 'A';
int var2 = 'A';
System.out.println(var1); //A를 출력
System.out.println(var2); // 65를 출력

UNICODE

String 타입

작은따옴표(,)로 감싼 문자는 char 타입 변수에 저장되어 유니코드로 저장되지만, 큰따옴표(")로 감싼 문자 또는 여러 개의 문자들은 유니코드로 변환되지 않는다

잘못된 코딩의 예

char var1 = "A";
char var2 = "홍길동";

문자열 : 큰따옴표(")로 감싼 문자들
*) 작은따옴표와 큰따옴표는 컴파일러가 문자 리터럴과 문자열 리터럴을 구별하는 기호로 사용한다
문자열을 변수에 저장하고 싶다면 string 타입을 사용해야함

올바른 코딩의 예

String var1 = "A";
String var2 = "홍길동";
  • String 타입은 기본타입이 아니다. String은 클래스타입이다

문자열 내부에 역슬래시()가 붙은 문자를 사용할 수 있는데 이것을 이스케이프 문자라고 한다
이것을 사용하면 문자열 내부에 특정 문자를 포함시킬 수 있다
출력을 제어할 수 있고 탭만큼 띄우거나(\t), 개행(한줄 내림,\n)을 지시할 수 있다


실수타입

소수점이 있는 실수 리터럴을 저장할 수 있는 타입에는 float, double이 있다

실수 리터럴은 기본적으로 double 타입으로 해석하기 때문에 double 타입 변수에 저장해야 한다
실수 리터럴을 float 타입 변수에 저장하면 컴파일 에러가 발생한다

float var = 3.14; <- 컴파일 에러
double var = 3.14;
double var = 314e-2;

실수 리터럴을 float 타입으로 저장하고 싶다면 리터럴 뒤에 소문자 f나 대문자 F를 붙여 컴파일러가 float 타입임을 알 수 있도록 해야함
float var = 3.14; <- 컴파일 에러
float var = 3.14f;
float var = 3E6F;

float 타입과 double 타입이 허용하는 소수점 이하 자리는 각각 7자리와 15자리이다.
double타입은 float 타입보다 2배 정도 정밀도가 높기 때문에 좀 더 정확한 데이터 저장이 가능하다


논리 타입

참과 거짓을 의미하는 논리 리터럴로 true와 false를 사용한다
논리 리터럴은 다음과 같이 1byte크기의 boolean 타입 변수에 저장할 수 있다

boolean stop = true;
boolean stop = false;

boolean 타입 변수는 주로 두 가지 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는데 사용한다

stop 변수가 true를 가지고 있기 때문에 if 블록이 실행되어 "중지합니다"가 출력된다
만약 stop 변수가 false를 가지고 있다면 else 블록이 실행되어 "시작합니다"를 출력한다


public class Sungjuk {
	String hakbun; //  null 학번로 초기화 됌,
	// 주의사항 ==> 모두 숫자로 입력한다고 해서 정수형 타입은 byte, short, int, long 을 사용하면 안되는 경우도 있다. 
    //            예를 들어, 학번에 091234 을 입력하는 경우 정수형 타입을 사용하면 맨 앞의 0 은 없어지고 91234 되어지므로
    //            비록 모두 숫자이지만 맨 앞에 0 이 들어올수 있는 경우라면 반드시 String 타입으로 해야 한다.
	String name; // null 학생명 
	byte kor; // 0 국어 (0 ~ 100) 숫자 (정수)
	byte eng; // 0 영어 (0 ~ 100) 숫자 (정수)
	byte math; // 0 수학 (0 ~ 100) 숫자 (정수)
	
	char  hakjum; // ' ' 학점 'A' 'B' 'C' 'D' 'E' 'F'

0개의 댓글