반응형
basic > DataTypeApp.java
1. 자료형(DataType) 이란?
- 값이나 특정 대상을 표현하기 위한 키워드 또는 식별자
- 값이나 특정 대상을 저장하기 위한 변수 생성을 위해 사용
2. 자료형(DataType)의 종류
1) 원시형(PrimitiveType)
값을 표현하기 위한 자료형 - 키워드
- 숫자형(NumericType) : 산술 연산 가능
- 정수타입 (정수형리터럴, integerType)
- 문자타입 (문자리터럴, CharacterType)
- 실수타입 (실수형리터럴, doubleType)
- 논리형(논리타입, 논리형리터럴, booleanType) : 산술 연산 불가능
- 원시형으로 생성된 변수 (일반변수/기본변수) : 실제 값을 저장하기 위한 변수
int num = 10;
2) 참조형(ReferenceType)
특정 대상을 표현하기 위한 자료형 - 식별자 (class)
- String 클래스 : 문자열을 표현하기 위한 자료형(클래스)
- 이 외 매우 많음 ex) 자동차 : car클래스
- 배열( Array )
- 클래스( Class )
- 인터페이스( Interface )
- 열거형( Enum )
- 참조형으로 생성된 변수 (참조변수) : 특정 대상의 메모리 주소값(메모리번지, hash code)을 저장하기 위한 변수
- 메모리 : 값을 저장하기 위한 공간 , 메모리주소 : 값을 저장하기 위한 고유의 주소
String name = "홍길동";
//heap영역에 String객체가 만들어지고, "홍길동" String 저장
//name 참조변수를 통해 객체에 접근 가능
참조변수의 특징
- 힙 영역(Heap Area)에 생성된 배열 또는 객체의 메모리 주소를 저장함
- 메모리 주소로 배열 또는 객체에 접근함
- 비교연산자를 사용할 경우 메모리 주소 비교함
- 참조변수는 비교연산자를 권장하지 않음 ( == , !== )
- 참조변수에 배열 또는 객체를 저장하지 않을 경우 기본값으로 null을 저장할 수 있음
//null : 존재하지 않는 값을 표현하는 키워드 - nullPointException
int[] arr = null; //ok
💡 참조변수는 직접적인 접근이 아닌 메모리 번지를 참조하는것이다.
그렇다면 굳이 왜 참조하는 것일까?
그 이유는 참조변수가 생성되는 스택영역은 생각보다 메모리공간이 작아서 아주 많은 값을 저장할 수 없기 때문이다.
이에 반해 힙영역은 메모리공간이 커서 많은 값을 저장할 수 있다.
따라서 힙메모리를 이용하여 저장한다.
하지만 힙메모리는 스택영역과 스태틱영역에 비해 이름 설정이 불가능이다.
그래서 메모리 주소로 접근하여 힙에 참조변수가 가리키는 배열 및 객체를 저장한다.
3. 컴퓨터가 사용하는 데이타 단위
1) 컴퓨터에서 값을 표현하는 단위
- Bit (0 또는 1만 저장됨)
- 1Bit = 1Byte (8Bit) = Character(문자)(영문자)
2) 컴퓨터에서 값을 저장하는 단위
Byte (기본 단위)
- 1Byte = 영문자를 기준으로 원칙적으로 문자 한개를 저장하려고 만든 것!!
- 1024Byte = 1KByte
- 1024KByte = 1MByte
- 1024MByte = 1GByte
- 1024GByte = 1TByte
- ex. 32GByte = (32*1024*1024*1024)Byte
- ex. 1TByte = (1024*1024*1024*1024)Byte
단위 표현
- Bit > Byte (문자) > Word (문자열) > Field (열, Column) > Record (필드의 모임, = 행, Row) > Table (레코드의모임) > DB (테이블의모임)
- 워드 : 홍길동 , 서울시 , 강남구 , 역삼동 → 하나씩
- 필드 : 서울시 강남구 역삼동 → 열로 쌓기
- 실제적으로 원하는 값을 표현할 때는 필드를 사용
3) 프로그램이 처리가능한 데이타 단위의 범위
3-1) 프로그램 언어로 처리할 수 있는 범위
- Bit > Byte (문자) > Word (문자열) > Field (열, Column) > Record (필드의 모임, = 행, Row)
- 기본자료형이 처리할 수 있는 범위
- Bit > Byte (문자) > Word (문자열) > Field (열, Column)
- 참조자료형(클래스)이 처리할 수 있는 범위
- Bit > Byte (문자) > Word (문자열) > Field (열, Column) > Record (필드의 모임, = 행, Row)
- 기본자료형이 처리할 수 있는 범위
3-2) SQL이 처리할 수 있는 범위
- Word (문자열) > Field (열, Column) > Record (필드의 모임, = 행, Row) > Table (레코드의모임) > DB (테이블의모임)
3-3) 중복 범위
- Word (문자열) > Field (열, Column) > Record (필드의 모임, = 행, Row)
4) 프로그램이 데이타를 저장하는 법
- 물리적 저장 : Bit와 Byte 두개뿐
- 논리적 저장 : Word부터는 실제 논리적인 저장의 단위임 (값들을 표현할 수 있도록 만들어진 개념들)
5) 프로그램에서 데이타를 처리하는 법
- 프로그램은 데이타를 행단위로 처리함 → Record
- 행에 있는 열을 가져다가 사용함 → Field
6) 번외!! 인터넷의 속도
1Gbps bit Per Second
- 초당 전송되는 bit 수 , 1초당 1기가비트를 전송하는 것
1Gcps character Per Second
- 초당 전송되는 bite(=Character) 수
- 100Mbps - cheap
- 1Gbps - expensive (요즘 인터넷속도)
- 10Gbps - expensive
4. 자바에서 사용한 값(데이타)을 컴퓨터에 저장하는 법
- 1Byte = 8bit 을 이용해서 숫자를 컴퓨터에 저장하자!!!!
- 50 저장하기
- 컴퓨터가 1Byte로 이해하는 50이라는 숫자는??
- 1Byte = 8bit = 110010 (2진수) = 50 (10진수)
- 50 = 32 + 16 + 2
- 실질적으로는 앞에 양수라는 표현의 0 붙음 (signbit) 그래서~
- 00110010(2진수) = 50(10진수)
128 64 32 16 8 4 2 1 0 0 1 1 0 0 1 0 - 50 저장하기
- 50(10진수) = 110010(2진수) 아님
- 00110010 에서
- 11001101 로 변경 후
- +1 해주면?
- 11001110 (=> 보수처리하였다! 라고 표현)
- 50(10진수) = 11001110(2진수) 이게맞음
- 음수는 양수를 2의 보수화 처리해서 만드는 것
- 자바에서는??
- 4Byte 저장공간이기때문에 50저장할 때
- 자바에서 (50)을 표현하면 00000000 00000000 00000000 00110010
- 자바에서 (-50)을 표현하면 11111111 11111111 11111111 11001110
5. 자바의 자료형
1). 정수형 - byte, short, int, long
- 정수형(IntegerType) 리터럴 : 소숫점이 없는 숫자값
- Java의 정수형 리터럴은 기본적으로 4Byte(Interger)로 표현
- int : 2147483648(-약21억) ~ 2147483647(약21억)
- 자바에서는 범위를 벗어난 정수는 없음
- println() 메소드는 무조건 10진수의 정수값으로 변환하여 출력 처리
🍿진수로 표현하는 법
System.out.println("정수값(10진수 100) = "+100);//숫자값 >> 10진수 정수값을 표현한 리터럴
//정수값(10진수 100) = 100
System.out.println("정수값(8진수 100) = "+0100);//0숫자값 >> 8진수 정수값을 표현한 리터럴
//정수값(8진수 100) = 64
System.out.println("정수값(16진수 100) = "+0x100);//0x숫자값 >> 16진수 정수값을 표현한 리터럴
//정수값(16진수 100) = 256
System.out.println("정수값(10진수 100) = "+100L);//숫자값L >> 8Byte(Long)의 정수값을 표현한 리터럴
//정수값(10진수 100) = 100
🍿int(4Byte)로 표현 불가능한 정수는 L붙이고 long(8Byte)에 담기
System.out.println("정수값 = "+2147483647);
//4Byte로 표현 가능한 정수값 = -2147483648~2147483647
// => 4Byte로 표현 불가능한 정수값을 사용할 경우 에러 발생
//System.out.println("정수값 = "+2147483648); //error
//4Byte로 표현 불가능한 정수값은 정수값 뒤에 [L]를 붙여 8Byte 정수값으로 표현하여 사용
System.out.println("정수값 = "+2147483648L);
🍿정수값을 표현하기 위한 자료형 4가지
- byte(1Byte), short(2Byte), int(4Byte), long(8Byte) -> byte(1Byte)
- 가장 원시적인 데이터타입
- 하드웨어 제어할 때 이용
- 데이터 전달할 때는 1byte단위로 전달
- 실제 정수값을 저장할 때는 byte단위 사용하지 않음
byte a1=127;//1Byte : -128~127
short a2=32767;//2Byte : -32768~32767
int a3=2147483647;//4Byte : -2147483648~2147483647
long a4=2147483648L;//8Byte
🍿값손실 주의 : 큰 그릇에 작은 값 담기 가능 , 작은 그릇에 큰 값 담기 불가능
//int a5=100L; //error 값손실생김
long a6=100; //가능, but 비효율적
//변수에 저장하는 리터럴과 동일한 자료형으로 저장하는 것을 권장함
int a6=100; //효율적으로 저장하자
2) 실수형 - float, double
- 실수형(DoubleType) 리터럴 : 소숫점이 있는 숫자값
- Java의 실수형 리터럴은 기본적으로 8Byte(Double)로 표현
- 실수형 = 부호비트 + 가수부비트 + 기수부비트 로 구성
- 값을 표현하는 방법 : 부동소수점방법
- 정수형리터럴 방식과 다름 , 실수형은 표현의 범위과 매우 큼
🍿println() 메소드는 아주 작은 실수값 또는 아주 커다란 실수값을 지수형태로 변환하여 출력
System.out.println("실수값(4Byte) = "+12.3F); //실수값F >> 4Byte(Float)의 실수값을 표현한 리터럴
//실수값(4Byte) = 12.3
System.out.println("실수값(8Byte) = "+12.3); //실수값 >> 8Byte(Double)의 실수값을 표현한 리터럴
//실수값(8Byte) = 12.3
//println() 메소드는 아주 작은 실수값 또는 아주 커다란 실수값을 지수형태로 변환하여 출력
System.out.println("실수값(8Byte) = "+0.000000000123);
//실수값(8Byte) = 1.23E-10
🍿실수값을 지수형태로 표현하여 사용 가능
System.out.println("실수값(8Byte) = "+1.23E10);
//실수값(8Byte) = 1.23E10
System.out.println("실수값(8Byte) = "+12300000000.0);
//실수값(8Byte) = 1.23E10
🍿실수값을 표현하기 위한 자료형 2가지 : float(4Byte), double(8Byte)
float b1=1.23456789F; //정밀도 : 7자리
double b2=1.23456789123456789; //정밀도 : 15자리
System.out.println("b1 = "+b1);
//b1 = 1.2345679
//소수점 아래 7자리 밑에는 올림하여 출력
System.out.println("b2 = "+b2);
b2 = 1.234567891234568
//소수점 아래 15자리 밑에는 올림하여 출력
3) 문자형 - char
- 문자형(CharacterType) 리터럴 : ' ' 안에 하나의 문자로 표현
- Java의 문자형 리터럴은 기본적으로 2Byte(Character)로 표현
🍿문자의 종류 : 일반문자 & 회피문자
- 일반문자
- 회피문자(Escape Character) : 표현 불가능한 문자를 표현하기 위한 방법
- \ 기호
- \n : Enter
- \t : Tab
- \' : 문자'
- \" : 문자"
- \\ : 문자 \
- \0 : NULL 문자
🍿문자형 리터럴은 내부적으로 약속된 정수값(0~65535)으로 표현 : 유니코드(UniCode)
- ''으로 감싼 문자는 char타입 변수에 저장되어 유니코드로 저장되지만,
- ""로 감싼 문자는 유니코드로 반환되지 않음
- 유니코드(2Byte) : 아스키코드(1Byte)가 확장된 것 VS
- 아스키코드(1Byte) : 영문자만 있음 - c언어
- ex) 'A' : 65 , 'a' : 97 , '0' : 48
- ex) ' ' : 32 , '\n' : 13
- ex) '가' : 44032 - 완
System.out.println("문자형(2Byte) = "+ 'A'); //문자형(2Byte) = A
System.out.println("문자형(2Byte) = "+ '가'); //문자형(2Byte) = 가
System.out.println("문자형(2Byte) = "+ ' '); //문자형(2Byte) =
System.out.println("문자형(2Byte) = "+ ''); //error
System.out.println("문자형(2Byte) = "+ '\\0'); // 문자형(2Byte) =
System.out.println("문자형(2Byte) = "+ '\\''); // 문자형(2Byte) = '
System.out.println("문자형(2Byte) = "+ '\\\\'); //문자형(2Byte) = \\
🍿 문자값을 표현하기 위한 자료형 - char(2Byte)
- 문자형 변수에서는 문자값에 대한 약속된 정수값을 저장할 수 있음
- alt + 65 -> 이클립스 내 A 로 작성됨
char c1 = 'A'; //문자를 직접 저장
char c2 = 65; //문자를 10진수로 저장 (2Byte범위,양수값인 0~65535 내 들어옴)
char c3 = 'a' - 32; //문자값에 대한 연산 결과의 값을 저장함
System.out.println("c1 = "+c1); //c1 = A
System.out.println("c2 = "+c2); //c2 = A
System.out.println("c3 = "+c3); //c3 = A
char c4 = 45000;
char c5 = 45001;
System.out.println("c4 = "+c4); //c4 = 꿈
System.out.println("c5 = "+c5); //c5 = 꿉
char c6 = '\\u0041'; //16진수로 저장
//16진수 유니코드에 해당하는 문자 출력
System.out.println("c6 = "+c6); //c6 = A
4) 논리형 - boolean
- 논리형(BooleanType)리터럴 : false(거짓), true(참)
🍿Java의 논리형 리터럴은 기본적으로 1Byte(Boolean)로 표현
System.out.println("논리형(1Byte) = "+ false);
//논리형(1Byte) = false
System.out.println("논리형(1Byte) = "+ true);
//논리형(1Byte) = true
//관계연산자(비교연산자)를 이용한 연산식의 결과값으로 논리형 리터럴을 사용
System.out.println("논리형(1Byte) = "+ (20<10));
//논리형(1Byte) = false
System.out.println("논리형(1Byte) = "+ (20>10));
//논리형(1Byte) = true
🍿 논리값을 표현하기 위한 자료형 - boolean(1Byte)
boolean d1 = false;
boolean d2 = 20>10;
System.out.println("d1 = "+d1); //d1 = false
System.out.println("d2 = "+d2); //d2 = true
5) 참조형
- 문자열(StringType) 리터럴: " "안에 0개 이상의 문자들로 표현
🍿문자열은 원시형(기본형)이 아닌 참조형으로 String클래스로 표현
System.out.println("문자열 = " +"홍길동");
//문자열 = 홍길동
System.out.println("유관순 열사가 \\"대한 독립 만세\\"를 외쳤습니다.");
//유관순 열사가 "대한 독립 만세"를 외쳤습니다.
🍿 문자열을 표현하기 위한 자료형 - String 클래스
String name = "임꺽정";
System.out.println("이름 ="+ name); //이름 = 임꺽정
반응형
'java > java' 카테고리의 다른 글
[java] 6. 배열(Array) (0) | 2024.04.11 |
---|---|
[java] 5. 제어문 (선택문, 반복문, 기타제어문) (2) | 2024.04.11 |
[java] 4. 변수(Variable)와 연산자(Operator) (0) | 2024.04.11 |
[java] 2. JAVA 환경설정 (JDK11.0.16.1) (0) | 2024.04.10 |
[java] 1. JAVA의 개념 및 특징 (0) | 2024.04.10 |