반응형
변수(variable)란?
- 변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다.
이름 생성 규칙
- 변수의 이름은 영문자(대소문자), 숫자, 언더스코어(_), 달러($)로만 구성할 수 있다.
- 변수의 이름은 숫자로 시작할 수 없다.
- 변수의 이름 사이에는 공백을 포함할 수 없다.
- 변수의 이름으로 자바에서 미리 정의된 키워드(keyword)는 사용할 수 없다.
변수 종류
기본 타입(primitive type)
- 자바에서는 여러 형태의 타입을 미리 정의하여 제공하고 있는데, 이것을 기본 타입(primitive type)이라고 하며 실제 연산에 사용된다.
- 자바의 기본 타입은 모두 8종류가 제공되며, 크게는 정수형, 실수형, 문자형 그리고 논리형 타입으로 나눌 수 있다.
정수형(byte, short, int, long)
- 자바에서 정수란 부호를 가지고 있으며, 소수 부분이 없는 수를 의미한다.
- 자바에서 정수형 타입 중 기본이 되는 타입은 int형으로, 내부적으로 정수형 중에서도 int형의 데이터를 가장 빠르게 처리한다.
- 정수형 데이터의 타입을 결정할 때에는 반드시 자신이 사용하고자 하는 데이터의 최대 및 최소 크기를 고려해야 한다.
- 해당 타입이 표현할 수 있는 범위를 벗어난 데이터를 저장하면, 오버플로우(overflow)나 언더플로우(underflow)가 발생해 전혀 다른 값이 저장될 수 있기 때문이다.
오버플로우(overflow)란 해당 타입이 표현할 수 있는 최대 범위보다 큰 수를 저장할 때 발생하는 현상을 가리킨다.
언더플로우(underflow)란 해당 타입이 표현할 수 있는 최소 범위보다 작은 수를 저장할 때 발생하는 현상을 가리킨다.

실수형(float, double)
- 자바에서 실수란 소수부나 지수부가 있는 수를 가리키며, 정수보다 훨씬 더 넓은 표현 범위를 가진다.
- 실수형 타입 중 기본이 되는 타입은 double형이다.
- 실수형 데이터의 타입을 결정할 때에는 표현 범위 이외에도 반드시 유효 자릿수를 고려해야 한다.
- 자바뿐만 아니라 모든 프로그래밍 언어에서 실수를 표현하는 방식은 오차가 발생할 수 밖에 없는 태생적 한계를 지닌다.

문자형(char)
- 자바에서 문자형 데이터란 작은 정수나 문자 하나를 표현할 수 있는 타입을 의미한다.
- 컴퓨터는 2진수밖에 인식하지 못하므로 문자도 숫자로 표현해야 인식할 수 있는데, 자바에서는 유니코드(unicode)를 사용하여 문자를 표현한다.
C언어와 C++에서는 아스키코드(ASCII)를 사용하여 문자를 표현하고 자바는 유니코드(unicode)를 사용하여 문자를 표현한다. 아스키코드(ASCII)는 영문 대소문자를 사용하는 7비트의 문자 인코딩 방식이다. 아스키코드는 문자 하나를 7비트로 표현하므로, 총 128개의 문자를 표현할 수 있다. 아스키코드는 영문자와 숫자밖에 표현 못 하는 반면에, 유니코드는 각 나라의 모든 언어를 표현할 수 있다. 유니코드는 문자 하나를 16비트로 표현하므로, 총 65,536개의 문자를 표현할 수 있다.

논리형(boolean)
- 논리형은 참(true)이나 거짓(false) 중 한 가지 값만을 가질 수 있는 불리언 타입을 의미한다.
- boolean형의 기본값은 false이며, 기본 타입 중 가장 작은 크기인 1바이트의 크기를 가진다.
참조형(reference type) 변수
- 참조형 변수는 8개의 기본형 변수를 사용하여 사용자가 직접 만들어 사용하는 변수를 의미한다.
변수 선언 방법
- 자바에서는 변수를 사용하기 전에 반드시 먼저 변수를 선언하고 초기화해야 한다.
변수 선언만 하는 방법
- 먼저 변수를 선언하여 메모리 공간을 할당받고, 나중에 변수를 초기화하는 방법이다.
- 하지만 초기화되지 않은 변수는 해당 메모리 공간에는 알 수 없는 쓰레깃값만이 들어가 있으므로 반드시 초기화한 후에 사용해야 한다.
- 자바에서는 프로그램의 안전성을 위해 초기화하지 않은 변수는 사용할 수 없도록 하고 있으므로, 초기화되지 않은 변수를 사용하려면 자바 컴파일러는 오류를 발생시킨다.
- 아래 예제처럼 정수를 저장하기 위한 메모리 공간을 할당받으면, 반드시 해당 타입의 데이터만을 저장해야 한다. 만약 다른 타입의 데이터를 저장하려고 하면, 자바 컴파일러는 오류를 발생시킨다.
타입 변수이름;
int num; // 변수의 선언
System.out.println(num); // 오류 발생
num = 20; // 변수의 초기화
System.out.println(num); // 20
변수 선언과 동시에 초기화하는 방법
- 자바에서는 변수의 선언과 동시에 그 값을 초기화할 수 있다
- 선언하고자 하는 변수들의 타입이 같다면 이를 동시에 선언할 수도 있지만, 선언하고자 하는 변수의 타입이 서로 다르면 동시에 선언할 수 없다.
1. 타입 변수이름[, 변수이름];
2. 타입 변수이름 = 초깃값[, 변수이름 = 초깃값];
int num1, num2; // 같은 타입의 변수를 동시에 선언함
double num3 = 3.14; // 선언과 동시에 초기화함
double num4 = 1.23, num5 = 4.56; // 같은 타입의 변수를 동시에 선언하면서 초기화함
double num1, num2; // 같은 타입의 변수를 동시에 선언
num1 = 1.23, num2 = 4.56; // 하지만 이미 선언된 여러 변수를 동시에 초기화할 수는 없음
상수(constant)란?
- 상수(constant)란 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간이다. 하지만 상수가 변수와 다른 점은 프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없다는 점이다.
- 자바에서는 final 키워드를 사용하여 상수를 선언하며, 이러한 상수는 선언과 동시에 반드시 초기화해야 한다.
- 자바에서 상수의 이름은 일반적으로 모두 대문자를 사용하여 선언하며, 여러 단어로 이루어진 이름의 경우에는 언더스코어(_)를 사용하여 구분한다.
final int AGES = 30;
리터럴(literal)이란?
- 리터럴(literal)이란 그 자체로 값을 의미한다.
타입에 따른 리터럴
- 정수형 리터럴(Integer literals)은 123, -456과 같이 아라비아 숫자와 부호로 직접 표현된다.
- 실수형 리터럴(floating-point literals)은 3.14, -45.6과 같이 소수 부분을 가지는 아라비아 숫자로 표현된다.
- 논리형 리터럴(boolean literals)은 true나 false로 표현된다.
- 문자형 리터럴(character literals)은 'a', 'Z'와 같이 작은따옴표('')로 감싸진 문자로 표현된다.
- 문자열 리터럴(string literals)은 "자바", "홍길동"과 같이 큰따옴표("")로 감싸진 문자열로 표현된다.
- null 리터럴(null literals)은 단 하나의 값인 null로 표현되며, null이란 아무런 값도 가지고 있지 않은 빈 값을 의미한다.
리터럴 타입 접미사(literal type suffix)
- 리터럴 뒤에 추가되어 해당 리터럴의 타입을 명시해주는 접미사를 리터럴 타입 접미사(literal type suffix)라고 한다.

타입 변환(type conversion)
- 자바에서는 boolean형을 제외한 나머지 기본 타입 간의 타입 변환을 자유롭게 수행할 수 있다.
- 자바에서 다른 타입끼리의 연산은 우선 피연산자들을 모두 같은 타입으로 만든 후에 수행된다.
- 메모리에 할당받은 바이트의 크기가 상대적으로 작은 타입에서 큰 타입으로의 타입 변환은 생략할 수 있다. 하지만 메모리에 할당받은 바이트의 크기가 큰 타입에서 작은 타입으로의 타입 변환은 데이터의 손실이 발생한다. 따라서 상대적으로 바이트의 크기가 작은 타입으로 타입 변환을 할 경우 자바 컴파일러는 오류를 발생시킨다.
타입 변환의 종류
묵시적 타입 변환(자동 타입 변환, implicit conversion)
- 묵시적 타입 변환이란 대입 연산이나 산술 연산에서 컴파일러가 자동으로 수행해주는 타입 변환을 가리킨다.
- 자바에서는 데이터의 손실이 발생하지 않거나, 데이터의 손실이 최소화되는 방향으로 묵시적 타입 변환을 진행하며, 자바에서는 데이터의 손실이 발생하는 대입 연산은 허용하지 않는다.
- 자바에서는 타입의 표현 범위에 따라 다음과 같은 방향으로 자동 타입 변환이 이루어진다.
byte형 → short형 → int형 → long형 → float형 → double형
char형 ↗
double num1 = 10; // double형 변수에 int형 데이터 대입, int형 데이터가 double형으로 자동 타입 변환
// int num2 = 3.14; // int형 변수가 표현할 수 있는 범위보다 더 큰 double형 데이터를 대입하므로 데이터의 손실, 에러 발생
double num3 = 7.0f + 3.14; // 데이터의 손실이 최소화되도록 float형 데이터가 double형으로 자동 타입 변환
System.out.println(num1); // 10.0
System.out.println(num3); // 10.14
명시적 타입 변환(강제 타입 변환, explicit conversion)
- 명시적 타입 변환이란 사용자가 타입 캐스트 연산자(())를 사용하여 강제적으로 수행하는 타입 변환을 가리킨다.
(변환할타입) 변환할데이터 // 데이터의 앞에 괄호(())를 타입 캐스트(type cast) 연산자라고 한다
- 자바에서 산술 연산을 수행하고 얻는 결괏값의 타입은 언제나 피연산자의 타입과 일치해야 한다.
int num1 = 1, num2 = 4;
double result1 = num1 / num2; // 원래 0.25가 반환되야하지만, int형으로 자동 타입 변환되어 0이 반환
double result2 = (double) num1 / num2; // 피연산자 중 하나를 double형으로 강제 타입 변환, 나머지도 double형으로 자동 타입 변환
System.out.println(result1); // 0.0
System.out.println(result2); // 0.25
Reference
반응형
'Language > Java' 카테고리의 다른 글
[Java] 자바 배열 - 1차원, 2차원, 다차원 배열 (feat. 메모리 구조) (0) | 2024.04.07 |
---|---|
[Java] 자바 제어문 - If, Switch, While, For, Continue, Break, Label (0) | 2024.04.06 |
[Java] 자바 연산자 - 산술, 대입, 증감, 비교, 논리, 비트, 삼항, instanceof (feat. 우선순위) (1) | 2024.04.06 |
[Java] 자바 기본 문법 - main(), 명령문, 주석, 입출력 (0) | 2024.04.05 |
[Java] 자바 개요 - 정의, 역사, 실행 과정 (feat. 자바 가상 머신) (1) | 2024.04.03 |