Java - Data Type

lacblueeun·2020년 12월 25일
0

Java

목록 보기
2/5
post-thumbnail

1. 기본타입 (Primitive types)

1-1 원시타입 종류와 값의 범위 그리고 기본 값

자바에서의 기본타입이란 실제값인 변수에 직접 값을 저장하고 스택영역에 저장된다.

논리 자료형 : 기본값은 false이다.
정수 자료형 : CPU는 int형 데이터의 크기만 연산 가능하다. byte/short는 데이터의 양이 중요시되는 상황에서 사용한다. (mp3, 동영상 등등)
문자 자료형 : 문자 하나를 2bye로 하는 유니코드 기반 표현 (유니코드는 전 세계의 문자를 표현 가능)
실수 자료형 : float는 소주점 이하 6자리, double는 15자리 정밀도를 갖는다. 일반적으로 double을 선호한다.

1-2 리터럴(Literal)

리터럴은 데이터 그 자체를 의미한다. 변수에 넣는 변하지 않는 데이터를 의미하는 것이다. 이와 달리 상수는 그 값을 바꿀 수 없는 변수이다.

정수 리터럴 : 기본적으로 int 타입이다. 0으로 시작하는 정수 리터럴은 8진수로 취급된다. 0x, 0X로 시작하는 정수 리터럴은 16진수로 취급된다.

소수 리터럴 : 기본적으로 double 타입이다. 대문자 L 또는 l 을 붙인 정수 리터럴은 long 타입으로 취급된다. 뒤에 f 또는 f 가 붙은 10진수는 소수점이 없어도 float이다.

문자 리터럴 : 작은 따옴표('')로 묶은 하나의 문자는 char타입이다.

문자열 리터럴 : 큰 따옴표("")로 묶은 하나의 문자는 String타입이다.

2. 참조타입(Reference type)

참조 타입이란 객체(object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다. 변수(스택)에 주소를 저장하지만, 실제로는 힙영역에 저장한다.

2-1 Reference type 와 Primitive type 차이점

기본 타입으로 선언된 변수는 실제 값을 변수 안에 저장하지만, 참조 타입인 배열, 열거, 클래스, 인터페이스를 이용해서 선언된 변수는 메모리의 번지를 값으로 갖는다.

3. 변수

변수는 데이터를 저장하는 메모리 영역을 의미한다. 변수는 수시로 값이 변경 될 수 있으며 하나의 값만 저장할 수 있다.

3-1 변수의 스코프와 라이프타임

지역변수 : 지역 변수는 함수(메서드) 내부에 선언하며 함수 밖에서는 사용할 수 없다. 함수를 호출하면 스택(stack) 메모리에 생성된다. 함수가 종료되면서 스택이 사라지면 그 안에 있던 변수들도 사라진다.

멤버변수 : 멤버변수는 new 키워드로 인스턴스를 생성해야 사용할 수 있다. 힙(Heap)메모리에 생성된다. 멤버변수는 해당 클래스의 메서드에서 사용이 가능하고, public이면 같은 패키지의 다른 클래스에서도 사용 가능하다.

정적변수(static) : static변수는 프로그램 실행시 클래스를 메모리에 로드 했을 때 부터 생성된다. 미리 생성되어 있기 때문에 속도가 빠르지만 프로그램이 종료될ㄷ 때까지 메모리에서 해제되지 않는다. static 변수를 많이 쓰면 시스템의 메모리가 그만큼 줄어들기 때문에 주의해야 한다.

4. 타입변환(Type conversion)

하나의 타입을 다른 타입으로 바꾸는 것이다.
자바에서는 boolean형을 제외한 나머지 기본 타입 간의 변환을 자유롭게 수행할 수 있다. 자바에서 다른 타입끼리의 연산은 우선 모두 같은 타입으로 만든 후에 수행된다.

묵시적 타입 변환 (implicit conversion) : 묵시적 타입 변환이란 대입 연산이나 산술 연산에서 컴파일러가 자동으로 수행해주는 것이다. 메모리에 할당받은 바이트의 크기가 상대적으로 작은 타입에서 큰 타입으로의 타입 변환은 생략할 수 있다. 하지만 데이터의 손실이 발생하는 대입 연산은 허용하지 않는다.

명시적 타입 변환 (explicit conversion) : 강제 타입 변환 이라고 하며, 타입 캐스트 연산자를 사용해서 강제적으로 수행하는 것이다. 자바에서는 산술 연산을 수행하고 얻는 결과값은 언제나 피연산자의 타입과 일치해야 한다.

int num1 = 1, int num2 = 2;
double result1 = num1 / num 2 // 0.0
double result2 = num1 / num 2 // 0.25

5. 배열

동일한 자료형의 데이터를 연속된 공간에 저장하기 위한 자료구조이다.
연관된 데이터를 저장하기 위한 변수의 선언을 줄여주고, 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리가능하다.

5-1 1차 및 2차 배열 선언하기

int[] arr;
int arr[]

int[] arr = new int[5];
String[] arr = new String[5];

int[] arr = new int[]{1,2,3,4,5};
int[] arr = {1, 2, 3, 4, 5};

int[][] arr = new int[4][3];
int[][] arr = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}}

6. 타입 추론(Type Inference) var

java10 에서 var라는 Local Variable Type-Inference가 추가되었다. 타입추론이란 정적 타이핑을 지원하는 언어에서 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 기능이다.
타입 추론이 가능하다는 얘기는 타입을 명시하지 않아도 된다는 것이다.

-java9
String user = "jaeeunlim";

-java10
var user = "jaeeunlim";

6-1 var 특징

  1. var는 초기화 값이 있는 지역변수에서만 사용할 수 있고, <> 다이아몬드 연산자에서도 사용할 수 없다.

  2. var는 다른 타입을 알아내기 위한 연산을 하지않기 때문에 중간에 다른값으로 변경할 수 없다.

  3. var타입 변수에는 null값이 들어갈 수 없다. 또한 초기화 없이 사용할 수 없다.


참조

https://dreamhnt.github.io/blog/java-fundamental
https://medium.com/@clgh0331/java-%EC%B0%B8%EC%A1%B0-%ED%83%80%EC%9E%85-b1a8a671f102
https://digiconfactory.tistory.com/50
http://www.tcpschool.com/java/java_datatype_typeConversion
https://catch-me-java.tistory.com/19

profile
Go for Frontend Developer 🧪

0개의 댓글