[Java] 변수 (variable)

SANG JONG CHOI·2022년 10월 28일
0

Java

목록 보기
3/28

- 프로그램 실행 중에 1개의 값을 저장하기 위한

- 메모리 내의 임시 기억장소 (메모리 공간)

clip_image012

변수의 특징

- 이름이 있다 - 변수명 (메모리 주소에 붙여진 이름)

- 기억장소 내에서의 주소가 있다

- 변수에 저장되는 값이 있다

- 저장되는 값의 유형(데이터 타입)이 있고 크기가 다르다

- 프로그램 실행 중에 저장된 값이 변경될 수 있다

- 주의! - 변수는 동일한 이름으로 한 번만 선언

- 두 번 선언하면 오류 (중복 선언 오류)

정수 타입 변수와 문자 타입 변수 예

clip_image014

변수는

- 저장되는 값에 따라 유형(데이터 타입)이 있고

- 데이터 타입에 따라 크기가 다르다

변수 이름을 위한 명명규칙

clip_image016

주의!!!

- 변수 이름 사이에 공백을 포함할 수 없다 (띄어쓰기 하면 안된다)

자바 예약어

- 자바 키워드

- 자바 시스템에서 지정하여 사용하는 단어 (이미 맡아놓은 단어)

- 클래스명, 메소드명, 각종 변수명으로 사용할 수 없음

- 모두 소문자로 되어 있음

clip_image018

변수의 선언

- 변수를 사용하기 위해서는 반드시 변수를 선언해야 한다.

- 선언하지 않으면 오류 발생

- 변수명 cannot be resolved to a variable (변수를 선언하지 않고 사용하는 경우의 오류 메시지)

- 변수를 선언하는 이유

- 실행 중에 필요한 공간 할당 받기 위해

선언 형식

데이터 타입 변수명;

int a;
:  정수 타입 변수 a 선언, 4바이트

char c;
: 문자 타입 변수 c 선언, 2바이트

float f;
: 실수 타입 변수 f 선언, 4바이트   

선언된 변수에 값 저장
변수명 = 값;
저장소 = 값;   

대입 연산자 = 의 오른쪽의 값을 왼쪽의 저장소에 저장

clip_image020

변수 초기화

- 변수 선언과 동시에 값 저장

clip_image022

주의!!

- 초기화 되지 않은 변수 사용 시 오류 발생

int value;  // 선언만하고 초기화 안 했음

int result = value + 10; // 변수 value에 10을 더한 결과를 변수 result에 저장

The local variable value may not have been initialized // value가 초기화 되지 않았다고 오류 발생

int value = 30; // 초기화 한 후 

int result = value + 10; // 변수 사용

상수 (Constant)

- 프로그램 실행 중에 값을 저장하기 위한 메모리 내의 임시 기억장소

- 정해진 값을 가지며, 프로그램 실행 중 값이 변하지 않음

- final 키워드 사용

- 대문자로 선언

상수의 용도

- 프로그램 실행 중에 값이 변해서는 안 되는 것을 상수로 선언

- 실수하지 않도록 상수로 선언하고 상수명으로 사용하면 잘못 입력 시 컴파일러가 오류로 알려줌

int price = 100; //변수

price = 200; // 변수는 값 변경 가능

final int PRICE = 1000; // final로 선언한 상수

PRICE = 2000; // 오류 - 상수값은 변경 불가능

PRIC * qty : 상수 스펠링 잘못 입력하면 컴파일러가 오류를 알려줌

리터럴 (Literal)

- 변수에 저장되는 값

int x = 30; // 30; 리터럴

double pi = 3.14; // 3.14; 리터럴

리터럴 종류

정수 리터럴

- 0, 75, -100 : 소수점이 없는 정수 리터럴은 10진수

- 015 : 0으로 시작하는 정수 리터럴은 8진수

- 0x15 : 0x 또는 0X로 시작하는 리터럴은 16진수

- 0xAC08

실수 리터럴

- 0.25, -3.14 : 소수점이 있는 실수 리터럴 10진수

- 대문자 E가 있는 리터럴은 10진수 지수와 가수

- 5E7 // 5 x 107

- 0.12E-5 // 0.12 x 10-5

문자 리터럴

- 작은 따옴표(‘’)로 묶은 텍스트는 하나의 문자 리터럴

- ‘A’, ‘한’, ‘\t’, ‘\n’

특수 문자 (escape 문자)

- 역 슬래시()가 붙은 리터럴

- ‘\t’ : 수평 탭을 나타내는 특수문자

- ‘\n’ : 줄 바꿈을 나타내는 특수문자(개행문자)

문자열 리터럴

- 큰 따옴표(“”)로 묶은 텍스트는 문자열 리터럴

- “대한민국”, “name”, “홍길동”, “010-1234-5678”

- “탭 만큼 이동 \t합니다” - 문자열 안에 특수문자 포함 가능

- “한 줄 내려 쓰기 \n 합니다”

논리 리터럴

- true, false 값

변수의 사용 범위

- 변수는 선언된 블록({ }) 내에서만 사용 가능

- 변수의 사용 범위, 위치를 결정해서 선언

clip_image024

clip_image026

Java의 데이터 타입

기본 타입 (기본형)

​ - 문자 타입 (1개) : char (교재에서는 정수 타입으로 분류)

​ - 정수 타입 (4개) : byte / short / int / long

​ - 실수 타입 (2개) : float / double

​ - 논리 타입 (1개) : boolean

- 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입

- 실제 값을 저장

- 참조형

- 기본 타입을 제외한 나머지 (String, 배열 등)

- 참조값(객체의 주소값) 저장

변수와 데이터 타입과의 관계

- 변수는 선언된 타입과 동일한 데이터 타입의 데이터만 저장 가능

- 즉, 정수 타입으로 선언된 변수에는 정수 타입의 값만 저장 가능

int score = 95; 

double average = 88.5; 

char familyName = '김'; 

String name = "홍길동"; 

 boolean result = true; 

데이터 타입과 메모리 사용 크기

- 데이터 타입에 따라 사용하는 메모리 크기가 다름

메모리 크기

- 메모리의 최소 단위 : bit (비트)

- 1 bit에는 0 또는 1 (1개) 저장 가능

- 8개의 bit가 모여서 1 byte 형성

- 8 bit = 1 byte

clip_image028

기본 타입의 크기

- 각 데이터 타입의 크기는 정해져 있음

clip_image030

데이터 타입의 크기의 의미

- 크기에 따라 변수에 저장할 수 있는 값의 범위가 다름

clip_image032

기본 타입의 메모리 크기와 저장되는 값의 범위

clip_image034

자바에서의 문자 표현

- 자바는 모든 문자를 유니코드로 처리

- 유니코드 (Unicode)

- 세계의 모든 문자 표현 가능

- 하나의 문자에 하나의 코드값 부여

- 0 ~ 65535 범위 2 byte 크기의 정수값

- ‘A’ ; ‘\u0041’

char 타입

- 2 byte

- 문자 타입 또는 정수 타입으로 분류

- 문자 값 또는 문자에 해당되는 정수 값 저장 가능

- 주의! : 빈 값(공백) 초기화 할 경우 ‘’하면 오류

- 스페이스를 포함시켜야 함 : ‘ ‘

- '': 스페이스 없으면 오류

정수 타입

int 타입

- 4 byte 정수 값을 저장하기 위한 타입

- 정수 연산을 하기 위한 기본 타입

- 일반적으로 정수를 저장할 때 int 타입 사용

long 타입

- 8 byte 정수 값을 저장하기 위한 타입

- 정수 값 뒤에 소문자 l 또는 대문자 L을 붙여서 사용

- 4 byte 정수가 아니라 8 byte 정수라는 것을 알려 주기 위함

- int 타입의 범위를 넘어서는 큰 정수는 반드시 l 또는 L을 붙여야 함 (안 붙이면 오류)

실수 타입

- 소수점이 있는 실수값을 저장하기 위한 타입

- float : 4 byte

- double : 8 byte

- float에 비해 double이 약 두 배의 자릿수가 배정되어 있기 때문에 더 정밀한 값 저장 가능

- 정밀도를 요구하는 계산에서는 double 사용

float average = 88.5f;
: float 타입의 리터럴에서 소문자 ``f`` 또는 대문자 ``F`` 붙임

double average = 88.5;
: double 타입이 기본이기 때문에 리터럴에 아무것도 붙이지 않음

- 정수 타입과 같은 크기이지만 저장 방식이 다르기 때문에

- 정수 타입보다 훨씬 큰 범위의 값 저장 가능

- 부동 소수점 방식으로 저장

- 부호비트 + 지수부 + 가수부

clip_image036

논리 타입 (boolean)

- 1 byte로 표현되는 논리값(true/false)을 저장할 수 있는 데이터 타입

- 상태 값에 따라 조건문과 반복문의 실행 흐름을 변경하는데 사용

타입 변환 (형변환)

- 데이터 타입을 다른 타입으로 변환하는 것

 byte ←→ int, int ←→ double

타입 변환 종류

- 자동(묵시적) 타입 변환 : Promotion

- 강제(명시적) 타입 변환 : Casting

자동 타입 변환

- 프로그램 실행 도중 자동적으로 타입 변환이 일어나는 것

- 작은 크기의 타입이 큰 크기의 타입에 저장될 때 발생

- 작은 타입이 큰 타입으로 자동 타입 변환

clip_image040

데이터 타입의 크기 순

- 바이트 크기가 아닌, 값의 표현 범위에 따라 크기 규정

clip_image042

타입 불일치오류

- 크기가 큰 타입의 값을 크기가 작은 타입의 변수에 저장할 경우 데이터의 손실 발생 - 오류 발생

clip_image044

강제 타입 변환

- 큰 크기의 타입을 작은 크기의 타입으로 강제로 변환하는 것

- 큰 타입을 작은 타입 단위로 쪼개서

- 끝의 해당되는 부분만 작은 타입으로 강제적으로 변환됨

clip_image046

- 주의 ! : 데이터의 일부 손실 발생

clip_image048

강제 타입 변환 시 주의

- 값의 손실 발생

- 타입 변환 시 값의 손실을 막기 위해 타입의 범위 확인

- 변환할 타입의 최대값 / 최소값을 벗어나는지 검사하고 타입 변환 시도

- Byte.MIN_VALUE / Byte.MAX_VALUE

- 정밀도 손실 발생

- float의 가수 보다 큰 int 값을 float으로 변환할 때 손실 발생

- int 값을 실수로 변환하려면 double 타입 사용

- 문자열(String)은 char 타입으로 강제 타입 변환 불가능

clip_image050

연산식에서 자동 타입 변환

- 연산은 같은 타입의 피연산자(operand)간에만 수행

- int 타입 변수 + int 타입 변수

- 서로 다른 타입의 피연산자 경우

- 두 피연산자 중 크기가 큰 타입으로 자동 변환

clip_image052

- 정수 연산인 경우 : int 타입이 기본 (4 byte)

- 4 byte 보다 작은 타입(byte, char, short)은 int 타입으로 변환된 후 연산 수행

profile
No error, No gain

0개의 댓글