변수(variable)란?
변수란 데이터를 저장하는 메모리 공간입니다. Java에서 변수를 사용하려면 선언하고, 필요에 따라 초기화해야 합니다.
변수 선언과 초기화
변수 선언은 데이터 타입과 변수명을 지정하여 이루어집니다. 데이터 타입은 저장하고자 하는 값의 종류에 맞게 지정해주면 됩니다. 이렇게 타입을 지정하면 메모리의 빈 공간에 데이터 타입 크기 만큼의 저장공간이 생기게 됩니다. 변수명은 이 저장공간에 이름을 붙여 사용할 수 있게 해줍니다.
int x; // 정수형(int) 변수 선언
x = 10; // 변수 초기화 (값 할당)
int x = 10; // 선언과 초기화
변수 네이밍 규칙
컴파일러에서 제한되는 네이밍 규칙
- 영어와 숫자, _, $만 사용 가능합니다.
- 대소문자는 구분됩니다.
- 숫자로 시작하면 안됩니다.
- 예약어는 변수명으로 사용할 수 없습니다. (예: class, int)
권장하는 규칙
- 변수의 첫 글자는 항상 소문자로 합니다.
- 여러 단어로 이루어진 경우 카멜 표기법을 사용합니다. (예: userName)
- 상수의 이름은 모두 대문자 지어야합니다. 여러 단어로 이루어진 경우 _로 구분합니다. (예: MAX_VALUE)
- 변수명은 의미 있게 지어야합니다. 변수 이름은 가능한 구체적으로 지어서 변수의 의도를 분명히 드러나게 해야합니다.
데이터 타입
Java의 데이터 타입은 기본형과 참조형으로 나눌 수 있습니다.
기본형 (Primitive Type)
기본형은 메모리 상에 실제 값을 저장하는 타입입니다. 총 8가지가 있으며, 각각 열할과 범위가 다릅니다.
- 정수형
- byte: 1바이트, -128 ~ 127
- short: 2바이트, -32,768 ~ 32,767
- int: 4바이트, -2,147,483,648 ~ 2,147,483,647
- long: 8바이트, 매우 큰 정수 저장 (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
- 실수형
- float: 4바이트, 소수점 이하 자릿수를 다룸
- double: 8바이트, float 보다 큰 소수점을 다룸 (일반적으로 double을 사용)
- 문자형
- char: 2바이트, 한 글자를 표현 (예: 'A', '1')
- 논리형
- boolean: 1비트, true 또는 false
💁 1byte = 8bit 입니다. 정수형의 경우 가질 수 있는 값의 범위는 '-2^(n-1) ~ 2^(n-1) - 1' (n은 bit수)입니다.
int형의 경우 4byte(32bit)이기 때문에 '-2^31 ~ 2^31 - 1' 범위를 갖습니다. 때문에 값을 연산하다가 범위를 넘어서게 되면 잘못된 값을 얻을 수가 있습니다. 이럴 땐 long 타입으로 변수를 선언하는 것이 좋습니다.
참조형 (Reference Type)
참조형 변수는 실제 데이터를 메모리의 어떤 위치(주소)에 저장하고 있는지를 저장합니다. 주요 참조형 타입은 클래스, 배열, 인터페이스입니다. 참조변수는 null 또는 객체의 주소를 값으로 갖습니다.
User user = new User(); // 객체는 참조형 타입
int[] numbers = {1, 2, 3} // 배열은 참조형 타입
String name = "yeo"; // String은 클래스 기반 참조형 타입
리터럴과 상수
- 리터럴(literal): 변수에 할당되는 값 자체를 의미합니다. 예를 들어 int x = 10;에서 10이 리터럴입니다.
- 상수(constant): 값을 한 번 할당하면 바뀌지 않는 변수입니다. 변수 타입 앞에 final 키워드로 선언하면 됩니다. 상수는 값을 변경하는 것이 허용되지 않기 때문에, 선언과 동시에 초기화 해주어야 합니다. 상수의 이름을 모두 대문자로 짓는 것이 관례입니다.
final int MAX_SPEED = 500
리터럴에도 타입
정수형 리터럴
정수형에서 long의 리터럴 타입은 접미사에 L, l을 붙이면 됩니다. int의 리터럴은 정수형의 기본 자료형이기 때문에 접미사를 붙이지 않아도 됩니다.
실수형 리터럴
실수형에서 float 타입 리터럴은 접미사 f를 double 타입에서는 접미사 d를 붙입니다. 정수형에서 int가 기본형인거 처럼 실수형에서는 double 타입이 기본 자료형이기 때문에 접미사가 생략이 가능합니다.
타입 허용
리터럴의 타입은 데이터 타입과 일치시켜도 되지만, 저장 범위가 넓은 데이터 타입에 좁은 리터럴 타입을 저장하는 것은 Java에서 허용됩니다.
int x = 10; // int 데이터 타입에 int형 리터럴 10 저장
long y = 20; // long 데이터 타입에 int형 리터럴 20 저장
double z = 3.14f;// double 데이터 타입에 float형 리터럴 3.14f 저장
int x = 10L; // Error. int 데이터 타입에 long형 리터럴 10L 저장 불가
float y = 3.14; // Error. float 데이터 타입에 double형 리터럴 3.14 저장 불가
문자(열) 리터럴
char형 리터럴 타입은 작은 따옴표로 문자 하나를 감싸서 표현할 수 있습니다. 두 문자 이상인 문자열의 경우 큰 따옴표로 감싸서 표현할 수 있습니다. 덧셈 연산자(+)로 문자열을 더하게 되면 다른 문자열로 반환됩니다.
int result1 = 1 + 2; // 3
String result2 = 1 + "2"; // "12"
String result3 = 1 + 1 + ""; // "2"
String result4 = "" + 1 + 1; // "11"
String result5 = "Java" + 17; // "Java17"
String result6 = null + ""; // "null"
형변환 (Type Casting)
형변환은 데이터 타입을 다른 데이터 타입으로 바꾸는 작업을 말합니다. 형변환 타입은 두 가지로 나눌 수 있습니다.
- 자동 형변환: 컴파일러가 자동으로 처리하는 형변환, 데이터 크기나 범위가 호환될 때 자동으로 발생합니다.
- 강제 형변환: 개발자가 명시적으로 형변환, 강제 형변환 시 데이터 손실이 발생할 수 있기 때문에 조심해야 합니다.
// 자동 형변환
int i = 10; // int형이 double형으로 자동 형변환
double d = a;
int i = 100; // int형이 long형으로 자동 형변환
long l = c;
float f= 12.3f; // float형이 double형으로 자동 형변환
double d = f;
// 강제 형변환
double d = 9.87; // double형이 int형으로 강제 형변환 (소수점 버림)
int i = (int) d;
long l = 100L; // long형이 int형으로 강제 형변환 (큰 수인 경우 int 범위 넓으면 손실)
lint i = (int) l;
double d = 12.3456789;
float f = (float) d; // double형에서 float형으로 강제 형변환
'Java' 카테고리의 다른 글
Java 객체지향 프로그래밍의 특징과 개념 이해 (0) | 2024.09.16 |
---|---|
Java 조건문과 반복문: if, switch, for, while 그리고 break와 continue (0) | 2024.09.10 |
Java란 무엇인가? (0) | 2024.09.05 |
Java Apache POI로 엑셀(Excel) 파일 조작하기 (0) | 2023.07.06 |
Java 리플렉션(Reflection API): 동적 코드 조작과 메타프로그래밍을 위한 Refelction API (0) | 2023.07.05 |