728x90
변수
변수의 이해
int num = 1;
- 자료형이 int이니 메모리에 주소 네 개를 확보해서 공간을 비워둠
- 십진수 1을 이진수로 변경해서 이 공간에 저장
- 이 공간(주소)을 변수 num에 기억시킴
System.out.println(num);
- num 변수의 값의 위치를 찾음
- 찾아낸 메모리의 시작 위치로 찾아감
- num 변수는 int형이니까 4바이트를 읽음
- int형이니까 10진수로 바꿔서 숫자로 알려줌
- char형이면 유니코드표를 보고 디코딩해서 문자로 알려줌
변수명을 짓는 방법
- 변수의 이름은 숫자로 시작할 수 없음
- $와 _ 이외의 다른 특수문자는 사용할 수 없음
- 키워드는 변수의 이름으로 사용할 수 없음
권장 사항
- 소문자로 시작
- 클래스 이름이 대문자로 시작하는 것과 구별됨
- 변수에 사용되는 데이터를 유추할 수 이쓴 이름으로 만듦
- 카멜 표기법 이용
상수
리터럴(literal)
- 문자 그대로의 값
- 문자 자체에 의미가 있어 누구나 공통으로 그 의미를 알고 의미를 변경할 수 없음
- 숫자, 문자, 논리값(true, false) 등
- 프로그램 시작 시 특정 메모리 공간인 상수 풀(constant pool)에 자동으로 로딩 됨
final 상수
final double PI = 3.14;
final int MAX_SIZE = 100;
- final 상수 이름은 대문자를 이용하여 만듦
- 카멜 표기법을 사용할 수 없기에 언더바를 이용 (스네이크 표기법)
- 다른 값을 대입받아 바꿀 수 없음 = '이 값이 최종이다'
public class Ex01_FinalUse
{
public static void main(String[] args)
{
final int MAX_NUM = 100; // 선언과 동시에 초기화
final int MIN_NUM; // 선언만
MIN_NUM = 60; // 나중에 초기화. 딱 한 번 가능.
// final 상수를 사용하는 이유
int myScore = 40;
if (myScore < MIN_NUM)
{
System.out.println("당신의 등급은 F입니다.");
}
}
}
자료형의 형변환
상수값 대입 시 형변환
public class Ex02_TypeChange1
{
public static void main(String[] args)
{
int num1 = 1; // (1)
byte num2 = 1; // (2)
byte num3 = 127;
byte num4 = 128; // (3)
short num5 = 1;
num2 = num5; // (4)
num2 = (byte)num5; // (5)
}
}
(1) : OK
(2) : 자동 형변환, 자바 컴파일러가 리터럴 상수의 값을 알고 있으므로 앞부분을 자라서 넣어줌 (int → byte)
(3) : ERROR, 상수가 변수에 저장할 수 있는 범위의 값보다 큰 값이면 에러 발생
(4) : ERROR, 타입 비교 후 에러 처리
(5) : OK, 프로그래머가 자기가 책임지겠다고 명시적으로 표시
주체 | 용어 1 | 용어 2 |
컴파일러(가 자동으로) | 자동 형변환 | 묵시적(암묵적) 형변환 |
프로그래머(가 직접) | 강제 형변환 | 명시적 형변환 |
자동 형변환의 방향
public class Ex03_TypeChange2
{
public static void main(String[] args)
{
int num1 = 2147483647; // (1) OK
int num2 = 2147483648; // (2) ERROR
long num3 = 2147483648; // (3) ERROR
long num4 = 2147483648L; // (4) OK : L을 뒤에 붙여서 '이 숫자는 long형으로 형변환 한 것임'이라고 알려줌
float num5 = 1.0; // (5) ERROR : 자바에서 실수는 기본으로 double형
float num6 = 1.0F; // (6) OK : F를 뒤에 붙여서 '이 값은 float형으로 형변환 한 것임'이라고 알려줌
double num7 = 30; // (7) int -> double 자동 형변환
}
}
연산 시 형변환
public class Ex04_Calculation1
{
public static void main(String[] args)
{
byte num11 = 1;
byte num12 = 2;
byte result1 = num11 + num12; // (1) ERROR
short num21 = 1;
short num22 = 2;
short result21 = num21 + num22; // (2) ERROR
short result22 = (short)(num21 + num22); // (3) 강제 형변환
}
}
(1) : num11 + num12 연산 시 각각 int로 형변환 된 후 더하기 연산 수행, byte타입 result1에 대입 불가
(2) : num21 + num22 연산 시 각각 int로 형변환 된 후 더하기 연산 수행, short타입 result2에 대입 불가
(3) : num21 + num22 연산 시 각각 int로 형변환 된 후 더하기 연산 수행, 결과를 강제 형변환하여 short타입으로 만듦
public class Ex05_Calculation2
{
public static void main(String[] args)
{
int num31 = 1;
int num32 = 2;
int result3 = num31 + num32; // (1) OK
long num41 = 1;
long num42 = 2;
long result4 = num41 + num42; // (2) OK
long result5 = num31 + num41; // (3) OK : 자동 형변환
float num61 = 1.0f; // (4) f 접미사
float num62 = 2.0f;
float result6 = num61 + num62; // (5) OK
double num71 = 1.0;
double num72 = 2.0;
double result7 = num71 + num72; // (6) OK
double result8 = num61 + num71; // (7) OK : 자동 형변환
}
}
(3) num31 + num41 연산 시 num31이 long형으로 형변환 후 계산
(7) num61 + num71 연산 시 num61이 double형으로 형변환 후 계산
'JAVA > 이재환의 자바 프로그래밍 입문' 카테고리의 다른 글
[Java] Ch.6 제어문 (1) | 2023.10.16 |
---|---|
[Java] Ch.5 콘솔 출력과 입력 (1) | 2023.10.13 |
[Java] Ch. 4 연산자 (1) | 2023.10.13 |
[Java] Ch.2 자료형 (0) | 2023.10.13 |
[Java] Ch.1 Hello Java World (0) | 2023.10.13 |