본문 바로가기
Language/Java

JAVA 2주차 : 자바 데이터 타입, 변수 그리고 배열

by CleanCoder 2021. 2. 11.

 

목표

자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.

 

 

학습할 것

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

 

 

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

 

https://gbsb.tistory.com/6

 

 

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

 

Primitive Type

: byte, short, int, long, float, double, boolean, char

  • 자바 언어에 내장된 기본 유형 
  • 자바는 정수, 실수, 논리, 문자 방식의 primitive type을 지원한다.
  • null이 허용되지 않으며 기본값이 존재한다.
  • stack 영역에 저장됨.

Reference Type

: 클래스 타입(class type), 인터페이스 타입(interface type), 배열 타입(array type), 열거 타입(enum type)

  • 어떤 값이 저장되어 있는 주소(memory address)를 저장한다.
  • 8개의 프리미티브 타입을 제외한 나머지는 모두 레퍼런스 타입이다.

  • null 이 허용되며, 기본값이 없다.

  • heap 영역에 저장됨

 

3. 리터럴

 

 리터럴은 변수에 값을 넣어줄 때 입력되는 값을 리터럴이라 한다.

 

 

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

 

  • 변수 형식 변수 이름
  • 변수 형식 변수 이름 = 초기 값

다음과 같이 선언할 수 있다.

int val1;
int val2 = 3;

val1처럼 값을 넣어주지 않을 시 다른 프로그램에 의해 저장된 알 수 없는 값(garbage value)이 남아 있을 수 있기 때문에 사용 전에 초기화를 해야한다.

 

 

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

 

 변수의 스코프는 변수에 접근할 수 있는 유효 범위/영역이고 라이프타임변수가 생성되고 소멸되는 과정을 의미한다. 

클래스를 설계할 때, 멤버 변수 중 모든 인스턴스에 공통으로 사용하는 것은 클래스변수로 정의해야 한다.

클래스 변수는이미 메모리에 올라가 있기 때문에 인스턴스를 생성하지 않아도 사용할 수 있다.

 

https://catch-me-java.tistory.com/18

 

 

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

 

 프로그램을 작성하다 보면 서로 다른 타입의 변수나 리터럴의 연산을 수행해야 하는 경우가 있다. 이때,변수나 리터럴의 타입을 다른 타입으로 변환하는 것을 형 변환(casting)이라고 한다.

 

이와 같은 형태로 사용하게 된다.

int a = (char)c

아스키코드표에서 c는 int형으로 99의 값을 가지므로 a 변수에 99가 저장되게 된다.

 

 

표현 범위가 좁은 타입에서 넓은 타입으로 형 변환하는 경우에는 값 손실이 없으므로 더 넓은 쪽으로 자동 형 변환되는데, 이를 타입 프로모션이라고 한다.

https://hongkey90.tistory.com/15

넓은 타입에서 좁은 타입으로의 형 변환은 명시적인 형 변환만 가능하며, 값의 손실(loss of value)이 발생한다.

 

 

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

 

 기본적으로 배열은 레퍼런스 타입 즉 참조 자료형으로 취급된다. 그러므로 배열 선언 시 스택 영역에 값이 아닌 주소 값이 저장되게 된다.

 

배열은 다음과 같은 방식으로 선언할 수 있다.

int arr1[] = {10};
int arr2[] = new int[10];
int arr3[] = new int[]{10};
int arr4[][] = {{10},{1}};
int arr5[][] = new int [][]{{10},{1}};
int arr6[][];

 

 

8. 타입 추론, var

 

 java 10에서 varvar라는 Local Variable Type-Inference가 추가되었다.

타입 추론이란 정적 타이핑을 지원하는 언어에서, 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 기능이다.

 

이러한 var는 런타임 오버헤드가 없고 키워드(KeyWord)가 아니다. var는 어떠한 타입도 아니고, 클래스에서 사용할 수 있는 예약어가 아니다.

 

var는 초기화 값이 있는 지역변수 (Local Vairable)로만 선언이 가능하다. var는 멤버 변수, 또는 메서드의 파라미터, 리턴 타입으로 사용이 불가능하다. 또한, 무조건 선언할 때 초기화 값이 있어야 한다.

 

var 사용 시 주의할 점

  • Var는 초기화 없이 사용할 수 없다.

  • Var타입 변수에는 null 값이 들어갈 수 없다.

  • Var 타입은 로컬 변수에만 선언이 가능하다.

  • Lambda Expression에는 명시적인 타입을 지정해줘야 한다.

  • 배열을 선언할 때, var 대신 타입을 명시해줘야 한다.

 

람다 익스프레션에서도 var이 사용될 수 있다.

 

var로 선언하면 이러한 어노테이션을 사용 가능하게 된다고 한다.

 

 

 

참조

www.youtube.com/watch?v=tjj-XLk4CSA

댓글