[자바/Java] 데이터 타입, 변수 그리고 배열
resilient
·2020. 12. 27. 14:49
https://github.com/whiteship/live-study/issues/2
목표
자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
학습할 것
- 프리미티브 타입 종류와 값의 범위 그리고 기본 값
- 프리미티브 타입과 레퍼런스 타입
- 리터럴
- 변수 선언 및 초기화하는 방법
- 변수의 스코프와 라이프타임
- 타입 변환, 캐스팅 그리고 타입 프로모션
- 1차 및 2차 배열 선언하기
- 타입 추론, var
자바의 데이터 타입은 크게 프리미티브 타입과 레퍼런스 타입으로 나뉘어진다.
프리미티브 타입과 레퍼런스 타입의 차이점은 '메모리를 참조하는 타입인가?'(C언어 에서는 '포인터' 의 개념이다.)
각각의 타입으로 변수를 선언시에 메모리에 공간이 할당되는데, 메모리가 공간에 직접담기면, 프리미티브 타입이고
다른곳을 참조하는 주소값을 담으면 레퍼런스 타입이라고 할 수있다.
#프리미티브 타입 종류와 값의 범위 그리고 기본 값
#프리미티브 타입 종류와 값의 범위 그리고 기본 값
1. 정수, 문자열 타입
정수타입에는 byte, short, int, long 종류가 있다.
문자열타입에는 char가 있다.
4개의 타입은 숫자를 의미한다.
각각 의 타입들의 크기를 SIZE 메소드를 이용, 코드로 작성해서 보면,
이렇게 크기를 알 수있다.
2. 부동 소수점 타입
말 그대로 소수점이 들어가는 타입을 표현한다.
float,double이 있고,
이렇게 크기를 알 수있다.
3. 불리언 타입
참과 거짓의 데이터만 True과 False로 표현이 가능한 타입이고
위에 코드를 보면 Boolean.SIZE 부분에 에러가 나는 것을 확인 할 수 있는데 이는 자바에서 불리언의 크기를 알려주지 않고 있기 때문이다.
위에서 살펴본 타입들의 기본값과 범위
타입 | 기본값 | 데이터 값의 범위 |
boolean | False | True or False |
byte | 0 | -128 ~ 127 |
short | 0 | -32,768 ~ 32,767 |
int | 0 | -2,147,483,648 ~ 2,147,483,647 |
long | 0 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
float | 0.0F | 1.4E-45~3.4E38((1.4 X 10-45) ~ (3.4 X 1038) |
double | 0.0 | 4.9E-324~1.8E308(4.9 X 10-324) ~ (1.8 X 10308) |
char | \u0000 | 0 ~ 65,535 |
CPU가 가장 효율적으로 처리할 수 있는 타입은 int 이지만 효율적인 실행보다 메모리를 절약하려면 byte나 short를 이용하는 게 좋다.
#프리미티브 타입과 레퍼런스 타입
위에 #프리미티브 타입 종류와 값의 범위 그리고 기본 값 참고
#리터럴
리릴은 우리가 기존에 알고 있던 '상수'의 다른 이름일 뿐이다.
프로그래밍에서 상수는 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문에 이와 구분하기 위해 다른이름으로 불릴 뿐이다.
파란 부분은 변수, 빨간 부분은 상수, 노란 부분이 리터럴 이다.
#변수 선언 및 초기화하는 방법
변수는 '값을 저장할 수 있는 메모리 공간' 이다.
int는 변수타입, age는 변수이름 이다.
변수타입은 변수에 저장될 값이 어떤 타입(type)인지를 지정하는 것이다.
변수이름은 말 그대로 변수에 붙인 이름이다.
메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 저장 되었을 수도 있는 쓰레기값이 남아있을 수 있기 때문에 변수 초기화를 해주어야 한다.
변수 초기화란, '변수를 사용하기 전에 처음으로 값을 저장하는 것'이다.
변수에 값을 저장할 때는 대입연산자 (=)를 사용한다. 오른쪽의 값을 왼쪽 변수에 저장하라 라는 의미이다.
#변수의 스코프와 라이프타임
변수의 스코프는 그 변수에 접근할 수 있는 범위이다.
자바언어는 {} 블록 스코프를 사용한다.
6라인에 있는 변수 age는 2라인에서 받아온 25에서 5라인에서 받아온 20으로 바뀐걸 확인 할 수 있다.
7라인에 있는 병수 age2는 3라인에서 받아온 23을 출력하는걸 볼 수 있다.
7라인에 있는 age2를 출력하기 위해 사용할때 자신과 가까운 블록 스코프에서 찾고 없을 경우 상위 블록 스코프에 존재하는지 올라가면서 찾아본다.
변수의 라이프타임은
세가지 유형의 변수에 따라 다르다
- 인스턴스 변수 - 범위는 정적 메소드를 제외한 클래스 전체이고, 라이프타임은 클래스를 인스턴스화한 객체가 메모리에서 사라질때까지 이다.
- 클래스 변수 - 클래스 전체이고, 라이프타임은 프로그램 종료시까지이다.
- 지역 변수 - 인스턴스 변수, 클래스 변수가 아닌 모든 변수이고, 라이프타임은 control이 변수가 선언된 블록 내부에 있는 동안이다.
#타입 변환, 캐스팅 그리고 타입 프로모션
프로그램을 작성하다 보면 같은 타입뿐만 아니라 서로 다른 타입간의 연산을 수행해야 하는 경우가 생긴다.
이 때, 연산을 수행하기위해 타입을 일치시켜야 하는데 변수나 리터럴 타입을 다른 타입으로 변환하는 것을
Type casting 이라고 한다.
타입캐스팅은 자신의 표혐 범위를 모두 포함하지 못한 데이터 타입으로의 변환을 의미한다.
이렇게 (타입) 피연산자 로 표현하면되고, 여기에 사용되는 괄호()는 캐스트 연산자, 형변환 연산자라고 하고 형변환을 캐스팅이라고 한다.
실수형을 정수형으로 반환하면 실수형의 소수점이하 값은 버려진다.
정수형을 실수형으로 반환하면 실후영의 정밀도의 제한으로 인한 오차가 발생할 수 있다.
(Ex.10진수로 8자리 이상의 값을 실수형으로 변환할 때는 float가 아닌 double로 형변환을 해야 오차가 없다.)
타입 프로모션이란 자신의 표현 범위를 모두 포함한 데이터 타입으로의 변환을 의미한다.
#1차 및 2차 배열 선언하기
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루어서 보다 효율적으로 관리하기 위한 것을 말한다.
선언방법
1차배열은
이렇게 타입[] 변수이름; 으로 선언하고 변수이름 = new 타입[길이]; 로 배열을 생성해준다.
생성된 배열의 각 저장공간을 '배열의 요소'라고 하고 '배열이름[인덱스숫자]' 의 형태로 배열의 요소에 접근한다.
인덱스는 배열의 요소마다 붙여진 일련번호로 1이아닌 0부터 시작한다.
2차배열은
타입[][] 변수이름; 으로 선언하고 변수이름 = new 타입[길이][길이];로 배열을 생성해준다.
#타입추론,var
타입추론은 타입이 정해지지 않은 변수에 대해서 컴파일러가 변수의 타입을 스스로 찾아낼 수 있도록 하는 기능이다.
타입 추론이 가능하다는 말은 -> 타입을 명시하지 않아도 된다 -> 코드량을 줄이고, 가독성을 높일 수 있다는 말이다.
Java10 에서 var라는 Local varuable Type-inference가 추가 되었다.
원래는 아래 처럼 써야했지만
String name = "Hello!World";
Java10 이상에서는 다음과 같이 타입추론,var를 지원한다.
var name = "Hello!World";
#Reference
- velog.io/@bluesky7017/
- blog.naver.com/hsm622/222144931396
- 자바의 정석 - 지은이.남궁성
- league-cat.tistory.com/414
'Language > Java & Kotlin' 카테고리의 다른 글
[자바/Java] 인터페이스(Interface)란? (0) | 2021.01.08 |
---|---|
[자바/Java] 패키지(package) 란? (0) | 2021.01.05 |
[자바/Java] JVM이란? (0) | 2020.12.26 |
[자바/Java]상속이란? (0) | 2020.12.23 |
[자바/Java] 클래스(class)란? (0) | 2020.12.17 |