자바는 정적타입의 언어다 보니 자료형의 사이즈가 정해져 있어야 되고 그렇기 때문에 프리미티브 타입 같은 경우 기본타입이기 때문에 사이즈가 다 정해져 있다.
그래서 이 부동소수점에 의해서 모든 숫자가 다 소수점 아래로 표현되지 않는 한계가 있다는 것을 알아둬야지 정말 소수점 계산이 중요한 프로그램을 짤 때 그 부분에서 오류가 생기지 않는다.
short s = 1;
System.out.println(a);
int a = 3; // 정수형 변수 선언
System.out.println(a);
long b = 1234567890L; // Long 정수형 변수 선언
System.out.println(b);
float c = 5.5F; // float 실수형 변수 선언
System.out.println(c);
double d = 9.12345678901231242141242141234567890d; // double 실수형 변수 선언
System.out.println(d);
자바에서 소수점을 표현할 때 부동소수점(Floating Point) 방식을 사용한다.
부동소수점이란 숫자의 크기에 따라 소수점의 위치가 변하는 방식이다.
double
타입은 8바이트(64비트)로 부동소수점을 저장한다. BigDecimal
클래스를 사용해야 한다.자바는 정적 타입(Static Typing) 언어이므로 자료형의 크기가 정해져 있어야 한다.
기본 타입(Primitive Type)은 각각 고정된 크기를 가지며, 저장 가능한 숫자의 범위가 결정된다.
타입 | 크기 | 최소값 (MIN_VALUE ) | 최대값 (MAX_VALUE ) |
---|---|---|---|
byte | 1바이트 | -128 | 127 |
short | 2바이트 | -32,768 | 32,767 |
int | 4바이트 | -2,147,483,648 | 2,147,483,647 |
long | 8바이트 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
float | 4바이트 | 1.4E-45 | 3.4E+38 |
double | 8바이트 | 4.9E-324 | 1.8E+308 |
모든 number type의 default value는 0(또는 0.0) 이다.
.MAX_VALUE
와 .MIN_VALUE
자바에서는 각 자료형의 최소값과 최대값을 미리 정의된 정적 변수(Static Variable)로 제공한다.
이를 활용하면 해당 자료형이 표현할 수 있는 숫자의 범위를 직접 확인할 수 있다.
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648
System.out.println(Double.MAX_VALUE); // 1.7976931348623157E308
System.out.println(Double.MIN_VALUE); // 4.9E-324
정리:
.MAX_VALUE
와 .MIN_VALUE
를 이용해 확인 가능문자 관련한 값을 변수로 선언할 수 있습니다.
char alphabet = 'A'; // 문자형 변수 선언
System. out.println(alphabet) ;
char defaultValue;
// 값을 할당하지 않고 선언만 하면, default 값은 '\u0000' (null character)이다.
System.out.println(defaultValue);
실행결과
박스 안에 빗금쳐진 문자가 있다. 이것은 널 캐릭터라고 하고 아무 의미 없는 캐릭터다.
그대로 복붙하면 빨간 null 박스가 생기고, 작은 따옴표 안에 붙여넣기 하면
유니코드 형식으로 '\u0000'
이렇게 들어간다.
참 거짓의 값을 변수로 선언할 수 있다.
boolean fact= true; // 논리형 변수는 true, false의 값을 가진다.
System. out.println (fact);
boolean defaultValue; // 값을 할당하지 않고 선언만 하면, default 값은 false 입니다.
System. out. println(defaultValue);
컴퓨터에서 표현되는 모든 데이터는 바이트(Byte)의 연속이다.
자바에서는 byte
타입을 사용하여 바이트 데이터를 다룰 수 있다.
byte data = 'd';
System.out.println(data); // 결과: 100
byte defaultValue; // 값을 할당하지 않으면 기본값은 0
System.out.println(defaultValue);
위 코드에서 'd'는 ASCII 코드에서 10진수 100에 해당하므로 data 변수에 100이 저장된다.
ASCII (American Standard Code for Information Interchange)
컴퓨터가 문자(A, B, C 등)를 숫자로 표현하는 방식이다.
예를 들어:
'A'
→ 2진법: 1000001, 10진법: 65
'd'
→ 2진법: 1100100, 10진법: 100
컴퓨터는 이진법(0과 1)으로 데이터를 저장하며, 우리가 문자를 볼 수 있는 것은 그래픽 시스템이 이를 화면에 출력해 주기 때문이다.
따라서 바이트 데이터를 숫자로 보게 되더라도 ASCII 코드 표를 참고하면 원래 문자가 무엇인지 알 수 있다
자바에서 참조 자료형은 기본 자료형이 아닌 모든 것을 참조 자료형이라고 한다.
더 정확히는 참조 자료형이란 자바의 인스턴스를 가리킬 수 있는 자료형이다.
프리미티브 타입은 변수로 선언하는데 가면 무조건, char는 몇 byte고, 논리자료형도 ?byte고, 그리고 byte 자료형도 byte고. 숫자는 변수 형태에 따라서 2byte, 4byte, 8byte 이렇게 크기가 정해져 있는 게 기본 자료형이다.
참조자료형은 객체 상태로 존재해서
객체 그 자체는 포인터(가리키는 것)다. 가리키는 곳에 어떤 데이터가 있을지는 그곳에 가 봐야 안다. 포인터에 가 봐야 아는 자료형을 참조 자료형이라고 보면 된다. 자바에서는 프리미티브 자료형을 제외한 모든 잘형은 참조자료형이다. 심지어 배열도 참조 자료형이다. (안에 있는 값 자체는 4byte, 4byte, 정해져 있는 것이지만 배열의 길이가 얼마가 될지는 배열의 길이마다 다르기 때문에. 그곳에 가 봐야 배열의 크기를 알 수 있개 때문에)
여기서 말하는 인스턴스는 (String은 예외이긴 한데) new라는 명령어로 생성될 수 있는 것들을 인스턴스라고 함.
String str = "helloworld !!";
System.out.println(str);
int(] intArray = new int[] (1,2,3,4,5: 7/ int 배열을 선언과 동시에 초기화
System.out.println(Arrays.toString(intArray));
동일한 자료형의 데이터를 연속된 공간에 저장하기 위한 자료구조다. 위의 예제에서는 정수형 변수를 저장 하기위한 배열을 선언한 것이다. 메모리 주소상에서 이어져 있다.
10명의 학생의 점수를 입력할 경우, 배열을 사용하지 않으면 변수 10개를 선언해야 하는데 무척 귀찮다. 또한 만약 10명이 아닌 100명, 1000명일 경우에는 코드가 길어진다. 이럴 때, 배열을 이용하면 짧고 간결하게 입력할 수 있다.
자료형 \[] 변수 =new 자료형 \[배열의크기]
의 형태로 선언0~ (배열의 크기 - 1)
의 범위를 가진다.int[] intEmptyArray = new int[5]; // int의 5자리 배열 선언
System.out.println(Arrays.toString(intEmptyArray)); // int의 default 값 0으로 채워짐
int[] intArray = new int[] {1,2,3,4,5}; // int 배열을 선언과 동시에 초기화
System.out.println(Arrays.toString(intArray));
String[] stringEmptyArray = new String[5]; // 참조자료형 String의 5자리 배열 선언
System.out.println(Arrays.toString(stringEmptyArray)); // 참조자료형은 값이 없을 경우 null(아무것도 없다) 이라는 표현으로 표시
String[] months = {"1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"};
System.out.println(Arrays.toString(months));
int[] scores = new int[4]; // 배열 선언
scores[0] = 5; //인덱스를 통해 배열에 값 입력
scores[1] = 10;
System.out.println(scores[1]); //인덱스를 통해 배열의 특정 값 출력
String[] months = {"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"};
// 이렇게 선언과 동시에 값을 입력할 수도 있다.
System.out.println(months[7]); //인덱스를 통해 배열에 접근하여 특정 값 출력
int[][] arr = new int[4][3]; //배열을 활용하여 2차원의 배열도 만들 수 있다
실제 프로그램이 돌아가면서 항상 고정된크기의 배열을 쓰기는 쉽지 않다. 그래서 실무에서는 대부 분 배보다는
ArrayList
라는Collection
을 쓴다.
Reference Type의 변수에는 초기화를 해주지 않으면, 기본으로 할당되는(default) 값이 없다.
null
이라는 것은"null"
이라는 문자를 가진다는 것이 아니라 참조할 값이 없다는 것을 나타내는 Java 언어의 표현