자바 데이터 타입, 변수 그리고 배열
위와 같이 자바에서는 8가지의 Primitive type 을 제공하고 있다.
primitive type 값은 기본값이 있기 떄문에 null 이 존재 하지 않는다.
자바에서 제공하는 8가지 프리미티브 타입을 제외한 나머지 타입들은 모두 레퍼런스 타입에 해당한다.
프리미티브타입 (Primitive type)
: 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 계산을 위한 실제 값을 Stack 메모리에 저장한다.
레퍼런스타입 (Reference type)
: 객체의 주소를 저장한다. 기본적으로 Java.lang.Object를 상속받을경우 레퍼런스 타입이 된다. 즉, 프리미티브 타입을 제외하고는 레퍼런스 타입이라 생각해도 된다.
왼쪽 그림에서 보듯이 리터럴은 20 이다.
상수 (Constant) : 변하지 않는 변수
리터럴 (Literal) : 변하지 않는 데이터
즉, 상수는 참조값(참조 메모리의 주소)가 변하지 않는다는 의미이며, 자바 프로그래밍에서 상수를 사용할 때에는 final 키워드를 사용한다. 그러나, 리터럴은 1과 같이 변하지 않는 값(메모리 주소 안의 값)을 의미한다.
보통은 기본형의 데이터를 의미하지만, 인스턴스안의 값의 불변성(Imutable) 이 보장된다면 객체 리터럴이 될 수 있다.
ex) Java.lang.String ..
변수타입 : 변수에 저장될 값이 어떤 타입인지 정한다.
변수명 : 특정값이 저장되는 메모리공간의 이름
위와 같이 선언하면 하나의 빈메모리 공간에 변수타입에 맞는 저장공간이 확보되고 사용할 수 있게 되고 값의 CRUD 는 변수명을 통해서 가능하다.
변수를 선언하고, 처음으로 값을 저장하는 것을 말한다.
왼쪽과 같이 변수 초기화를 했을 경우
변수타입은 Java.lang.String
변수명은 myName 값은 "messi1913" 이 저장된다.
변수의 종류에 따라 변수의 초기화를 생략할 수 있는 경우도 있지만, (ex : 인스턴스 변수, 클래스변수)
변수는 사용되기 전에 적절한 값으로 초기화 하는 것이 좋다.
일반적으로 스코프란 변수의 범위라는건데 이 범위는 키워드와 선언된 블럭위치에 따라서 달라진다.
블럭은 { 로 시작해서 } 로 끝난다.
변수가 메모리에서 살아있는 시간
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
자바에서는 boolean type 을 제외한 나머지 프리미티브타입은 형변환이 가능하다.
타입변환의 종류 로는 캐스팅(강제 형변환), 과 타입프로모션 (자동 형변환) 이 있습니다.
위와 같은 경우는 4byte 인 int 를 8byte 인 double 에 넣기 때문에 컴파일 오류 없이 자동으로 형변환이 이러나게 된다.
아래 byte 부분은 강제형변환 하는 부분이고 강제 형변환할때는 변수 앞에 괄호하고 변환하고자 하는 데이터 타입을 적으면 변환시키게 된다. 이때 위와 같이 범위가 더 작은 데이터 타입으로 변환할 경우 ex) double -> byte 범위를 벗어나게 됨으로 입력한 데이터와 전혀 다른 값이 나올 수 있다.
위와 같이 배열의 선언은 [] 선언을 데이터 타입앞 이나 변수 뒤에 사용가능하다.
( 변수뒤 사용은 C-Style 이라고 intellij 툴에서 경고? 를 던지게 된다. )
타입 추론이란 코드 작성당시에는 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것을 의미한다. 자바 9까지는 generics나 lamda식에 대해서만 타입추론을 지원했지만 자바 10부터 타입추론을 지원하는 var이라는 키워드가 추가되어 자바에서도 타입추론을 사용가능하게 되었다.
var은 지역변수로 사용해야하고 선언과 동시에 초기화가 필요함.