1. 변수(variable)란?
- 수학 개념: 변하는 수?
- 컴퓨터 개념: 하나의 값을 저장할 수 있는 메모리 공간을 말한다.
- 1byte 단위로 메모리 주소가 있다.
2. 변수의 선언
(1) 변수의 선언 이유
- 값(data)을 저장할 공간을 마련하기 위해서
(2) 변수의 선언 방법
- 변수타입 변수이름;
ex) int age // 정수(int)타입의 변수 age를 선언
3. 변수에 값 저장하기
(1) 변수에 값 저장하기('='는 등호가 아니라 대입)
int age; // 정수(int)타입의 변수 age를 선언
age = 25; // 변수 age에 25를 저장
int age = 25; // 위의 두 줄을 한 줄로
(2) 변수의 초기화 - 변수에 처음으로 값을 저장하는 것
[주의] 지역 변수는 읽기 전에 꼭! 초기화해야 함.(변수에는 클래스 변수, 인스턴스 변수, 지역변수가 있다-나중에 설명)
int x = 0; // 변수 x를 선언 후, 0으로 초기화
int y = 5; // 변수 y를 선언 후, 5로 초기화
int x = 0, int y = 5; //위 두 줄을 한 줄로
4. 변수의 값 읽어오기
(1) 변수의 값이 필요한 곳에 변수의 이름을 적는다.
int year = 0, age = 14;
year = age + 2000;
-> year = 14 + 2000;
-> year = 2014;
age = age + 1;
-> age = 14 + 1;
-> age = 15;
System.out.println(age); //출력
->System.out.println(15);
- 변수가 필요한 이유
- 변수가 없다면 (4*2), (4/2), (4+2), (4-2) 등의 같은 4와 2를 적었는데, 이 숫자를 바꾸고 싶다면 하나하나 다 다시 바꿔야할 것이다.
- 하지만, int x = 4, y = 2; 로 변수를 적용해준다면 변수에 있는 숫자만 바꾸면되니 수고로움을 덜 수 있다.
5. 변수의 타입
(1) 변수의 타입은 저장할 값의 타입에 의해 결정된다.
(2) 저장할 값의 타입과 일치하는 타입으로 변수를 선언
char(문자형) ch = '가'(문자);
double(실수형) pi = 3.14(실수);
6. 값의 타입 종류(8개의 기본형)
- 값(문자, 숫자)
- 문자 - char
- 숫자(정수, 실수)
- 정수 - byte, short, int, long
- 실수 - float, double
- 논리 - boolean(true, false)
6-1. 기본형과 참조형
- 기본형(Primitive type)
- 오직 8개 (boolean, char, byte, short, int, long, float, double)
- 참조형(Reference type)
- 무한개
- 기본형을 제외한 나머지 (String, System 등)
- 메모리 주소를 저장(4 byte(32bit JVM=40억) 또는 8 byte(64bit JVM = 160경))
Date today; // 참조형 변수 today를 선언
today = new Date(); // today에 객체의 주소를 저장
6-2. 기본형(Primitive type) - 종류와 크기
- 논리형 : true와 false중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용된다.
- 문자형 : 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.
- 정수형 : 정수 값을 저장하는데 사용된다. 주로 사용하는 것은 ing와 long이며,
byte는 이진 데이터를 다루는데 사용되며,
short은 c언어와의 호환을 위해 추가되었다.(잘 안쓰임)
- 실수형 : 실수 값을 저장하는데 사용된다. float와 double이 있다.
종류 크기 | 1 | 2 | 4 | 8 |
논리형 | boolean | |||
문자형 | char | |||
정수형 | byte | short | int | long |
실수형 | float | double |
7. 변수, 상수, 리터럴
- 변수(variable) : 하나의 값을 저장하기 위한 공간(변경 O)
- 상수(constant) : 한 번만 값을 저장 가능한 변수(변경 X)
- 리터럴(literal) : 그 자체로 값을 의미하는 것(기존 수학의 상수와 같은 뜻)
ex) int score = 100;
score = 200; // 가능
final int MAX = 100; // MAX는 상수
MAX = 200; // 에러
char ch = 'A';
String str = "abc";
8. 리터럴의 접두사와 접미사
종류 | 리터럴 | 접미사(대소문자 구별안함) |
논리형(boolean) | false, true | 없음 |
정수형(byte, short, int, long) | 123, 0b0101, 077, 0xFF, 100L | L |
실수형(float, double) | 3.14, 3.0e8, 1.4f, 0x1.0p-1 | f, d |
문자형(char) | 'A', '1', '\n' | 없음 |
문자열(String) | "ABC", "123", "A", "true | 없음 |
boolean power = true;
char ch = 'A';
String str = "ABC";
byte b = 127;
byte b = 128; // 에러
int i = 100; // 10진수
int oct = 0100; // 8진수
int hex = 0x100; //16진수
long 1 = 10_000_000_000L; //100억 L 생략불가. _는 큰 숫자 알아보기 쉬우라고 넣는 것
long 1 = 100; //L 생략 가능 OK
float f = 3.14f; //f 생략 X(생략하면 double 타입이 된다)
double d = 3.14d; //d 생략 가능
10. -> 10.0
.10 -> 0.10 (double)
10.f -> 10.0f (float)
1e3 -> 1000.0d (e=10의 n 제곱)
9. 변수와 리터럴의 타입 불일치
(1) 범위가 '변수 > 리터럴' 인 경우, 불일치해도 된다(그릇이 더 큰 경우)
int i = 'A'; // int > char
long 1 = 123; // long > int
double d = 3.14f ; // double > float
(2) 범위가 '변수 < 리터럴' 인 경우, 에러(그릇이 더 작은 경우)
int i = 30_0000_0000 ; //int의 범위(±20억) 벗어남
long l = 3.14f ; // long < float
float f = 3.14; // float < double
(3) byte, short 변수에 int 리터럴 저장가능
byte b = 100; // 가능, byte의 범위(-128~127)에 속함
byte b = 128; // 에러. byte의 범위를 벗어남
예제
package sec01_datatype;
public class TypeCasting_1 {
public static void main(String[] args) {
// 명시적 형변환 or downCasting
// 사이즈가 큰자료형에서 작은 자료형으로 변환될때
int value1 = (int)5.3;
System.out.println(value1); // 5
long value2 = (long)10;
System.out.println(value2); // 10
float value3 = (float)5.8; // float라고 안 써주면 문제가 된다.
System.out.println(value3); // 5.8
double value4 = (double)16; //16.0
System.out.println(value4);
long value5 = 10L;
long value6 = 10l; //소문자로 써도 되는데 1이랑 비슷해서 대문자로 쓰기 권장
float value7 = 5.8F;
float value8 = 5.8f; //대문자나 소문자나 똑같다
System.out.println(value5); // 10
System.out.println(value6); // 10
System.out.println(value7); // 5.8
System.out.println(value8); // 5.8
// 묵시적 형변환 or UpCasting 작은사이즈타입에서 큰사이즈타입으로 변환시
float value9 = 3; //int -> float
long value10 = 5; //int -> long
double value11 = 7;
System.out.println(value9); // 3.0
System.out.println(value10); //5
System.out.println(value11); // 7.0
byte value12 = (byte)128;
System.out.println(value12); // -128 .129:-127
int value13 = (int)3.5;
System.out.println(value13); // 3
byte c = (byte)130;
System.out.println(c); //-126
System.out.println((int)5.6+3.5); //8.5
System.out.println((int)5.6+(int)3.5); //8
System.out.println((int)(5.6+3.5)); //9
System.out.println(7/4); //1
System.out.println((double)3/2); //1.5
System.out.println((double)(3/2)); //1.0
}
}
'코딩 공부 > JAVA' 카테고리의 다른 글
[JAVA] 자바 클래스-메서드에 대하여 (0) | 2022.04.27 |
---|---|
[JAVA] 자바 참조자료형에 대해(배열(1차,2차), String)-자바 완전 정복 5 (0) | 2022.04.25 |