본문 바로가기
Language/JAVA

[JAVA] 02일차. 변수와 자료형(2), (3)

by 전전긍긍 2022. 2. 5.

👀20220204 공부기록

 

📍본 포스팅은 인프런-Do it! 자바 프로그래밍 입문 강의를 바탕으로 작성함을 알립니다.

 

[무료] Do it! 자바 프로그래밍 입문 - 인프런 | 강의

비전공자, 문과생도 무릎을 ‘탁!’ 치며 이해하는 20년 경력 명강사의 자바 강의!, - 강의 소개 | 인프런...

www.inflearn.com


03. 변수와 자료형(2)

✔️ 변수(variable) : 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간

즉, 변수란 데이터를 저장할 수 있는 메모리 공간을 의미하며, 이렇게 저장된 값은 변경될 수 있다.

  정수형 문자형 실수형 논리형
1byte byte - - boolean
2byte short char - -
4byte int - float -
8byte long - double -

📍정수형 타입

정수형 데이터의 타입을 결정할 때에는 반드시 자신이 사용하고자 하는 데이터의 최대 크기를 고려해야 한다. 해당 타입이 표현할 수 있는 범위를 벗어난 데이터를 저장하면, overflow가 발생해 전혀 다른 값이 저장될 수 있기 때문이다.

 

byte의 범위는 -128~127

자료형의 크기에 상관없이 숫자 자체를 저장하는 것은 기본적으로 4byte이다. int형에 12345678900을 저장한다면 out of range라는 경고문이 뜬다. 그럴 때는, 자료형을 더 큰 long으로 바꿔준다. 하지만 12345678900은 4byte를 넘기 때문에 숫자 뒤에 L을 붙여서 8byte에 리터럴을 저장하라고 말해주어야 한다. (L은 long타입의 리터럴 타입 접미사(literal type suffix)이다. 

int num3 = 9876543210L;  // Type mismatch
long num4 = 9876543210L; // OK

📍실수형 타입

아래 코드와 같이 float형은 리터럴 타입 접미사를 붙여 float형이라는 것을 알려야 한다. double형은 생략이 가능하다.( 실수형 타입 중 기본이 되는 타입이 double형이기 때문인 것 같다.)

 

실수형 타입 할당되는 메모리 크기 데이터의 표현 범위 리터럴 타입 접미사
float 4바이트 (3.4 X 10⁻³⁸) ~ (3.4 X 10³⁸) F 또는 f
double 8바이트 (1.7 X 10⁻³⁰⁸) ~ (1.7 X 10³⁰⁸) D 또는 d (생략 가능함)

📍문자형 타입

자바에서는 유니코드(unicide)를 사용하여 문자를 표현한다.

문자형 타입 할당되는 메모리의 크기 데이터의 표현 범위
char 2byte 0 ~ 2¹⁶

📍논리형 타입

논리형 타입 할당되는 메모리의 크기 데이터의 표현 범위
boolean 1byte true 또는 false

04. 변수와 자료형(3)

✔️상수(constant) : 변하지 않는 값. 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간이지만, 값을 변경할 수 있는 변수와는 다르게 상수는 값을 변경할 수 없다.

final int STUDENT_NUM = 31;

JAVA에서는 final 키워드를 사용하여 상수를 선언한다.

 

✔️리터럴(literal) : 프로그램에서 사용하는 모든 숫자, 값, 논리 값. 리터럴에 해당되는 값은 특정 메모리 공간인 상수 풀(constant pool)에 저장된다. constant pool에 저장할 때, 정수는 int형으로, 실수는 double형으로 저장한다. 따라서 long이나 float 값으로 저장해야 하는 경우에는, 식별자(L, F or l, f)를 명시해야 한다.

 

✔️형(타입) 변환 type conversion : 하나의 타입을 다른 타입으로 바꾸는 것. 자바에서는 boolean형을 제외한 나머지 기본 타입 간의 타입 변환을 자유롭게 수행할 수 있다. 자료형은 각각 사용하는 메모리 크기와 방식이 다르기 때문에 서로 다른 자료형의 값이 대입되는 경우에 형 변환이 일어난다.

 

  • 묵시적 형 변환 (implicit conversion) → 자동 타입 변환
  • 암묵적 형 변환 (explicit conversion) → 강제 타입 변환

묵시적 형 변환 (Implicit conversion)

컴파일러가 자동으로 수행해주는 형 변환을 말한다. 메모리의 표현 범위가 작은 수에서 큰 수로, 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우

 

명시적 형 변환 (explicit conversion)

사용자가 타입 캐스트 연산자를 사용하여 강제적으로 수행하는 타입 변환. 변환되는 자료형을 강제적으로 명시해야 하기 때문에 자료의 손실이 발생할 수 있다.

//(변환할_타입)변환할_데이터
double num1 = 3.14;
int num2 = (int)num1

변환시키고자 하는 데이터의 앞에 괄호를 넣고, 그 괄호 안에 변환할 타입을 적는다. 자바에서는 이 괄호를 타입 캐스트(type cast)연산자라고 한다.

1️⃣ int형에 1000을 넣고 강제적으로 byte형으로 변환했기 때문에 데이터 손실 발생

2️⃣ double로 3.14를 선언하고 int형으로 변환해서 소수점이 사라지고 정수만 남음. 

3️⃣ (int)dNum + (int)fNum → (int)3.14 + (int)0.9 → 3 + 0 → 3

4️⃣ (int)(num1 + num2) → (int)(3.14 + 0.9) → (int)(4.04) → 4


[참고자료]

http://tcpschool.com/java/java_datatype_variable

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com