728x90
1. 변수의 선언과 저장
- 변수
- 하나의 값을 저장할 수 있는 저장공간, 단지 값이 들어갈 수 있는 공간일 뿐이다.
- 값을 메모리주소(저장 공간 및 저장 공간 이름)에 저장을 하는데 메모리주소를 기억하기 힘들기 때문에 변수(이름)를 선언한다.
- 변수는 선언, 저장 2가지 과정을 거친다.
- (용어) 변수의 초기화: 변수에 값을 저장하는 것
- 선언
- 변수타입 변수이름; ex) int x;
- 변수타입: 변수에 저장할 값이 어떤 종류인가 지정을 한다. ex) String, int, Boolean, 등등
- 변수이름: 값을 저장하는 공간이 서로 구별될 수 있어야 하기 때문에 필요
- 변수타입 변수이름; ex) int x;
- 저장
- 우변에 원하는 값을 넣으면 된다. x = 5;
- 동일 변수명에 새로운 값을 넣으면 기존의 값을 지우고 새로 저장된 값을 남긴다.
// 선언
변수타입 변수이름;
int x;
// 저장
int x;
x = 5;
x = 3;
// 한줄 요약
int x = 5;
// 같은 타입 한줄 작성
int a = 1, b = 2;
2. 변수의 타입
- 변수의 타입
- 기본형(8개)
- 실제 값 저장
- char, boolean, byte, short, int, long, float, double
- 참고
- 기본형 종류별 크기 및 범위 - 기본형 범위에 따른 형변환은 연산자 포스팅에 기재 - 2022.12.02 - [backEnd/java] - 연산자(operator)
- 크기와 범위를 알아야 하는 이유: 오버플로우 때문
- 오버플로우: 타입이 표현할 수 있는 값의 범위를 넘어서는 것, 자동차 계기판에 9999 넘어가면 0으로 가는 것
- 참조형
- [ 어떤 값이 저장되어 있는 주소 ]를 값으로 가지는 변수
- 객체주소 저장 = 객체가 저장된 메모리 주소 저장
- 메모리에는 1byte 단위로 일련번호가 있는데 이를 메모리 주소라고 한다.
- 예시-설명
- Home이란 class (== 설계도)를 생성했고 값으로 int x와 y를 가진다. 이때 실제 객체를 생성할 때 각각의 home1과 home2는 다른 주소를 가진다. 이는 각각 메모리주소 공간을 의미하고 이 안(메모리 주소 공간 안)에는 값으로 int x, int y의 값이 들어가는 공간의 주소를 가진다. - 만약 설계도인 Home의 자료형 변수에 값이 있으면 이 값으로 초기화 하고 없으면 기본값으로 초기화 된다.
- 기본형(8개)
public class Main {
public static void main(String[] args) {
Home home1 = new Home();
Home home2 = new Home();
System.out.println("home :" + home1); // Home@129a8472
System.out.println("home2 : " + home2); // Home@1b0375b3
}
}
class Home{
int x;
int y;
}
기본형 범위 표
1byte | 2byte | 4byte | 8byte | |
논리형 | boolean (true,false) | |||
문자형 | char (0~2e16=65535) | |||
정수형 | byte (-128~127) | short (-32768~32767) | int(+- 20억 정도) | long(+- 800경 정도) |
실수형 | float(+-1.4e-45~3.4e38) | double(+- 4.9e-324~1.8e308) |
3. 상수와 리터럴
- 상수(Constant)
- 값을 저장할 수 있는 공간이지만 한 번 값을 저장하면 다른 값으로 변경 불가
- 타입은 Constant Pool이라는 상수 저장 공간에 따로 저장이 된다.
- final 변수타입 변수이름 ex) final int MAX_VALUE;
- 변수이름은 모두 대문자로 하는 것이 관례이고 뛰어쓰기 대신 _ 사용
- 값을 저장할 수 있는 공간이지만 한 번 값을 저장하면 다른 값으로 변경 불가
- 리터럴
- 모든 변수들의 값(final 포함)을 literal이라고 부른다. 큰 의미 X
- 참고 - 타입인 int, final 등을 키워드라고 하고 보통 소문자로 시작한다.
4. 리터럴의 타입과 접미사
변수타입이 존재하는 것 처럼 리터럴 타입도 존재한다.
- 변수와 리터럴 type의 불일치 및 주의점
- 변수의 범위가 literal보다 큰 경우
- 실수형은 무조건 정수형 보다 크다
- 실수형에서만 e(10의 제곱) 사용 가능 1e3 == 1000.0
- method형식의 값에는 literal type을 못 넣고 형변환 형식으로 나타내야 한다.
리터럴 타입
정수 | |
long | L |
int, byte, short | 없음 |
실수 | |
float | f |
double | d or 생략 |
논리형 | |
false, true | 없음 |
문자형 | |
'a', '1', '\n' | 없음 |
변수와 리터럴 type의 불일치 및 주의점
long big = 1234567898765L;
float pi = 3.14f;
double rate = 1.2323d;
// literal이 값이 아닐 때
float num = Math.random()f; // error. method에는 f를 못붙임
float num =(float)(Math.random()); // 형변환 형식으로 나타냄
// 변수와 literal type의 불일치가 허용되는 경우
1) 변수 type의 범위가 literal 보다 클 경우
int a = 'a'; // ok
2) 실수(float, double)은 정수(byte, short, int, long)보다 항상 큼
long b = 3.14f; // error 실수가 정수보다 항상 큼. 소수점 때문
8 byte 4byte
5. 문자 리터럴과 문자열 리터럴
- char 리터럴: 'A'; - 문자나 숫자 하나를 감싼 것
- String 리터럴: "Java"; - 두 문자 이상일 때 사용
- 주의
- Stirng은 내용 없는 빈 문자열 가능, char은 불가능
- String은 char의 나열된 class 이지만 기본형 type처럼 사용, 하지만 기본형 type이 아님
- char: 해당 문자와 연결된 숫자들이 있다.
- char =123; 같이 ''을 없앤 숫자 사용이 가능 -> 해당 수와 연결된 문자가 나옴
- 문자와 연결된 수는 char의 기본형 범위 수치 만큼 존재한다. 이외의 수 넣을 때 error 발생
기초 - 참고
더보기
print() // ()안 내용 출력, 줄바꿈 하지 않음
println() // ()안 내용 출력, 줄바꿈 함
printf("age:%d year:%d", 14, 2018) // , 쓸수 있음 %d 값에 14, 2018 순서대로 들어감
class print {
Systhem.out.println("123");
Systhem.out.print("123");
}
* 사칙연산
class print {
Systhem.out.println(5+3);
Systhem.out.println(5-3);
Systhem.out.println(5*3);
Systhem.out.println(5/3); // 1 이유: 정수타입이기 때문
}
* 용어
변수(variable) 하나의 값을 저장하기 위한 공간
상수(constant) 값을 한번만 저장할 수 있는 공간
* 상수: 관습적으로 대문자로 작성, 변수와 달리 변경할 수 없는 값이여서 final이란 keyword를 붙임
리터럴(literal) 그 자체로 값을 의미 // 프로그래밍에서 상수의 의미가 정해져 있어서 리터럴이라고 부름
키워드 final, int, if 같은 것
int year = 2041;
키워드 변수 리터럴
final int Max_VALUE = 100;
키워드 키워드 상수 리터럴
두 변수의 값 바꾸기
int x = 1;
int y = 2;
System.out.println("x="+ x + "y=" + y);
int tmp = x;
x = y;
y = tmp;
System.out.println("x="+ x + "y=" + y);
6. 문자열의 결합
- 문자열 + any type -> 문자열 - compiler가 any type을 문자열로 변환
System.out.println(1 + 1 + ""); // String 2
System.out.println("" + 1 + 1); // String 11
7. 두 변수의 값 바꾸기
- x, y 값을 서로 바꾸려면 이 중 한가지 값을 임시로 저장할 저장소를 가져야 한다.
public class Main {
public static void main(String[] args) {
int x = 1;
int y = 2;
System.out.println("x = " + x);
System.out.println("y = " + y);
int tmp;
tmp = x;
x=y;
y=tmp;
System.out.println("x = " + x);
System.out.println("y = " + y);
}
}
8. 타입 간의 변환 방법
조건
String + any type = String
char + char = int
char + int = int
System.out.println((char) ( 1 + '0') ); //(char)는 연산자이다
// 다른 type의 연산에서 범위가 큰 연산자를 따라간다. '0' -> 48
// 1 + '0' = int + char = int(1) + int(48) -> 연산자 (char)로 인해서 다시 int(49)가 char(1)로 변경
System.out.println('3' + '0'); // 문자를 숫자로 변환
System.out.println(3 + ""); // 숫자를 문자열로 변환
System.out.println('3' + ""); // 문자를 문자열로 변환
System.out.println(Integer.toString(3)); // 숫자를 문자열로 변환
System.out.println(Integer.parseInt("3")); // 문자열을 숫자로 변환
System.out.println(Double.parseInt("3")); // 문자열을 숫자로 변환
System.out.println("3".charAt(0)); //문자열을 문자로 변환
다음 발행글
2022.12.02 - [java] - 연산자(operator)
출처 - 자바의 정석 기초편