반응형

목표

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

 

학습할 것

 

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

 

 


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

프리미티브 타입(Primitive Type)

  • 총 8가지의 기본형 타입(Primitive Type)을 미리 정의하여 제공한다.
  • 기본값이 있기 때문에 Null이 존재하지 않는다.
  • 실제 값을 저장하는 공간으로 스택(Stack) 메모리에 저장된다.
  • 만약 컴파일 시점에 담을 수 있는 크기를 벗어나면 에러를 발생시키는 컴파일 에러가 발생한다.
  타입 할당되는 메모리 크기 기본값 데이터의 표현 범위
 논리형  boolean  1 byte  false  true, false
 정수형  byte  1 byte  0  -128 ~ 127
 short  2 byte  0  -32,768 ~ 32,767
 int(기본)  4 byte   0  -2,147,483,648 ~ 2,147,483,647
 long  8 byte  0L  -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
 실수형  float  4 byte  0.0F  (3.4 X 10-38) ~ (3.4 X 1038) 의 근삿값
 double(기본)  8 byte  0.0  (1.7 X 10-308) ~ (1.7 X 10308) 의 근사값
 문자형  char  2 byte (유니코드)  '\u0000'   0 ~ 65,535

 

레퍼런스 타입(Reference Type)

  • 기본형 타입을 제외한 타입들이 모두 참조형 타입(Reference Type)이다.
  • 빈 객체를 의미하는 Null이 존재한다.
  • 값이 저장되어 있는 곳의 주소 값을 저장하는 공간으로 힙(Heap) 메모리에 저장된다.
  • 문법상으로는 에러가 없지만 실행시켰을 때 에러가 나는 런타임 에러가 발생한다.
 타입  기본값 할당되는 메모리 크기 
 배열(Array)  Null  4 byte (객체의 주소값)
 열거(Enumeration)  Null
 클래스(Class)  Null
 인터페이스(Interface)   Null

 

리터럴

리터럴은 실제로 저장되는 값 그 자체로 메모리에 저장되어있는 변하지 않는 값 그 자체를 뜻한다.
또는 컴파일 타임에 프로그램 안에 정의되어 그 자체로 해석되어야 하는 값을 뜻한다.

오른쪽에 있는 값들을 리터럴이라고 부른다   예) 0b10, 010, 10 ... 

 

 

 

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

변수 선언은 타입을 적고 사용하고자 하는 이름을 작성하면 된다.

초기화는 해당 변수에 넣고자 하는 값을 작성하면 된다. (알기로는 선언과 동시에 초기화하듯이 한 줄로 작성하는 게 보다 효율적이라고 알고 있다.)

 

 

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

자바는 블록 스코프를 사용한다.

y 값은 같은 메소드 내에 선언되어 있지만 Inner 블록으로 밖에서 y 변수가 접근할 수가 없다.

 

스코프 라이프타임 비교표

Variable Type Scope Lifetime
Instance Variable static method를 제외한 클래스 전체 클래스를 인스턴스화한 객체가 메모리에서 사라질 때 까지
Class Variable 클래스 전체 프로그램 종료시 까지
Local Variable 변수가 선언된 block 내부 control 이 변수가 선언된 block 내부에 있는 동안

num1, num2는 인스턴스 변수이기 때문에 static 메소드인 main 메소드에서는 접근이 불가능하다.

result는 클래스 변수이기 때문에 main 메소드 내에서도 접근 가능한 걸 볼 수 있다.

 

 

 

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

 - 자신의 표현 범위를 모두 포함한 데이터 타입으로의 변환. (타입 프로모션)
 - 자신의 표현 범위를 모두 포함하지 못한 데이터 타입으로 변환 (타입 캐스팅)

 

long 값의 표현 범위가 int에 비해서 넓기 때문에 형 변환 없이 int 값을 할당받을 수 있다. 이런 경우를 타입 프로모션이라고 부른다. 데이터 손실이 발생하지 않기 때문이다.

하지만 반대로 int가 long 값을 할당받기 위해선 형 변환이 필요하다. 이때를 타입 캐스팅이라고 부르는데, 타입 캐스팅은 데이터 손실이 발생할 수 있기 때문에 조심해서 사용해야 한다.

 

 

위와 같이 타입 캐스팅이 필요해서 에러 나는 부분을 아래와 같이 형 변환을 통해서 수정해보았다.

위에서 데이터 손실에 대해서 언급했던 이유가 아래 long_v2를 보면 알 수 있다.

 

 

1차 및 2차 배열 선언하기

1차 배열 선언와 값 할당은 아래와 같다.

값 할당 시 직접 new 키워드를 사용해서 배열 객체를 생성 후 값을 할당한다. 

 

 

선언과 동시에 값 초기화도 가능하다.

 

2차원 배열은 1차원 배열에서 대괄호( [] )가 하나 더 붙는다. 행열을 생각하면 쉬울 것 같다.

 

 

타입 추론, var

타입 추론이란 데이터 타입을 소스코드에 명시하지 않아도, 컴파일 단계에서 컴파일러가 타입을 유추해 정해주는 것을 뜻한다. 1.5버전 부터 추가된 Generic 이나 자바 8 버전에서 추가된 lamda 에서 타입추론이 사용된다. 그리고 자바 10 에서는 이러한 타입추론을 사용하는 var 이라는 Local Variable Type-Inference 가 추가되었다.

 

 

 

 

참조

gbsb.tistory.com/6

 

자바의 데이터 타입(Primitive type, Reference type)

타입(Data type)이란 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 것이다. 자바에서 타입은 크게 기본형 타입과 참조형 타입이 있다.

gbsb.tistory.com

www.learningjournal.guru/article/programming-in-java/scope-and-lifetime-of-a-variable/

 

Scope and Lifetime of a Variable in Java - Learning Journal

One of the frequent questions, which any programmer comes across in the programming world is, “What is the scope of this variable?” In this article, our main concern is to shed light upon the scope and lifetime of a variable in Java. The scope of a var

www.learningjournal.guru

blog.naver.com/hsm622/222144931396

 

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

# 목표 :: 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. # 학습할 것 : 프리미...

blog.naver.com

 

728x90
반응형

+ Recent posts