[JAVA]자료형에 대해 정리해보자(기본자료형과 객체자료형 차이, 기본자료형, 자동 형 변환과 명시적 형 변환)
안녕하세요!
오늘은 JAVA 자료형에 대해 정리를 해보려고 합니다.
자료형이란 변수를 선언할 때 변수명 앞에 적어주는 키워드로
변수가 어떤 형태의 데이터를 담을 것인지 컴퓨터에게 알려주는 역할을 합니다.
그럼 자료형에 대해 정리해보도록 하겠습니다.
1. 기본 자료형과 객체 자료형의 차이
자바에서 자료형은 크게 기본 자료형과 객체 자료형 두가지로 나뉩니다.
기본 자료형이란 자바에 이미 존재하고 있는 타입을 뜻하고
(예. int, double, boolean, char 등등..)
객체 자료형이란 여러 데이터들이 복합적으로 모여있는 데이터라고 보시면 됩니다.
(예. String, System, ArrayList 등등..)
그럼 이 두가지의 차이를 알아보도록 하겠습니다.ㅎㅎ
우선 두 자료형의 가장 큰 차이는 "메모리에 저장되는 방식" 입니다.
기본 자료형은 변수에 할당된 메모리에 직접 값이 저장되고
객체자료형은 객체는 다른 곳에 저장해 놓고
변수에 할당된 메모리에 객체의 메모리 주소가 저장됩니다.
글로만 읽으시면 헷갈리실테니 예시를 들어보겠습니다.
기본자료형인 정수 int를 이용하여 i라는 변수를 선언하고 10을 넣어보고
객체자료형인 문자열 String이라는 녀석을 이용하여 s라는 변수를 선언하여 문자 ABCD를 넣어보겠습니다.
int i=10;
String s="ABCD";
이렇게 선언하면 위 사진과 같이
기본 자료형에는 i에 잡힌 메모리 공간에 직접 데이터 10이 들어가게 되고
객체 자료형에는 "ABCD"는 다른 메모리공간에 넣어놓고
s에 잡힌 메모리 공간에는 ABCD를 넣어놓았던 그 메모리 공간의 주소가 담기게 됩니다.
참고) 기본, 객체 자료형 구분하기
이 두가지를 구분하는 방법은 간단하게 자료형을 나타내는 이름이 대문자로 시작하는지, 소문자로 시작하는지를 보시면 됩니다.
그 예로 기본자료형인 int는 소문자로 시작하고 객체자료형인 String은 대문자로 시작하죠.
2. 기본 자료형
먼저 기본 자료형에 대해 알아보도록 하겠습니다.
기본 자료형은 보통 자료형 명이 소문자로 표현되는 정수형, 실수형, 논리형 이렇게 3가지가 있고
그 외의 나머지 것들은 객체 자료형에 속한다고 보시면 됩니다.
이를 정리해서 나타내면 다음과 같습니다.
각 자료형에 대해 정리하면 다음과 같습니다.
우리가 프로그래밍을 하게 되면 파란색으로 칠해져있는 자료형들을 주로 사용하게 됩니다.
1) 정수형
1.1)byte
기본적으로 -128~127까지의 범위를 다룹니다. 자신이 표현하고자 하는 수가 정말 작은 수라는 확신이 있을 때 해당 자료형으로 변수를 다루면 int등을 사용하는 것 보다 메모리를 아낄 수 있습니다.
1.2)char
문자를 나타낼 때 쓰는 자료형입니다. 하지만 컴퓨터는 문자 자체로 이해할 수 없기 때문에 아스키코드라는 것을 사용하여 문자를 인식합니다. (예를들면 문자 'a'는 66인 숫자로 인식하는 방식-예시입니다.)
1.3)short
2byte로 -32,768 ~ 32,767의 범위를 다룹니다. 사용할 일이 많지 않으니 생략하겠습니다.
1.4)int
정수를 나타내고 가장 흔하게 사용하는 타입으로 -2,147,483,648~2,147,483,647 사이의 숫자를 다루는데 우리가 일상생활에서 다루는 범위는 왠만해서 다 들어간다고 보시면 됩니다.
1.5)long
아주 큰 숫자까지 표현이 가능하며(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) long을 사용하면 우리가 일상적으로 쓰지 않는 왠만한 숫자들까지 다 커버가 가능합니다.
2)실수형
2.1)float
약 ±(1.40129846432481707e-45 ~ 3.40282346638528860e+38) 이정도의 범위의 숫자를 다루지만 소수를 다루기에는 부족한 감이 있습니다. 실수를 다룰 때는 가급적 아래 항목인 double을 사용할 것을 권장합니다.
2.2)double
범위가 넓어서 왠만한 소수는 다 다룰 수 있습니다. 소수를 다룰 때는 double사용을 권장합니다.
(±(4.94065645841246544e-324d ~ 1.79769313486231570e+308d))
3)논리형
3.1)boolean
참거짓을 나타내는 자료형으로 true false등의 값이 들어갑니다.
[참고사항] 왜 자료형에 맞는 데이터를 담아야 하는가?
여기까지 보면 이런 의문이 드실 수 있습니다.
"그냥 자료형 중 다룰 수 있는 범위가 제일 큰 것으로 지정해서 편하게 데이터 담으면 되지 않을까?"
아래의 예시를 봅시다.
int a = 2147483647;
long b = 2147483647;
위의 예시를 보면 같은 데이터를 담고있는데 데이터를 담기 위해 차지하는 메모리는 b가 두배 더 많게됩니다.
프로그래밍을 하다 보면 최적화라는 이슈를 종종 보게되는데
최적화할 때 중요한 것중에 하나가 불필요한 메모리들 사용을 없애고 최대한 적은 메모리를 사용해 돌아갈 수 있게 하는 것입니다.
(물론 요즘에는 컴퓨터 사양이 다들 좋아져서 메모리 좀 더 많이 쓴다고 큰일나는 것은 아니지만...)
때문에 늘 들어갈 데이터를 의식하고 자료형을 사용하는 것이 중요합니다.
3. 형 변환하기
코드를 짜다보면 한 변수에 담겨져 있는 데이터를 다른 변수로 옮기고 싶을 때가 있습니다.
이 때 옮길 대상이 되는 변수의 자료형이 다르다면 형 변환을 해야하는데
형 변환은 크게 두가지 종류가 있습니다.
작은 공간의 메모리에서 큰 공간의 메모리로 이동하는 자동(묵시적) 형 변환,
반대로 큰 공간->작은 공간의 메모리로 이동하는 명시적 형 변환입니다.
3.1)자동(묵시적) 형 변환
자동 형변환은 아래와 같이 진행합니다.
byte b = 10;
int i = b;
System.out.println("i = " + i);//값 출력하는 코드
출력 결과: i=10
기본적으로 작은 공간에서 큰 공간으로 바꾸는 것을 문제가 없습니다.
3.2) 명시적 형 변환
명시적 형 변환은 변수명 앞에 (변환할 자료형 명)을 적어주면 되는데 예시는 다음과 같습니다.
int i = 100;
byte b = (byte)i;
System.out.println("b = " + b);
i = 123456;
b = (byte)i;
System.out.println("b = " + b);
출력 결과: b=100/ b=64
위 예시에서 보다시피 큰 자료형에서 작은 자료형으로 옮길 시 옮긴 대상이 되는 자료형의 범위를 넘어서는 값이 들어 올 경우 데이터가 누실될 수 있어 주의해야합니다.
자료형에 관한 포스팅은 그럼 여기서 마치도록 하겠습니다!
잘못된 부분이나 잘 이해가 안가시는 부분이 있으시다면 댓글로 알려주세요!ㅎㅎ
감사합니다:)
Reference
이 포스팅은 아래의 강좌를 참고하여 만들어졌습니다.
- 자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94_java-renew/dashboard
'Language > Java' 카테고리의 다른 글
[Java]배열의 개념, 선언및 초기화하는 방법+예제 (2) | 2020.08.11 |
---|---|
[Java]자바의 연산자의 종류 및 설명, 예시 (1) | 2020.08.06 |
[JAVA]변수란 무엇인가? 변수 선언 및 초기화, 메모리 할당 및 데이터 변경 정리 (2) | 2020.07.27 |
[JAVA]JDK(Java Development Kit)+Eclipse 설치하기! (0) | 2020.07.24 |
[JAVA]Java프로그래밍이란? 자바를 알아보자! (0) | 2020.07.22 |