본문 바로가기
JAVA/[JAVA] 바구니

[JAVA] 기본 타입과 참조타입

by oncerun 2020. 3. 10.
반응형

데이터 타입에 대한 확실한 개념이 없다면 좋은 프로그램을 만들 수 없습니다.

왜냐하면  프로그램은 자료구조를 통해 데이터를 구성하고 알고리즘을 통해 문제를 해결하기 때문에 여기서 확실히 정리하고 갈 필요가 있다고 생각합니다.

 

1. 기본 타입(Primitive Type)

자바에서의 기본타입이란  java언어에서 이미 존재하는 데이터 타입입니다.

실제값인 변수에 직접 저장합니다. 그 종류는 정수, 실수, 문자, 논리 리터럴을 가지고 있습니다.

→여기서 리터럴(Literal)이란 직접 입력된 값을 말합니다.

정수 리터럴

1) 10진수(기본값), 8진수(0을붙여서 시작), 16진수(0x , 0X로 시작합니다)

 종류 : byte. char ,short, int , long

 

실수 리터럴

2) 소수를 말합니다. 지수식 도포함

 종류:float, double

 

문자 리터럴

3) '로 묶어서 사용하는 텍스트(단어)입니다.

 역 슬래쉬\가 붙은 문자 ex)'\n' '\t' 

 종류 : char


문자열 리터럴
4) 큰 따옴표를 사용해 묶은 텍스트입니다.

  종류 : string

 

논리 리터럴

5) 참과 거짓에 대한 내용

   종류:boolean

 

기본 데이터 타입의 크기와 저장되는 값의 범위

 

메모리 사용크기(정수타입) -2^(n-1) ~ 2^(n-1)-1

저장되는 값의 범위는 사실상 기억할 필요는 없습니다.

다만 메모리 사용 크기는 기억해야 하는데  메모리 사용 크기를 알고 있다면 사용되는 값의 범위를 대략적으로 알 수 있습니다. 그리고 만약 변수가 사용할 수 있는 값을 초과하게 된다면 오버플로우 현상이 발생하게 됩니다.  간단히 오버플로우를 설명하자만 가지고 있는 그릇에 값이 초과하게 되어 흘러넘치는 오류입니다.

 

타입 변환 (Type Casting)

자바에서는 묵시적으로 데이터 타입이 맞기 않으면 변환을 해주는데 자동 타입 변환이라고 합니다.

 

자동 타입 변환 (promotion) : 큰 크기 타입 <- 작은 크기 타입 (메모리 크기)
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
  
 float과 double이 int와 long보다 순위가 높은 이유는

 float과 double의 메모리 사용 크기는 각각 int와 long의 크기와 같지만, 정수 타입과는 다른 저장 방식 때   문에 훨씬 더 큰 범위의 값을 저장할 수 있음.
 음수 저장이 안 되므로 byte타입은 자동 변환 안됨.


2. 참조 타입(Reference Type)

자바에서 참조 타입과 기본 타입의 차이점은 저장되는 값이 다르다는 것입니다. 기본 타입으로 선언된 변수는 실제 값을 변수에 저장하여 스택 영역에 생성되고 참조 타입은 배열, 열거(Enum), 클래스, 인터페이스를 이용해서 선언된 변수는 메모리 주소를 값으로 가지게 되어 힙 영역에 생성되게 됩니다.

주소를 통해 객체를 참조한다는  뜻으로 참조 타입으로 불리게 됩니다.

 

약간 특별한 String

☆ String

- 자바는 문자열 리터럴이 동일하다면 String객체를 공유

스택 영역에 있는 String 객체의 값이 동일하다면 힙 영역에 있는 객체를 공유하게 됩니다.

ex)

스택

String name1  = "홍길동"
String name2  = "홍길동"

두 개의 객체는 힙 영역에 저장된 하나의 객체를 참조하게 되며  

String name = new String("홍길동")

메모리 상에 개별 객체가 만들어진다.

name == name2 : flase

 

 

  • null: 힙 영역의 객체를 참조하지 않는다 (참조 타입 변수에서 사용)
    NullPointerException:  참조 타입 변수가 null을 가지고 있을 경우(사용할 수 없는 경우) 접근할 때 생기는 오류
  • new 연산자 (객체 생성 연산자): 힙 영역에 새로운 객체를 만드는 연산자

이렇게 참조하지 않는 객체는 가비지 컬렉터 gc가 메모리상에서 수거해갑니다.

 

반응형

'JAVA > [JAVA] 바구니' 카테고리의 다른 글

[JAVA] Java Thread  (0) 2020.03.12
JAVA GUI  (0) 2020.03.11
클래스로부터 객체 생성  (0) 2020.03.09
객체 지향 프로그래밍이란?  (0) 2020.03.09
java.lang.NullPointerException 오류1  (0) 2020.03.03

댓글