01 변수
변수 : 하나의 값을 저장하기 위한 공간
상수 : 값을 한번만 저장할 수 있는 공간
리터럴 : 그 자체로 값을 의미하는 것
● 변수의 타입 : 기본형과 참조형
○ 기본형 : 논리형/ 문자형/ 정수형/ 실수형
계산을 위한 실제 값을 저장함(8개)
○ 참조형 : 객체의 주소를 저장. 기본형 타입을 제외한 나머지 타입
변수의 타입을 클래스의 이름으로 사용하여 선언 -> 참조변수 타입 = 클래스 이름
새로운 클래스 작성 -> 새로운 참조형 추가되는 것
클래스이름 변수이름; // 선언하는 방법
● 상수와 리터럴
○ 상수
■ 값을 한 번 저장하면 다른 값으로 변경할 수 없는 저장공간
■ 키워트 final
■ 선언과 동시에 초기화 해야 함
■ 이름은 모두 대문자로 하는 것이 관례
○ 리터럴
■ 상수! 말 그대로 진짜 상수 ㅎㅎ
■ 상수는 리터럴에 의미 있는 이름을 붙여 코드의 이해와 수정을 쉽게 만든 것
■ 리터럴의 타입과 접미사, 접두사
□ 접미사 boolean
정수형은 기본형이 int
실수형은 기본형이 double -> 실수형 리터럴인데 접미사 없으면 double형 리터럴이다
→ L, F만 잘 신경 쓰면 된다!
□ 접두사
8 진수 : 0 / 16 진수 : 0x, 0X
■ 타입 불일치
□ 범위 넓은 타입 <- 좁은 타입 저장 허용 (반대면 에러)
■ 문자 리터럴과 문자열 리터럴
□ 문자 리터럴 : 작은 따옴표로 문자 하나를 감싼 것
- char 타입
- 문자 리터럴은 비는 것을 허용하지 않음 -> ‘ ‘ 안에 반드시 하나의 문자가 있어야 함
□ 문자열 리터럴 : 큰 따옴표로 두 문자 이상을 감싼 것
- String 타입(본래 클래스임_그래서 앞 글자가 대문자…)
- 공백 문자열을 허용 -> “ “ 안에 아무 문자로 넣지 않는 것을 허용
String name = new String(“JAVA”); // String 객체 선언해서 참조 변수 달아 사용
+로 concat 가능
String str = “ hey, hey!”;
String callname = name + str; -> “JAVA hey, hey!”
- 기본형과 참조형 구별 없이 어떤 타입의 변수도 문자열과 덧셈연산 하면 문자열이 됨
문자열 + any type = any type + 문자열 = 문자열 + 문자열 -> 문자열
““(공백 문자열)도 문자열이므로
““ + any type = any type + ““ -> 문자열
○ printf() : 형식화 된 출력
■ printf : 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력
■ 지시자
C와 마찬가지로
출력 공간 확보하면…
○ Scanner : 화면에서 입력 받기
■ Console 클래스 이용하는 것이 최신이나.. IDE에서 잘 동작하지 않음
■ Scanner 클래스 이용해서 입력 받음
import java.util.*; 추가 해 주자
Scanner scanner = new Scanner(System.in);
□ int num = scanner.nextInt(); // 정수를 입력받아서 변수 num에 저장
물론 nextFloat() 등과 같은 메서드가 있는데.. 그거 하나하나 골라가며 하기 힘드니까
□ 보통
String input = scanner.nextLine(); // 문자열을 입력 받아서 변수 input에 저장
int num = Integer.parseInt(input) // 입력 받은 것이 String 형태로 들어옴 -> 변환해줘야 됨
이런식으로 변환해주면서 필요할 때 쓰는 게 낫다
● 기본형
○ 논리형 : Boolean
○ 문자형 : char
■ 문자가 저장되는 것 같지만 문자의 유니코드(정수)가 저장됨
유니코드를 알고 싶으면 char형 변수에 저장된 값을 int형으로 형변환 하면 됨
■ 특수문자
\n 보다는 %n을 쓰는 게 낫다고 한다. %n도 줄 바꿈 문자
○ 정수형 : byte < short < int < long
■ 표현 범위 : n비트 사용하는 자료형이라면
부호가 없다면
■ 정수형 선택 기준
정수형 변수 선언 시 int타입으로 -> int범위(약 +- 20억)를 넘어서면 long
성능보다 저장공간을 절약하는 것이 중요하다면 byte, short 사용
■ 정수형의 오버플로우
□ 타입이 표현할 수 있는 값의 범위를 넘어서는 것
■ 부호 있는 정수의 오버플로우
o 부호 있는 정수는 부호비트가 0에서 1이 될 때 오버플로우 발생
■ 언더플로우 : 실수형으로 표현할 수 없는 아주 작은 값, 양의 최소 값보다 작은 값이 되는 경우
이 때 변수의 값은 0이 됨
■ 오버플로우 : 변수의 값이 무한대가 됨
■ 정밀도 : 얼마나 0에 가깝게 표현할 수 있는가
□
□ float의 정밀도 : 7자리 -> 7자리의 10진수를 오차 이 저장할 수 있다는 뜻
double의 정밀도 : 15자리
double이 float보다 더 정밀하게 값을 표현할 수 있음
○ 실수의 저장 형식
■ 부동 소수점 형식
S : 부호 E : 지수 M : 가수
부호 : 0이면 양수, 1이면 음수
지수 : 지수의 범위를 기술
가수 : 실제 값(유효값)을 저장하는 부분
float는 2진수 23자리를, double은 2진수 52자리를 저장할 수 있음
■ 부동소수점의 오차
□ 정규화 : 유효숫자를 일의 자리만 남기고 전부 소수점 아래로 하고 그 차이를 기수의 제곱의 곱으로 표현
9.123 = 1001.000111111110 –정규화 ->
만약 저 숫자가 더 길었다면 float의 경우 23자리까지만 저장되고 그 뒤로는 잘려나감
-> 만약 double 이라면 52자리까지만 저장되고 그 뒤로는 잘려나가는 것이 되는 거지
□ 지수는 기저법으로 저장된다는데.. 바이어스법이랑 같은 건지 확인해야 함
● 형 변환 (casting 캐스팅)
○ 형 변환 : 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
○ 형 변환의 종류
■ 강제 형 변환
■ 자동 형 변환
'JAVA > 이론' 카테고리의 다른 글
[java][이론] 006 변수와 메서드 (0) | 2020.07.02 |
---|---|
[java][이론] 005 클래스와 객체 (0) | 2020.07.02 |
[java][이론] 004 배열 (0) | 2020.06.29 |
[java][이론] 003 조건부 흐름 제어 및 반복문 (0) | 2020.06.25 |
[java][이론] 002 연산자 (0) | 2020.06.25 |