Java 2일차
변수와 타입
변수
변수란
- 하나의 값을 저장할 수 있는 메모리 공간
- 다양한 타입의 값을 저장할 수 없고 한 가지 타입의 값만 저장
선언
- 어떤 타입의 데이터를 저장할 지, 변수 이름이 무엇인지 결정
- 같은 타입의 변수는 콤마(,)를 이용해 한번에 선언할 수 있음
- 규칙
- 첫번째 글자는 문자이거나 $, _ 이어야 하고 숫자로 시작할 수 없음
- 영어 대소문자 구분
- Camel Case
- 문자 수 제한 없음
- 자바 예약어 사용 불가
사용
- 변수에 값을 저장하고 읽는 행위
- 저장
- 대입 연산자(=) 사용
-
우측의 값을 좌측 변수에 저장한다는 의미
int score; // 변수 선언 score = 90; // 값 저장 int score = 90;
- 리터럴 : 상수와 같은 의미지만 프로그램에서 상수는 다른 뜻이 있어 구분하기 위해 사용
- 정수 리터럴
- 소수점 없는 정수 리터럴은 10진수로 간주 ⇒ 0, 75, -100
- 0으로 시작되는 리터럴은 8진수로 간주 ⇒ 02, -04
- 0x, 0X로 시작하고 0~9 숫자나 A, B, C, D, E, F 또는 a, b, c, d, e, f로 구성된 리터럴은 16진수로 간주 ⇒ 0x5, 0xA, 0xB3, 0xAC08
- 실수 리터럴
- 소수점 있는 리터럴은 10진수 실수로 간주 ⇒ 0.25, -3.14
- E 또는 e가 있는 리터럴은 10진수 지수와 가수로 간주 ⇒ 5E7 = 5 10^7, 0.12E-5 = 0.1210^-5
- 문자 리터럴(char)
-
작은 따옴표로 묶은 텍스트 ⇒ ‘A’, ‘한’, ‘\t’, ‘\n’
이스케이프 문자 용도 유니코드 ‘\t’ 수평 탭 0x0009 ‘\n’ 줄 바꿈 0x000a ‘\r’ 리턴 0x000d ‘\”’ 큰따옴포 0x0022 ‘\” 작은따옴표 0x0027 ‘\’ \ 0x005c ‘\u16진수’ 16진수 유니코드 0x0000 ~ 0xffff
-
- 문자열 리터럴(string)
- 큰따옴표로 묶은 텍스트 ⇒ 문자열 리터럴
- 문자열 리터럴 내에서 이스케이프 문자 사용 가능
- 논리 리터럴(boolean)
- true, false
변수값 읽기
- 변수는 초기화 되어야 읽을 수 있음
변수 사용 범위
- 중괄호 내에서 선언되고 사용 ⇒ 클래스, 생성자, 메소드
- 로컬 변수 : 블록 내에서 선언된 변수
- 변수는 선언된 블록 내에서만 사용 가능
데이터 타입
기본 타입
종류 | 타입 | 메모리 사용 크기 | 저장되는 값 범위 |
---|---|---|---|
정수 | byte | 1byte | -128 ~ 127 |
char | 2byte | 0~2^16-1 | |
short | 2byte | -32,768 ~ 32,767 | |
int | 4byte | -2147483648 ~ 2147483647 | |
long | 8byte | 2^63 ~ 2^63-1 | |
실수 | float | 4byte | (+/-)1.4E-45 ~ (+/-)3.4028235E38 |
double | 8byte | (+/-)4.9E-324 ~ (+/-)1.7976931348623157E3087 | |
논리 | boolean | 1byte | true, false |
- 정수 타입
- byte
- 색상 정보, 파일 또는 이미지 등의 이진 데이터 처리
- 정수 중 가장 작은 범위 (-128 ~ 127) ⇒ 0이 포함되어 128이 아닌 127
- short
- C 언어와의 호환을 위해 사용. 자바에서는 잘 안씀
- int
- 일반적으로 쓰임
- long
- int 타입의 저장 범위를 넘으면 소문자 l이나 대문자 L을 붙임
- 실수 타입
- 기본값 : double
- 가수 표현에 있어서 double가 약 두 배의 자리수 ⇒ 더 정밀한 계산
- byte
- 문자
- 자바는 모든 문자를 유니코드로 처리
- 하나의 유니코드 : char 타입(2byte)
- 유니코드는 음수가 없기 때문에 char 타입에 음수 안됨
- 작은 따옴표 문자, 유니코드 정수값 저장
- 문자열(string)
- 클래스 타입, 참조 변수
- 문자열이 변수에 직접 저장되는 것이 아닌 string 객체가 생성되고 string 변수는 string객체의 번지를 참조
타입 변환
자동 타입 변환
- 프로그램 실행 도중 자동적으로 타입 변환이 일어나는 것
- 작은 크기를 가지는 타입이 큰 크기를 가진 타입에 저장될 때
- 에외 : 음수가 저장될 수 있는 byte 타입을 char 타입으로 자동 변환시킬 수 없다.
- 연산식
- 서로 다른 타입일 경우 크기가 큰 타입으로 자동 변환
강제 타입 변환
- 큰 데이터 타입을 작은 데이터 타입으로 쪼개서 저장하는 것
- 캐스팅 연산자() 사용
- 강제 반환해도 값이 보존되어야 함
- 입력값을 변환할 때 값의 손실이 발생하면 안됨
- 타입.MAX_VALUE, 타입.MIN_VALUE로 검사
연산자
종류
종류 | 연산자 | 피연산자 수 | 산출값 | 기능 설명 |
---|---|---|---|---|
산술 | +, -, *, /, % | 이항 | 숫자 | 사칙연산, 나머지 계산 |
부호 | +, - | 단항 | 숫자 | 음수, 양수 |
문자열 | + | 이항 | 문자열 | 두 문자열 연결 |
대입 | =, +=, -=, *=, /=, %=, &=, ^=, |= , «=, »=, »>= |
이항 | 다양 | 우변의 값을 좌변의 변수에 대입 |
증감 | ++, — | 단항 | 숫자 | 1만큼 증가 / 감소 |
비교 | ==, !=, >, <, >=, <=, instanceof | 이항 | boolean | 값 비교 |
논리 | !, &, | , &&, ||
|
단항, 이항 | boolean | 논리 연산 |
조건 | (조건식) ? A : B | 삼항 | 다양 | 조건에 따라 A 또는 B |
비트 | ~, &, | , ^ |
단항, 이항 | 숫자, boolean | 비트 연산 |
쉬프트 | », «, »> | 이항 | 숫자 | 비트를 좌우측으로 밀어서 이동 |
연산 방향, 우선순위
연산자 | 연산 방향 | 우선순위 |
---|---|---|
증감(++, —), 부호(+,-), 비트(~), 논리(!) | 좌 ← 우 | 높음 |
산술(*, /, %) | 좌 → 우 | |
산술(+, -) | 좌 → 우 | |
쉬프트(«, », »>) | 좌 → 우 | |
비교(<, >, <=, >=, instanceof) | 좌 → 우 | |
비교(==, !=) | 좌 → 우 | |
논리(&) | 좌 → 우 | |
논리(^) | 좌 → 우 | |
논리(| ) |
좌 → 우 | |
논리(&&) | 좌 → 우 | |
논리(|| ) |
좌 → 우 | |
조건(? :) | 좌 → 우 | |
대입(=, +=, -=, *=, /=, %=, &=, ^=, |= , «=, »=, »>=) |
좌 ← 우 | 낮음 |
- 괄호를 사용해 우선순위 표시하자 ⇒ 최우선 연산
단항 연산자
- 부호 연산자(+, -)
- 양수 및 음수 표시
- boolean, char 타입 제외한 나머지 기본 타입에 사용
- 부호 연산자 산출 타입 ⇒ int
- 증감 연산자(++, —)
- ++ / — 피연산자 : 다른 연산을 수행하기 전에 증감
- 피연산자 ++ / — : 다른 연산 수행 후 증감
- 논리 부정 연산자(!)
- boolean 타입에만 사용
- true, false 반대로 출력
- 비트 반전 연산자
- 정수 타입(byte, short, int, long) 피연산자에만 사용
- 2진수로 표현했을 때 1과 0을 반전
- 부호 비트를 포함해서 모든 비트가 반전되기 때문에 부호가 반대인 새로운 값 산출
- int 타입 산출
이항 연산자
- 산술 연산자(+, -, /, *, %)
- 사칙연산, 나머지 구하기
- 가장 큰 숫자 타입으로 변환 후 연산
- char 타입도 정수 타입이므로 산술 연산 가능(int 타입으로 변환) ⇒ ‘A’ + 1 = 66
- 정확한 숫자 계산을 위해서는 int 형으로 바꿔 계산하고 다시 원래 형태로 변환
- NaN, Infinity
- 어떤 수와 연산하더라도 NaN, Infinity 값 산출 ⇒ 데이터 엉망
- NaN은 falsy 값이기 때문에 Double.isNaN() 메소드로 검사
- 문자열 연결 연산자(+)
- 문자열 서로 연결
- 비교 연산자(<, <=, >, >=, ==, !=)
- boolean 타입 산출
- == : 모든 타입에 사용
- 대소 연산자 : boolean 타입 제외한 기본 타입에 사용
- 이진 포맷의 가수를 사용하는 모든 부동소수점 타입은 0.1 정확히 표현할 수 없음 ⇒ 0.1 == 0.1f → false
- float 강제 변환 후 비교 연산 or 정수로 변환해서 비교
- String 객체의 문자열이 같은지 비교 ⇒ equals() 메소드 사용
-
논리 연산자(
&&
,||
,&
,|
,^
,!
)- boolean 타입에만 사용
-
&&
/&
: &&는 앞의 피연산자가 false면 뒤의 피연산자 평가하지 않고 바로 false 출력. &는 두 피연산자 모두 평가해서 산출 -
||
/|
:||
는 앞의 피연산자가 true면 뒤의 피연산자 평가하지 않고 바로 true.|
는 두 피연산자 모두 평가해서 산출
- 비트 연산자(
&
,|
,~
,<<
,>>
,>>>
)- 정수 타입 연산
- int 타입 산출
- 비트 이동 연산자(«, », »>)
- 1 « 3 : 32비트 전체를 왼쪽으로 3비트 이동. 왼쪽 3비트 버려지고 맨 오른쪽에 새로 생기는 3비트는 0으로 채움 ⇒ 8
- -8 » 3 : 32비트 전체 오른쪽으로 3비트 이동. 오른쪽 3비트 빌려서 버려지고, 맨 왼쪽에 새로 생기는 3비트는 최상위 부호 비트와 동일한 값 ⇒ -1
- -8 »> 3 : 오른쪽 3비트 버려지고, 맨 왼쪽에 새로 생기는 3비트 무조건 0으로 채워짐 ⇒ 536870911
- 대입 연산자
- 오른쪽 피연산자 값 좌측 피연산자인 변수에 저장
- 모든 연산자 중 가장 낮은 연산 순위
- 삼항 연산자
- 조건식 ? 값 또는 연산식(true) : 값 또는 연산식(false)