변수(Variable)란?
하나의 값을 저장할 수 있는 메모리 공간
변수의 선언
변수의 선언 이유 값(data)을 저장할 공간을 마련하기 위해서 |
변수의 선언 방법: 변수 타임 변수 이름; (int age;) -> 정수(int) 타입의 변수 age 선언 |
변수에 값 저장하기
int age; // 정수(int) 타입의 변수 age를 선언
age = 25; // 변수 age에 25를 저장
변수의 초기화 – 변수에 처음으로 값을 저장하는 것
int x = 0; // 변수 x를 선언 후, 0으로 초기화
int y = 5; // 변수 y를 선언 후, 5로 초기화
-> int x = 0, int y = 5; //위의 두줄을 한 줄로
- 변수의 종류: 클래스 변수, 인스턴스 변수, 지역 변수(읽기 전에 반드시 초기화해줘야 함)
변수의 값 읽어 오기
- 변수의 값이 필요한 곳에 변수의 이름을 적는다.
int year = 0, age = 14;
year = age + 2000; -> year = 14 + 2000 -> year = 2014;
age = age + 1; -> 변수의 값을 1 증가시키는 방법
package ch01;
public class VarEx1 {
public static void main(String[] args) {
int x= 4, y=2;
System.out.println(x+y);
System.out.println(x-y);
System.out.println(x*y);
System.out.println(x/y);
}
}
변수의 타입
1) 변수의 타입은 저장할 값의 타입에 의해 결정된다.
2) 저장할 값의 타입과 일치하는 타입으로 변수를 선언한다.
char ch = ‘가’; // char는 문자 타입
double pi = 3.14; // double은 실수 타입
값의 타입
기본형과 참조형
1) 기본형(Primitive type)
문자: char
숫자: 정수(byte, short, int, long) / 실수(float, double)
논리: Boolean(true, false)
- 실제 값을 저장
2) 참조형(Reference type)
- 기본형을 제외한 나머지(String, System 등)
- 무한대
- 메모리 주소를 저장(4 byte 또는 8 byte)
Date today; // 참조형 변수 today를 선언
today = new Date( ); // 객체를 생성하고 today에 객체의 주소를 저장
기본형(Primitive type)
1) 논리형(Boolean): true와 false 중 하나의 값으로 갖으며, 조건식과 논리적 계산에 사용된다.
2) 문자형(char): 문자를 저장하는 데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.
3) 정수형: 정수 값을 저장하는 데 사용된다. 주로 사용하는 것은 int와 long(아주 큰 정수)이며, byte는 이진 데이터를 다루는 데 사용되며, short은 c언어와의 호환을 위해 추가되었다.(잘 안 씀)
4) 실수형: 실수 값을 저장하는 데 사용된다. float와 double이 있다.
종류와 크기 | 1(byte) | 2(byte) | 4(byte) | 8(byte) |
논리형 | Boolean | |||
문자형 | char | |||
정수형 | byte | short | int(default) | long |
실수형 | float | double(default) |
-> 1 bit = 2진수(0과 1, 2개) / 2 bit = 4개(00, 01, 10, 11)
-> 1 byte = 8bit = 2의8 제곱
-> 2 byte = 16bit = 2의 16 제곱
기본형의 표현 범위
-> 1 bit 2개(0과 1) -> 2 bit 4개 (00, 01, 10, 11)
예)byte인 경우(1byte = 8bit)
n비트로 표현할 수 있는 값의 개수: 2의 n제곱 개 -> 1 byte는 8bit -> 2의 8 제곱 => 256개
n비트로 표현할 수 있는 부호 없는 정수의 범위: 0 ~ 2의 n제곱-1=> 0 ~ 255
n비트로 표현할 수 있는 부호 있는 정수의 범위: -2의 n-1제곱 ~ 2의 n-1제곱 -1
type의 크기만 알고 있으면 각 정수의 범위를 쉽게 계산할 수 있음
ex) 1 byte = 8 bit이어서 n = 8
-> 부호 없는 byte의 범위 -> 0 ~ 255 / 부호 있는 byte의 범위 -> -128 ~ 127
S는 부호 비트라고 하고 1bit이다. 0은 양수 1은 음수를 나타낸다.
-> 같은 2byte(16bit)라도 short는 부호가 있어서 표현 범위가 다름!
- int -> 4bytes -> 32bits -> 2^32 -1 (0이 있어서) : 32개의 비트공간으로 표현할 수 있는 숫자의 최대값은 2^32-1
- 정수는 양의 정수, 음의 정수가 있기 때문에 맨 앞의 한 칸은 +, - 사인으로 쓰기로 함
- 음의 정수 -> -2^31 (0은 굳이 표현하지 않는다.) / 양의 정수 -> 2^31-1
- 정수를 표현할 수 있는 값의 범위 약 -20억 ~ 20억
자료형 | 저장 가능한 값의 범위 | 정밀도(오차없는 자리수) | 크기 | |
bit | byte | |||
float | 1.4E-45 ~ 3.4E38 | 7자리 | 32 | 4 |
double | 4.9E-324 ~ 1.8E308 | 15자리 | 64 | 8 |
-> 같은 크기의 정수형인 int와 달리 float 타입은 값을 부호, 지수, 가수로 나눠서 저장되기 때문에 범위는 더 넓어지지만, 대신 실수형은 원래 저장하려던 값과 저장된 값의 오차가 생길 수 있음
변수, 상수, 리터럴
변수: 하나의 값을 저장하기 위한 공간
상수(constant): 한 번만 값을 저장 가능한 변수
리터럴(literal): 그 자체로 값을 의미하는 것(=기존의 상수)
int score = 100;
score = 200;
final int MAX = 100; //MAX는 상수
MAX = 200; // 에러
char ch = ‘A’;
String str = “abc”;
리터럴의 접두사와 접미사
종류 | 리터럴 | 접미사(대소문자 구별 xx) |
논리형 | false, true | 없음 |
정수형 | 123, 0b0101, 077, 0xFF, 100L | L(long 타입) |
실수형 | 3.14, 3.0e8, 1.4f. 0x1.0p-1 | f(float), d(double 생략가능) |
문자형 | ‘A’, ‘1’, ‘\n’(개행문자) | 없음 |
문자열 | “ABC”, “123”, “A”, “true” | 없음 |
Boolean power = true;
char ch = ‘A’,
String str = “ABC”;
int i = 100; // 10진수
int oct = 0100; //8진수
int hex = 0x100; //16진수
int binary = 0b0101 //2진수
-> 접두사도 대소문자 구별 xx
long l = 10_000_000_000L; // 100억 -> 20억이 넘는 값은 long타입에 넣어 줌
long l = 100; // OK
float f = 3.14f; //생략 불가
double d = 3.14d; //d 생략 가능
10. -> 10.0 / .10 -> 0.10 è 둘 다 double 형(d가 생략되어 있음)
10f -> 10.0f è float형
le3 // 기호 e는 10의 n제곱을 의미 -> 기호 e는 실수형에 사용됨 -> 10의 3 제곱에 실수형인데 접미사 생략 -> double형 1000.0
변수와 리터럴의 타입 불일치
1) 범위가 ‘변수 > 리터럴’인 경우 OK
int i = ‘A’; ->A의 문자코드인 65가 저장됨 // int > char
long l = 123; // long > int
double d = 3.14f; // double > float
2) 범위가 ‘변수 < 리터럴’인 경우 ERROR
int i = 30_000_000_000; //int의 범위(20억 벗어남)
long l = 3.14f // long < float
float f = 3.14; // float < double
3) byte, short 변수에 int리터럴 저장 가능(단 변수의 타입의 범위 이내이어야 함
byte b = 100; //OK. byte의 범위(-123~127)에 속함
byte b = 128; //에러. byte의 범위를 벗어남
문자와 문자열
char ch = ‘A’; char ch = ‘AB’; //에러 String s = “ABC”;
String은 class!
String s1 = “AB”; String s2 = new String(“AB”); //두 식이 같음
String s = “A”; // OK , String s =””; //빈 문자열도 ok(empty string)
char ch= “”; //에러
String s1 = “A” + “B”; //AB
숫자를 문자열로 변환하는 방법 “” + 7 -> “” + “7” -> “7”
문자열 결합은 왼쪽에서 오른쪽으로
문자열 + any type -> 문자열 / any type + 문자열 -> 문자열
두 변수의 값 교환하기
int x = 10, y = 20;
int = tmp; //빈 변수인 tmp 선언
tmp = x; // x의 값을 tmp에 저장
x = y; // y의 값을 x에 저장
y = tmp; // tmp의 값을 y에 저장
'멀티캠퍼스 풀스택 과정 > Java의 정석' 카테고리의 다른 글
자바의 정석1-6 반복문 (0) | 2021.12.29 |
---|---|
자바의정석1-5 조건문 (0) | 2021.12.29 |
자바의 정석1-4 타입 변환과 연산자(operator) (0) | 2021.12.28 |
자바의 정석1-3 화면 입출력 (0) | 2021.12.28 |
자바의 정석1-1 자바의 개념 (0) | 2021.12.28 |