[자바/Java] 데이터 타입, 변수 그리고 배열

resilient

·

2020. 12. 27. 14:49

728x90
반응형

 

https://github.com/whiteship/live-study/issues/2

 

2주차 과제: 자바 데이터 타입, 변수 그리고 배열 · Issue #2 · whiteship/live-study

목표 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다. 학습할 것 프리미티브 타입 종류와 값의 범위 그리고 기본 값 프리미티브 타입과 레퍼런스 타입 리터럴 변수 선언

github.com

목표

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

학습할 것

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

자바의 데이터 타입은 크게 프리미티브 타입과 레퍼런스 타입으로 나뉘어진다.

프리미티브 타입과 레퍼런스 타입의 차이점은 '메모리를 참조하는 타입인가?'(C언어 에서는 '포인터' 의 개념이다.)

각각의 타입으로 변수를 선언시에 메모리에 공간이 할당되는데, 메모리가 공간에 직접담기면, 프리미티브 타입이고

다른곳을 참조하는 주소값을 담으면 레퍼런스 타입이라고 할 수있다.

 

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

(출처 : 뇌를 자극하는 Java 프로그래밍 - 한빛미디어)

 

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

 

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를 이용하는 게 좋다.

 

 

 

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

 

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

 

#리터럴

 

리릴은 우리가 기존에 알고 있던 '상수'의 다른 이름일 뿐이다.

프로그래밍에서 상수는 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문에 이와 구분하기 위해 다른이름으로 불릴 뿐이다.

파란 부분은 변수, 빨간 부분은 상수, 노란 부분이 리터럴 이다.

 

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

 

변수는 '값을 저장할 수 있는 메모리 공간' 이다.

 

age(나이)를 저장하기 위한 변수로 나이는 정수이기 때문에 int 타입으로 지정해 주었다.

int는 변수타입, age는 변수이름 이다.

변수타입은 변수에 저장될 값이 어떤 타입(type)인지를 지정하는 것이다.

변수이름은 말 그대로 변수에 붙인 이름이다.

 

메모리는 여러 프로그램이 공유하는 자원이므로 전에 다른 프로그램에 의해 저장 되었을 수도 있는 쓰레기값이 남아있을 수 있기 때문에 변수 초기화를 해주어야 한다.

 변수 초기화란, '변수를 사용하기 전에 처음으로 값을 저장하는 것'이다.

변수 age를 선언하고 25로 초기화

변수에 값을 저장할 때는 대입연산자 (=)를 사용한다. 오른쪽의 값을 왼쪽 변수에 저장하라 라는 의미이다.

 

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

 

변수의 스코프는 그 변수에 접근할 수 있는 범위이다.

자바언어는 {} 블록 스코프를 사용한다.

6라인에 있는 변수 age는 2라인에서 받아온 25에서 5라인에서 받아온 20으로 바뀐걸 확인 할 수 있다.

7라인에 있는 병수 age2는 3라인에서 받아온 23을 출력하는걸 볼 수 있다. 

7라인에 있는 age2를 출력하기 위해 사용할때 자신과 가까운 블록 스코프에서 찾고 없을 경우 상위 블록 스코프에 존재하는지 올라가면서 찾아본다.

 

변수의 라이프타임은

 

세가지 유형의 변수에 따라 다르다

  • 인스턴스 변수 - 범위는 정적 메소드를 제외한 클래스 전체이고, 라이프타임은 클래스를 인스턴스화한 객체가 메모리에서 사라질때까지 이다.
  • 클래스 변수 - 클래스 전체이고, 라이프타임은 프로그램 종료시까지이다.
  • 지역 변수 - 인스턴스 변수, 클래스 변수가 아닌 모든 변수이고, 라이프타임은 control이 변수가 선언된 블록 내부에 있는 동안이다.

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

 

프로그램을 작성하다 보면 같은 타입뿐만 아니라 서로 다른 타입간의 연산을 수행해야 하는 경우가 생긴다.

이 때, 연산을 수행하기위해 타입을 일치시켜야 하는데 변수나 리터럴 타입을 다른 타입으로 변환하는 것을

Type casting 이라고 한다.

타입캐스팅은 자신의 표혐 범위를 모두 포함하지 못한 데이터 타입으로의 변환을 의미한다.

이렇게 (타입) 피연산자 로 표현하면되고, 여기에 사용되는 괄호()는 캐스트 연산자, 형변환 연산자라고 하고 형변환을 캐스팅이라고 한다.

실수형을 정수형으로 반환하면 실수형의 소수점이하 값은 버려진다.

정수형을 실수형으로 반환하면 실후영의 정밀도의 제한으로 인한 오차가 발생할 수 있다.

(Ex.10진수로 8자리 이상의 값을 실수형으로 변환할 때는 float가 아닌 double로 형변환을 해야 오차가 없다.)

 

타입 프로모션이란 자신의 표현 범위를 모두 포함한 데이터 타입으로의 변환을 의미한다.

 

#1차 및 2차 배열 선언하기

 

배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루어서 보다 효율적으로 관리하기 위한 것을 말한다.

선언방법

age라는 int 타입의 배열이고 길이는 5이다.

1차배열은

이렇게 타입[] 변수이름;  으로 선언하고 변수이름 = new 타입[길이]; 로 배열을 생성해준다.

생성된 배열의 각 저장공간을 '배열의 요소'라고 하고 '배열이름[인덱스숫자]' 의 형태로 배열의 요소에 접근한다.

인덱스는 배열의 요소마다 붙여진 일련번호로 1이아닌 0부터 시작한다.

 

2차배열은

타입[][] 변수이름; 으로 선언하고 변수이름 = new 타입[길이][길이];로 배열을 생성해준다.

2*2 배열을 생성했다. 2차원배열.

#타입추론,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