sondiaa 2021. 5. 3. 21:54

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

위와 같이 자바에서는 8가지의 프리미티브 타입을 제공합니다

표에 보시면 모든 프리미티브 타입 값은 디폴트 값을 가지기 때문에 null이 존재하지 않습니다.

또한 해당 타입의 표현 범위를 넘지않도록 주의해야 합니다.

https://brunch.co.kr/@messi1913/6

 

 

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

타입은 데이터가 어떻게 메모리에 저장되고 프로그램에서 처리될지를 명시적으로 알려줍니다.

자바에서는 이러한 타입이 프리미티브 타입과 레퍼런스 타입 두개로 나눠지는데 프리미티브 타입은 계산을 위해 실제 값을 저장하고 레퍼런스 타입은 객체의 주소를 저장합니다.

 

프리미티브 타입

앞에서 설명한 것 처럼 8가지의 타입이 있고 기본값이 존재하며 스택에 저장됩니다. 예를 들어 표현 범위를 넘어가는 수를 담으려 하면 컴파일 에러가 발생할 것입니다.

 

레퍼런스 타입

기본형 타입을 제외한 타입들이 모두 참조형 타입입니다. 빈 객체를 의미하는 Null이 존재합니다.

값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 메모리에 저장합니다.

 

 

-리터럴

상수와 리터럴 둘 다, 변하지 않는 값을 의미합니다.

Asdasd”, 12, 123, 3.14, 'A'와 같은 값들이 '상수'인데, 프로그래밍에서는 상수를 변하지 않는 변수 즉,  '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문에 이것을 구분하기 위해 상수를 다른 이름으로 불러야 하게 되었습니다. 그렇기에 상수 대신 리터럴이라는 용어를 사용하게 된 것 입니다.

 

둘의 차이를 인지하고 박스 안에 내용을 보시면 상수는 ~~이고 리터럴은 ~~로 구분된 것을 알 수 있습니다.

 

그리고 상수를 사용하기 위해서는 final 지시자를 사용해야 합니다. 아래 코드를 보면 final 지시자를 사용하였기에 a는 상수이고 1리터럴입니다.1과 같이 변하지 않는 데이터 그 자체를 리터럴이라 하는 것 입니다.

static final int a = 1;

 

 

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

변수: 값을 저장할 수 있는 메모리상의 공간

Int num; 을 선언한다면 여기서 int는 변수 타입이고 num변수명이 됩니다.

 

 

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

변수의 스코프: 변수의 범위를 뜻하며 키워드나 선언된 블록의 위치에 따라 달라집니다.

변수의 라이프 타임: 변수가 메모리에 살아 있는 시간

https://goldfishhead.tistory.com/109

변수의 유형에 따라 달라지기에 유형별로 설명하겠습니다.

 

인스턴스 변수

클래스안에 있지만 다른 메서드 밖에 선언된 변수를 인스턴스 변수

scope : static method 제외한 클래스 어디서나 사용 가능 

lifetime : 클래스 객체가 메모리에 남아있을때 까지입니다.

 

클래스 변수

클래스안에 선언되고 static으로 선언된 변수를 클래스 변수

scope : 클래스 안에 어디서나 사용가능 하며

lifetime : 프로그램이 끝날 때까지

 

지역변수

클래스변수와 인스턴스 변수가 아닌 모든 변수들을 지역 변수

scope : 선언된 블록 안에서만 가용 가능

lifetime : 블록이 컨트롤될때까지 입니다., 블록을 벗어날 때까지

 

 

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

타입 변환: 변수 또는 상수의 타입을 다른 타입으로 변환하는 것으로 Boolean type을 제외하고 나머지 프리미티브 타입으로 형변환이 가능합니다.

종류로는  캐스팅타입프로모션으로 있습니다

https://brunch.co.kr/@messi1913/6, https://goldfishhead.tistory.com/109

타입 프로모션 (자동형변환)

위의 그림처럼 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우, 값손실이 없으므로 두 타입중에서 표현범위가 더 넓은 쪽으로 자동으로 형변환됩니다. , 왼쪽에서 오른쪽으로의 변환은 형변환 연산자를 사용하지 않아도 자동 형변환이 되며, 그 반대 방향으로의 변환은 반드시 형변환 연산자를 써줘야 합니다.

 

바로 그 형변환 연산자가 캐스팅 (명시적 형변환)입니다.

캐스팅은 더 큰 범위의 타입 값을 더 작은 범위의 타입에 할당하기 위해서 반드시 축소(캐스팅) 해줘야 합니다. 타입을 명시해줘서 강제적으로 형변환(캐스팅) 해 줄 수 있습니다.

 

위의 코드의 경우 4바이트인 int 8바이트인 더블에 대입하였기에 오류 없이 자동으로 변환이 일어나지만

그 아래 식에서는 byte에 괄호를 하여 강제로 변환시킵니다. 그런데 이러한 경우 double에서 byte로의 변환은 더 작은 범위로의 변환이므로 원래의 값과 전혀 다른 값이 나올 수 있으므로 주의해야합니다.

 

 

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

타입 변환: 변수 또는 상수의 타입을 다른 타입으로 변환하는 것으로 Boolean type을 제외하고 나머지 프리미티브 타입으로 형변환이 가능합니다.

https://goldfishhead.tistory.com/109

1차원배열, 2차원 배열의 선언이 동일하며 위의 방법 하드코딩하여 기본값을 설정하는 것이고 아래는 디폴트 값으로 초기화 하는 것입니다. 

이것을 자세하게 설명하자면 Int형 변수로 이루어진 배열 즉, refint형 변수로 이뤄진 배열을 참조하는 변수가 되는 것이고 배열도 객체이므로 영역에 생성되고 배열 변수는 영역의 배열 객체를 참조하게 되는 것 입니다.

 

 

-타입 추론, var

https://brunch.co.kr/@messi1913/6

자바 10부터는 타입추론을 지원하는 var()라는 키워드를 통해 타입추론이 가능하게 되었습니다.

바는 지역변수로 사용해야하고 선언과 동시에 초기화가 필요합니다.