JAVA - 변수
변수란?
데이터를 저장할 수 있는 메모리 공간을 의미하며, 상자의 개념으로 이해하면 쉽다.(데이터를 담는 상자)
하나의 변수에 하나의 값만 저장할 수 있다.
왜 사용해야 하는가?
1. 변수에 값을 저장하지 않으면 한번 사용된 값을 매번 새로 입력해야 하므로, 값을 저장해 두고 재사용하기
위해서 변수를 사용한다.
2. 변수에 값을 저장해 두면 값을 변경하기 쉽고 편하다.
변수의 선언과 초기화 방법
데이터 타입 : 변수에 기억시킬 데이터의 형태
변수명 : 기억장소 주소를 대신하여 사용할 이름
초기 값 : 변수를 선언한 후 기억시킬 값
선언 후 초기화
int a;
a = 1;
선언 및 초기화
int a = 1;
'int'를 데이터 타입, 'a'를 변수명, '='를 연산자, '1'을 값이라 한다.
사용되는 영역에 따라 선언과 초기화의 방식이 달라진다.
예시
int a;
for(int i = 0; i < 10; i++){
a += i;
}
선언규칙
JAVA에서는 변수 이름을 정하는데 규칙이 있다.
1. 변수 이름은 숫자로 시작할 수 없고, '$', '_'를 제외한 특수문자를 사용할 수 없다.
2. JAVA에서는 대소문자를 구분한다. 따라서 뜻이 같아도 대소문자가 다른 변수는 별개의 변수다.
예시 | 가능 / 불가능 |
1name, #name | 불가능 |
name2, _name2 | 가능 |
int a; A = 10; |
불가능 |
int b; b = 20; |
가능 |
데이터 타입
변수에 어떤 데이터가 담겨있는지 정의한다.
정수형, 실수형, 문자형, 논리형, 참조형이 있으며, 각각의 데이터를 담을 수 있는 변수의 종류가 다르다.
왜 사용해야 하는가?
1. 변수, 함수의 정의, 형변환을 위해 사용된다.
2. 변수에 어떤 데이터가 들어가 있는지 명시하기 위해서 사용된다.
ex) 정수는 int, 실수는 double, 문자는 char
3. 메모리 공간을 효율적으로 사용하기 위해 사용된다.
사용방법
데이터타입 변수명 = 값;
정수형 데이터 타입
자료형 | 바이트 | 비트 | 저장 가능한 값의 범위 |
byte | 1 | 8 | -128 ~ 127 |
short | 2 | 16 | -32,768 ~ 32767 |
int | 4 | 32 | -2,147,483,648 ~ 2,147,483,647 |
long | 8 | 64 | -2**(63) ~ 2**(63)-1 |
정수를 저장할 때 사용되는 데이터 타입이며, 바이트는 크기, 비트는 2진수의 자릿수를 뜻한다.
byte a = 1;
short b = 2;
int c = 4;
long d = 8; //long d = 2147483648L;
위와 같이 따옴표 없이 선언한다.
long형 같은 경우 JAVA 컴파일러는 기본적으로 숫자 값을 int 값으로 인식하기 때문에 값이 int의 저장 가능한 값의 범위보다 클 경우 오류가 발생하게 된다. 이때 값 뒤에 L을 붙여 long형으로 명시함으로써 이런 오류를 방지할 수 있다.
실수형 데이터 타입
자료형 | 바이트 | 비트 | 저장 가능한 값의 범위 | 오차범위 |
float | 4 | 32 | 1.4 x 10**(-45) ~ 3.4 x 10**(38) | 소수 이하 6자리 |
double | 8 | 64 | 4.9 x 10**(-324) ~ 1.8 x 10**(308) | 소수 이하 15자리 |
실수를 저장할 수 있는 데이터 타입이다.
실수형 데이터를 표현할 때 범위보다 중요한 것이 바로 정밀도다.
컴퓨터가 실수를 처리할 때는 기본적으로 오차가 존재하는데 데이터를 표현하는 비트 수에 따라 오차는 줄어든다.
float e = 3.21f;
double f = 3.99;
위와 같이 선언할 수 있으며, float 같은 경우 값 뒤에 f를 넣어 명시적으로 이 변수는 float 데이터 타입을 가지고 있다는 것을 알려야 하며, f를 넣지 않으면 오류가 발생한다.
문자형 데이터 타입
자료형 | 바이트 | 비트 | 저장 가능한 값의 범위 |
char | 2 | 16 | 0 ~ 2**(16) - 1(유니코드 0~65535) |
문자를 저장할 수 있는 데이터 타입이다.
JAVA에서는 유니코드를 사용해 전 세계의 다양한 문자와 언어를 표현하기 때문에 char 자료형은 2 바이트를 사용한다.
char 데이터 타입은 JAVA에서 문자와 숫자의 양면성을 가진다. (매우 중요!)
숫자 : 유니코드에서 정의된 숫자 문자, 아스키코드 저장 가능
char g = '공';
위와 같이 선언할 수 있으며, 문자를 변수에 대입할 때는 작은따옴표(' ')를 사용한다. 큰 따옴표(" ")를 사용하면 오류가 발생한다.
논리형 데이터 타입
자료형 | 저장 값 |
boolean | true / false |
true와 false를 저장하는 데이터 타입이다.
0과 1로 표현하기 때문에 실제로 필요한 메모리는 1bit이지만 JAVA에서 데이터를 다루는 최소 크기는 byte이기 때문에 실제로는 1byte의 크기를 가지고 있다.
참조형 데이터 타입
객체를 참조하는 데이터 타입을 의미하며, 객체의 메모리 주소를 저장한다.
String
문자열을 저장하는 데 사용되는 데이터 타입으로 JDK에 내장된 객체를 참조한다.
이때 String은 객체이자 데이터 타입이다.
String 변수명 = "값"; 의 형태로 사용되는 것이 일반적이나,
String text = new String(); 의 형태로도 사용이 가능하다.(권장하지않음)
형변환
변수나 상수의 데이터 타입을 변경하는 것을 의미한다.
형변환에는 자동 형변환과 명시적 형변환이 있다.
왜 사용해야 하는가?
연산 작업을 위해 사용된다.
1. 문자를 숫자로 변환해 산술 연산, 비교 연산하기 위해 사용한다.
2. 숫자인 경우 데이터 타입이 정수형인지 실수형인지 확인하고 다를 경우 변환하여 연산한다.
자동 형변환
별도의 작업을 하지 않아도 자동으로 알맞은 타입으로 변환해 주는 형변환이다.
조건
1. 크기가 작은 데이터 타입에서 큰 데이터 타입으로 변환할 때
ex) int ㅡ> long
2. 데이터의 손실이 없을 때
명시적 형변환
사용자가 변수의 자료형을 강제로 바꾸는 것을 의미하며, 값 앞에 (데이터 타입)을 입력하여 바꾼다.
강제로 데이터 타입을 변경하면 데이터의 손실이 발생할 수 있다.
int a = 10;
byte b = (byte)a;
자동 형변환이 가능한 경우
데이터 타입 | 자동 형변환이 가능한 데이터 타입 |
byte | short, int, long, float, double |
short | int, long, float, double |
int | long, float, double |
long | float, double |
float | double |
double | 불가능 |
char | int, long, float, double |
boolean | 불가능 |
정수 <ㅡㅡ> 실수
int a = 10;
float b = 2.71;
float c = b; ==> 2
int d = (int)b; ==> 10.0
정수에서 실수로 명시적 형변환을 사용하면 10.0으로 표시된다.
실수에서 정수로 자동 형변환되면 소수점을 제외한 2로 표시된다.
정수 <ㅡㅡ> 문자
int a = 65;
char b = '다';
int c = b;
char d = (char)a;
char e = 43;
정수에서 문자로 형변환은 명시적 형변환을 사용해 정수를 유니코드로 해석하여 대문자 A로 표시된다.
문자에서 정수로 형변환은 자동으로 형변환되며, 해당 문자의 유니코드 값을 표시한다.
변수 e의 값 43은 유니코드에서 '+'에 해당하므로 문자 '+'로 표시된다.
상수
프로그램에서 변하지 않는 고정된 값을 가진 변수를 상수라 하며, 값을 변경하지 못하도록 강제하기 위해 사용한다.
final 데이터타입 변수명 = 값;
위치에 따른 분류 {}
전역 변수
클래스 변수(static)와 인스턴스 변수가 전역변수에 해당한다.
클래스 전역에서 사용 가능한 변수로, 클래스의 모든 메서드에 접근할 수 있다.
지역 변수
일반 변수와 매개변수가 지역변수에 해당한다.
함수나 메서드 내부에 선언된 변수로 해당 함수 안에서만 사용 가능하다. 해당 함수가 실행되는 동안에만 존재한다.
코드 정리
charAt(i) | 문자열의 i의 위치한 char(문자)를 반환한다. |
this | 전역변수를 지정함 |