자바의 데이터 타입, 변수, 배열

이재연·2020년 11월 23일
0

Java Basic

목록 보기
2/15
post-custom-banner

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

1 byte = 8 bit, 1 byte는 282^8개의 값을 표현 가능

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

프리미티브 타입 : Primitive type. 자바의 기본 타입으로 정수형, 문자형, 실수형, 논리형이 있다. 메모리에 실제 값을 저장하며 고정된 크기를 가진다. 스택 영역에 저장된다.

레퍼런스 타입 : Reference type. 참조 타입으로 기본 타입을 제외한 모든 타입은 참조 타입이다. 고정된 크기가 정해져있지 않다. 데이터는 힙 영역에 저장되고 변수에는 주소를 저장한다.

리터럴

데이터의 실제 값 혹은 값을 표현하는 방법. 데이터의 타입을 명확하게 표현하기 위해서 사용한다.

리터럴의 종류는 정수형, 실수형, 논리형, 문자형, 문자열등이 있다.

  • 논리형

true, false

  • 정수형(int 타입)
  1. 정수(123), -로 음수 표현(-123)
  2. 8진수 표현, 0으로 시작하는 정수(0123)
  3. 16진수 표현, 0x로 시작하는 정수(0x123)
  4. 2진수 표현, 0b로 시작하는 정수(0b10)

값 뒤에 l/L을 붙이면 long 타입을 나타낸다.

  • 실수형(double 타입)
  1. 소수점을 포함한 정수(1.0, 11.11, 0.11)
  2. 지수 표현식(1.12e0)

기본적으로 double형을 나타내지만 값 뒤에 d/D를 붙여 명시적으로 나타낼 수도 있다.

값 뒤에 f/F을 붙이면 float 타입을 나타낸다.

  • 문자형(char 타입)

작은 따옴표(')로 둘러쌓인 문자('a')

기본적으로 char형을 나타내지만 int형이나 long형으로 값을 받을 수 있다. 정수형 타입으로 값을 받으면 유니코드 값이 저장된다.

  • 문자열(String 타입)

큰 따옴표로 둘러쌓인 문자열("abcd")

  • null

자바에서 쓰이는 리터럴로 null값을 나타낸다. 참조가 없음을 의미한다.

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

변수 선언은 타입과 변수이름으로 할 수 있다.

기본 타입은 = 연산자, 참조 타입은 new 연산자와 생성자를 통해 초기화 할 수 있다.

//변수 선언
int a; //타입 변수명;
char b,c; //콤마를 이용해 여러 개의 변수 선언 가능
Map m;

//초기화
a = 1;//리터럴을 통해 초기화
b = 'A';
m = new HashMap();//생성자를 통해 초기화

연산자 new는 새로운 인스턴스에 대한 참조를 리턴한다.

참조는 해시코드로 되어있으며 4바이트 정수값을 가진다.

자바는 메모리의 실제 주소를 변수에 저장하지 않고 내부 인덱스 테이블의 주소인 참조값을 통해 변수에 접근한다. 변수에 값을 할당하게 되면 참조값으로 내부 인덱스 테이블에서 메모리 주소를 검색하여 데이터를 할당하게 된다.

초기화 : 변수에 값을 할당하는 것

인스턴스 : 메모리에 만들어진 객체

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

스코프 : 변수에 접근할 수 있는 영역

라이프 타임 : 변수가 메모리에 선언되고 소멸 할 때까지

변수는 클래스 변수, 인스턴스 변수, 로컬 변수로 나눌 수 있다.

  • 클래스 변수

클래스 내에 선언되며 static으로 선언된 변수, 전역 변수라고도 부른다.

스코프 : static을 포함한 클래스 전체에서 접근할 수 있다.

라이프 타임 : 프로그램을 종료할 때 까지 존재

  • 인스턴스 변수

클래스 내, 함수와 블록 밖에 선언된 변수

스코프 : static을 제외한 클래스 전체

라이프 타임 : 클래스가 메모리에 있는 동안

  • 로컬 변수

클래스와 인스턴스 변수를 제외한 모든 변수

스코프 : 선언된 블록 내

라이프 타임 : 블록을 벗어나기 전 까지

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

프로모션(Promotion) : 묵시적 형 변환. 자동 타입 변환. 작은 개념에서 큰 개념으로 변환 할 경우 프로모션이 일어난다. 크기가 작은 int에서 큰 long으로 변환 할 때 캐스팅 하지 않아도 자동으로 타입이 바뀐다.

캐스팅(Casting) : 명시적 형 변환. 강제 타입 변환. 큰 개념에서 작은 개념으로 변환 할 경우 캐스팅이 필요하다. 크기가 큰 long에서 크기가 작은 int로 변환하거나 상속 관계를 가진 클래스간 변환에서 사용한다.

업캐스팅(up-casting) : 서브 클래스는 수퍼 클래스로 변환 할 수 있다.

다운캐스팅(down-casting) : 수퍼 클래스에서 서브 클래스로 변환하는 걸 의미한다. 하지만 서브 클래스의 속성을 가진 경우만 가능하기 때문에 이미 수퍼 타입으로 업캐스팅 됐던 객체만 가능하다.

1차 및 2차 배열 선언하기

배열은 자료형의 집합이다. 레퍼런스 타입이며, 배열의 길이는 고정적이다. 인덱스를 통해 값에 접근 할 수 있다.

//1차 배열 선언
int[] array1 = new int[3];

int[] array2 = new int[]{1,2,3};

//2차 배열 선언
int[][] array3 = new int[2][3];

int[][] array4 = new int[2][];
array41[0] = new int[3];

int[][] array5 = {{1},{2,3},{4,5,6}};

타입 추론, var

타입 추론 : 코드 작성시에는 타입이 정해지지 않았지만 컴파일러가 유추 하는 것. generic, lambda, var등이 있다.

var : java10 부터 추가된 타입 추론을 지원하는 변수.

참조

https://en.wikibooks.org/wiki/Java_Programming/Literals

https://dohe2014.tistory.com/entry/참조reference와-참조변수reference-variable

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

post-custom-banner

0개의 댓글