-
자바 자료형과 리터럴컴퓨터/Java 2019. 8. 23. 09:40
* Variable : named locations in memory.
( Declaring a variable requires that we specify the type and name!
ex. int age;
age = 85(assigning)
* 변수란
-
데이터(자료)를 임시로 담을 수 있는 상자(메모리 공간)
-
변수를 사용하는 이유 : 재활용하기 위해서
-
자료형 : 데이터의 형태
-
int i(선언부) = 10(초기화)
-
선언 : 메모리에 특정한 공간을 만들어 놓는다.
-
= : 대입연산자, 할당 연산자
-
int : 4byte 공간 차지(32bit) - 32개 공간에 정보가 담긴다
공간이 32개이므로 표현할 수 있는 숫자는 (2^32승)개
-
한 번 선언한 후 변수는 변경이 가능하다.
- variable starts with a valid letter, or a $, or a _.
* Static Typing: Java programs will not compile if a variable is assigned a value of an incorrect type.
Static typing helps because bugs are caught during programming rather than during execution of the code.
The program will not compile if the declared type of the variable does not match the type of the assigned value.
When bugs are not caught at compilation, they interrupt execution of the code by causing runtime errors.
* 기본자료형과 객체자료형
[기본자료형] .. no built-in behavior
Primitive datatypes are types of data built-in to the Java system.
기본자료형 : 데이터가 변수에 직접 저장
ex) 정수형 : byte(8bit 할당 받아, -127~+127, 256, 더 크면 overflow 발생), char(2byte, A,B,,,단일 문자 하나 -> ascii code라는 숫자로 변환한다.), short(2byte), int(4 byte, 실생활에 필요한 숫자는 32bit로 거의 해결된다.), long(8byte, 64bit)
char : It must be surrounded by single quotes, '.
ex. char grade = 'A'
* int : -2,147,483,648 ~ 2,147,483,647, inclusive
int : 4byte 공간 차지(32bit) - 32개 공간에 정보가 담긴다
공간이 32개이므로 표현할 수 있는 숫자는 (2^32승)개
그러나 양수와 음수를 표현하기 위해 맨 앞 칸은 부호를 식별하는 칸이 된다. 0일 때는 양수, 1일 때는 음수다
사용할 수 있는 칸이 한 칸 줄었기 때문에 양, 음수 각각 (2^31)개 숫자를 표현할 수 있다.
양수 영역에서 0을 표현하기 때문에 양수 영역은 (2^31)-1개 숫자를 표현할 수 있다.
음수 표기가 상식과 맞지 않다.
자바 integer에서 -1은 32개의 칸이 모두 1이다.
음수는 -1에서 -(2^31)까지 표현할 수 있는데 제일 큰 -1이 될수록 큰 값을 가진다.
음수에서 나머지 31개칸을 0으로 표현하면 표현할 수 있는 가장 작은 수, -(2^31)이 된다.
실수형 : float(4byte), double(8 byte)
double : includes decimal point, the number larger than the int type can hold.
1.797,693,134,862,315,7 E+308
논리형 : boolean(1byte)
boolean : a type that references one of two values: true or false;
[객체자료형]
: 객체 메모리 주소가 변수에 저장
-
변수는 객체의 메모리 주소를 담고 있다. 객체를 가리키고 있다.
-
메모리 주소는 16진수로 되어 있고 항상 4byte다.
-
C계열에서는 포인터, Java에서는 레퍼런스라고 한다.
- 원래 객체 생성은 String str = new String()과 같이 new 라는 연산자를 써준다
- 그러나 string은 많이 쓰이기 때문에 new 연산자 없이 바로 값을 대입해줄 수 있다.
문자열 : String(대문자로 시작한다) - 객체자료형
store multiple characters using double quotes.
ex. String s = "Hello Java World"
ex. String str = "ABC" : 다른 곳에 string을 만들어놓고 str이라는 변수를 따로 만들어 string의 주소를 갖도록 한다.
String이 같은지 검사하기 위해서 .equals()를 쓴다.
* Integer.valueOf(number literal)
Integer a = 128;
Integer b = 128;
a == b는 false다
number literal을 컴파일하고 Integer 클래스를 할당할 때,
Integer b = Integer.valueOf(127) //valueOf is implemented such that certain numbers are 'pooled', // and it returns the same instance for values smaller than 128 public static Integer valueOf(int i){ if (i>=-128 && i <= IntegerCache.high) return IntegerCache.cache[i+128]; else return new Integer(i); }
* 형변환 가능
[자동적 형 변환]
- 작은 공간의 메모리에서 큰 공간의 메모리로 이동
ex. byte by = 10;
int in = by
[명시적 형 변환]
- 큰 공간의 메모리에서 작은 공간의 메모리로 이동
ex. int iVar = 123456;
byte bVar = (byte)iVar; // byte로 형 변환을 명시적으로 해주어야 한다.
이 때 명시적 형 변환은 데이터가 누실될 수 있다. bVar = 64가 된다.
따라서 처음부터 int, double 같은 큰 데이터 타입으로 선언한다.
- ArrayList
객체.add(추가할 요소) -> 목록 맨 뒤에 추가
객체.remove(제거할 요소의 인덱스) -> 제거
객체.indexOf(요소)
객체.size()
* 리터럴 vs 값
1) 리터럴 : 값을 프로그램 안에서 직접 지정한다, 값을 만드는 방법, 자바스크립트는 프로그래머가 제공한 리터럴 값을 받아 데이터를 만든다.
- 값 : 원시 값(primitive)과 객체(object)가 있다.
-
원시 타입은 immutble : 숫자, 문자열, 불리언, null, undefined, symbol이 있다.
-
자바스크립트는 숫자형 데이터 타입이 한 가지 밖에 없다.
-
숫자는 더블 형식으로 저장된다.
-
infinity, NaN : 숫자가 아니라 일종의 placeholder
-
불변성이란 변수의 값이 바뀔 수 없다는 것이 아니라 다른 것이라는 것
메모리 영역에서 변경이 불가능한 것. 직접 변경 불가
immutability(변경불가능성)는 객체가 생성된 이후 그 상태를 변경할 수 없는 디자인 패턴
함수형 프로그래밍의 핵심 원리
-
내장된 객체 타입 : Array, Date, RegExp, Map과 WeakMap, Set과 WeakSet
-
객체 타입은 원시값에 기능을 제공하는 역할
* 리터럴 vs 식별자(identifier)
-
room1="conference_room_a" : room1은 변수를 가리키는 식별자
-
"conference_room_a" 는 문자열 리터럴인 동시에 room1의 값
표현식(expression) vs 문(statement)
출처 : 처음 하시는 분들을 위한 자바 기초강의, https://eskeptor.tistory.com/32?category=928923
Codecademy
'컴퓨터 > Java' 카테고리의 다른 글
패키지와 static (0) 2019.09.03 생성자, 소멸자 (0) 2019.09.03 객체와 메모리 (0) 2019.09.02 클래스 01: 클래스, 클래스 객체 생성, constructor, instance fields, methods (0) 2019.09.02 [effective Java] 02. 객체 생성과 파괴 (0) 2019.09.02 -