변수
값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름, 다른 말로 데이터가 저장되는 기억 장소의 이름이다.
변수 선언
변수에 어떤 타입의 데이터를 저장할 것인지 그리고 변수의 이름이 무엇인지를 결정한다.
int age; // 정수(int)를 저장할 수 있는 age 변수 선언
double value; // 실수(double)를 저장할 수 있는 value 변수 선언
변수 대입
대입 연산자 `=`를 사용하여 변수에 값을 대입한다.
int score; // 변수 선언
score = 90; // 값 저장
오른쪽 값인 90을 왼쪽의 변수 score에 할당한다는 의미, 위 과정을 변수 초기화라고 한다.
변수 이름 명명 규칙
1️⃣ 첫 번째 글자는 문자, '$', '_' 로 시작해야 한다. → 숫자로 시작할 수 없으며, 특수 문자가 포함되면 안됨.
2️⃣ 영어 대소문자를 구분한다.
3️⃣ 첫 문자는 영어 소문자로 시작하고 여러 단어가 합쳐진 경우, camel 표기법을 따른다.
4️⃣ 변수명의 길이 제한이 없다.
5️⃣ 자바 키워드는 변수명으로 사용할 수 없다.
변수는 크게 기본형과 참조형으로 구분된다.
변수의 기본 타입
변수의 기본 타입은 값을 변수가 직접 기억하며, 크게 정수형, 실수형, 논리형, 문자형으로 구분된다.
정수형 | 실수형 | 논리형 | 문자형 |
byte, char, short, int, long | float, double | boolean | char |
+ 소스 코드에서 프로그래머에 의해 입력된 값을 리터럴(literal)이라 한다.
정수 타입
자바에서 정수는 int로 기본 설정된다.
byte 타입
byte var1; // 1byte 정수 기억 장소
var1 = 3; // var1에 3을 할당
System.out.println(var1); // 3
short 타입
short var2; // 2byte 정수 기억 장소
var2 = 123; // var2에 123을 할당
System.out.println(var2); // 123
int 타입
int var3; // 4byte 정수 기억 장소
var3 = 123; // var3에 123을 할당
System.out.println(var3); // 123
long 타입
long var4; /// 8byte 정수 기억 장소
var4 = 12345678912345L; // var4에 12345678912345L을 할당
System.out.println(var4); // 12345678912345
+ 2행에서 L이라는 리터럴을 붙이는 이유?
기본적으로 리터럴은 변수에 저장되기 전에 임시 메모리에 저장된다. 이때, 임시 저장이 되는 데이터 타입이 정수는 int, 실수는 double이다. 정수, 실수의 범위가 위와 같이 넘어가는 경우, 식별자로 L, F를 사용해야한다.
실수 타입
자바에서 실수는 double로 기본 설정된다.
double 타입
double 타입은 8바이트 실수 기억장소이다.
double d1 = 1.2; // 8byte
d1 = 12.345; // 12.345로 덮어쓰기
d1 = 12345; // promotion 정수는 실수 기억 장소에 기억될 때, 실수로 자동 형변환이 된다.
float 타입
float 타입은 4바이트 실수 기억 장소이다.
float f1 = 12.3F;
floate f2 = (float)12.3; // casting
논리 타입
참과 거짓을 의미하는 true와 false를 저장할 수 있는 타입이다. 논리 타입의 크기는 1byte이다.
boolean bo1 = true;
boolean bo2 = false;
문자 타입
작은따옴표로 감싼 하나의 문자 리터럴(ASCII 코드표에 등록된 문자)을 저장할 수 있다.
char c1 = 'a';
문자 타입은 문자를 작은 따옴표로 감싸야 한다. 큰따옴표로 감싸게 될 경우, 오류가 발생한다.
char c1 = 'A';
System.out.println(c1 + " " + (int)c1 + " " + 65 + " " + (char)65);
// A 65 65 A
위와 같이 int 형으로 형변환하는 경우, 아스키 코드 값이 출력된다.
문자열 타입
자바에서 큰따옴표로 감싼 문자들을 문자열이라고 한다.
문자열을 변수에 저장하고자 한다면 String 타입을 사용해야 한다.
String strVar1 = new String("신민철");
String strVar2 = "신민철";
String strVar3 = "신민철";
단, 문자열은 위 다른 타입들과 달리 참조형 변수이다.
strVar2와 strVar3 변수의 경우, 문자열 리터럴을 사용하여 값을 저장하고 값이 같으므로 객체를 공유한다.
strVar1 변수의 경우, new 키워드를 통해 객체를 생성하고 새로운 객체에 값을 저장한다. 위 객체와 다른 객체를 가리키고 있다.
이스케이프 문자
이스케이프 문자를 사용하면 문자열 내부에 특정 문자를 포함시킬 수 있다. "역슬래쉬 + 문자"와 같이 사용한다.
String str1 = "name\tage\t";
// name age
이스케이프 문자 | 의미 |
\\ | \ 출력(back slash) |
\n | 줄바꿈(new line) |
\r | 해당 줄의 처음으로 이동. |
\t | 탭(tab) 키만큼 수평으로 이동. |
\b | 바로 앞의 문자를 하나 지움. |
\' | '(작은따옴표)를 출력. |
\" | "(큰따옴표)를 출력. |
아스키코드 표를 보면 10진수 65에 해당하는 값이 문자 A이고, 10진수 97에 해당하는 값이 a 임을 알 수 있다.
타입 변환
타입 변환에는 자동 형변환과 강제 형변환이 있다.
자동 형변환
자동으로 타입 변환이 일어나는 것을 말한다. 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생한다.
short ss = 10; // promotion
원래 10은 int 형이다. 자동으로 int형에서 short 형으로 타입이 변환되는 경우이다.
강제 형변환
자동 형변환과 반대로 값의 허용 범위가 큰 타입은 작은 허용 타입으로 자동 타입 변환이 될 수 없다.
int value = 10;
byte ss2 = (byte) value; //casting
int 타입은 byte 타입보다 큰 허용 범위를 가진다. 따라서 int 타입에서 byte 타입으로 자동 형변환이 되지 않는다. (byte)라는 캐스팅 연산자를 사용하여 강제 변환할 수 있다.
ASCII Table(아스키 코드표), https://kongpowder.tistory.com/114
진수 표현
진법이란 몇 개의 기본 숫자를 이용하여 수를 표시하는 방법으로 자릿값이 올라감에 따라 수가 일정하게 커지는 규칙을 이용하여 수를 표시하는 것을 말한다. ex. 2진법, 8진법, 16진법
8진수
0 ~ 7까지의 숫자로 표현한다. 8진수로 표현하기 위해서는 8진수 숫자 앞에 0을 붙여야 한다.
int i = 11;
System.out.println(013);
// 11
16진수
0 ~ 9, A ~ F를 사용하여 표현한다. 16진수로 표현하기 위해서는 16진수 숫자 앞에 0x를 붙여야 한다.
int i = 11;
System.out.println(0xb);
// 11
상수
프로그래밍 언어에서 상수는 처음 한 번 초기화한 이후, 재할당이 불가능한 변수를 말한다.
final [type] [변수명] = 값(리터럴)
기본적으로 위와 같은 형식을 따르며 상수의 이름은 가독성을 위해 대문자로 작성하는 것을 권고한다.
'Java > SE' 카테고리의 다른 글
[Java] JDK 버전 여러 개 사용하는 방법 (2) | 2025.05.08 |
---|---|
[Java] 조건문 (1) | 2025.05.08 |
[Java] 연산자 (0) | 2025.05.08 |
[Java] 소스 코드 개발 도구(Eclipse) (0) | 2025.05.06 |
[Java] 소스 코드 개발 도구(편집기) (0) | 2025.05.06 |