# 학습해야 하는 목록 

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var

1. 프리미티브 타입 종류와 값의 범위 그리고 기본 값 

프리미티브 타입은 값을 지니고 있으며, 범위와 기본값은 아래와 같다. 

종류 예약어 메모리 크기 기본값 범위 
논리형 boolean 1 byte  false true, false
정수형 byte 1 byte 0 -128 ~ 127
short 2 byte 0 -32768 ~ 32767
int 4 byte 0 -2147483648 ~ 2147483647
long 8 byte 0L -9223372036854775808 ~ 9223372036854775807
실수형 double 4 byte 0.0f 1.4E-45 ~ 3.4028235E38
float 8 byte 0.0d 4.9E-324~1.7976931348623157E308
문자형 char 2 byte \u0000 0 ~ 65535

 

항상 이런 내용은 기억이 잘 안나는데, 왜 항상 이런 내용을 스터디 하는지는 늘 궁금한 부분이다.

short 까지 범위는 어떻게 기억이 나지만 그 이상은 사실 늘 찾아본다. -_-;;

 

2. 프리미티브 타입과 레퍼런스 타입 

이렇게 위에서 정의된 프리미티브 타입을 제외한 타입을 모두 레퍼런스 타입이며, 이는 주소값을 지니고 있다.

 

3. 리터럴 

찾아보니 리터럴과 상수를 많이 비교들을 하는데 사실 이것들이 왜 비교가되고 있는지 모르겠다. 상수는 항상 같은 값을 뜻하는 것일테고, 리터럴은 그냥 단지 어느 특정한 값을 의미한다. 상수는 이미 어떤 값에 이름이 부여된 상태가 변하지 않는 것일테고 리터럴은 그냥 값이라고 생각된다. 

 

4. 변수 선언 및 초기화하는 방법 

아래의 예시 외에 더 좋은 표현이 있을까? 

int year;    // 변수 선언
year = 2020; // 변수 초기화 

int month = 11; // 변수의 선언 및 초기화

 

5. 변수의 스코프와 라이프타임 

스코프는 범위를 뜻한다. 라이프타임과 결합되어 결국 변수의 생명주기(?)를 뜻한다 

블록("{~}")범위인지, 전역 범위인지에 따라 접근에 대해 다르다. 

가령 블록 범위 내의 변수는 블록 밖에서는 접근이 안될 것이다. 이게 다른 언어에서는 클로저라든지 연관되어 헷갈리는데 무튼 나도 아직 이해는됬으나 자유자재로 코드를 쓰고 있지 못해서 슬프다 - _ㅠ

 

6. 타입 변환, 캐스팅, 그리고 타입 프로모션 

 - 타입변환, 캐스팅은 같은 목적이며 개념 상 형(Type)의 변환을 의미한다. 실생활의 비약이 심각한 예시를 들어보면 500cc 맥주를 주문했다고하자.. 이떄 친구가 너 맥주 몇미리 시켰어? 라고 물었을 때 나는 500cc 라고 대답하는 경우 친구가 못알아듣는 것이다(...) 즉 우리는 타입 변환을 하여 "응 친구야 500ml를 시켰어" 라고 얘기를 해줘야 하는 것이다. 

 

- 타입프로모션 

 프로그램 실행 도중에 자동적으로 형변환(타입변환)이 일어나는데 작은 메모리 크기의 데이터 타입을 큰 메모리 크기의 데이터 타입으로 변환하는 행위를 말한다. 

// byte -> short : ok 
byte a = 127;
short b = a; 

// short -> byte : nok 
short c = 32767;
byte d = c;

7. 1차 및 2차 배열 선언하기 

배열의 본질은, 같은 타입의 여러개를 하나의 배열 변수에 저장하는 것이다. 

이때 1차 및 2차로 선언할 수 있고 첫번째 시작(인덱스)은 항상 0부터이다. 

 

 

8. 타입 추론, var  

타입추론은 컴파일러가 그 타입을 유추하는 것을 의미한다.

// Before var 
String myName = "MyName"; // String 

// Using var 
var myName = "MyName";
System.out.println(myName instanceof String); // 타입 추론에 의해 myName은 String이며 이를 String인지 확인하면 true가 출력됨.

+ Recent posts