컴퓨터에서 자료 표현하기
2진수로 표현
0과 1로만 데이터를 저장함
bit: 컴퓨터가 표현하는 데이터의 최소 단위, 2진수 하나의 값을 저장할 수 있는 메모리의 크기
byte: 1byte = 8bit
8비트로 5를 표현하면 아래와 같다.
자료형의 종류 - 정수 표현
기본 자료형
byte와 short
- byte: 1바이트 단위의 자료형 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용
- short: 2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용
int
- 자바에서 사용하는 정수에 대한 기본 자료형
- 4바이트 단위의 자료형
- 프로그램에서 사용하는 모든 숫자는 int로 저장됨
- 32 비트를 초과하는 숫자는 long 자료형으로 처리
long
- 8바이트의 자료형
- 숫자의 뒤에 알파벳 L 또는 l을 써서 long 형임을 표시.
자료형 - 실수 표현
부동 소수점 방식
- 실수는 정수보다 정밀하기 때문에 정수와는 다른 방식으로 표현해야 함
- 부동 소수점 방식으로 실수값 0.1 표현
- 지수부와 가수부로 표현.
- 컴퓨터에서는 밑수를 2로 사용
- 정규화: 가수가 밑수보다 작은 한 자리까지 가수로 표현되는 것.
- 컴퓨터에서는 밑수가 2이므로 정규화를 하게 되면 가수부분의 첫번째 자리 숫자는 항상 1임
- 예를 들어 0.2를 표현한다고 하면, 0.4 * 2^-1 인데 이를 정규화하면 1.6 * 2^-3
float와 double
자바에서는 double이 기본형임.
근데 이렇게 지수부와 가수부로 나눠서 표현하는 부동 소수점 방식에서는 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다.
자료형 - 문자
문자도 정수로 표현한다.
- 예를 들어 A는 65
- 문자세트: 각 문자를 얼마로 표현할 것인지 코드값을 모아둔 것을 character set라고 함.
자바에서는 문자가 어떻게 표현되나요?
- 자바는 문자를 나타내기 위해 세계 표준인 UNICODE를 사용
- utf-16 인코딩을 사용 (모든 문자를 2바이트로 표시)
문자형 변수 선언과 사용하기
- 문자를 위한 데이터 타입 char
- 재부적으로 숫자로 표현되므로 숫자를 넣어도 문자가 출력될 수 있음.
아래는 한글 유니코드표
자료형 - 논리형과 자료형 없이 변수 사용하기
논리형
- true, false 두가지만 나타냄
- 1바이트를 사용함.
- 값이 존재하는지, 배열이 비었는지, 결과가 참인지 거짓인지 등을 표현
변하지 않는 상수와 리터럴, 변수의 형 변환
상수 선언
- 상수는 변하지 않는 수
- 원주율 3.14, 1년 12개월 등
- final 예약어를 사용하여 선언
- 상수를 사용하면 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉽고 혹, 변하더라도 선언한 부분만 변경하면 되므로 여러부분을 수정할 필요가 없음
리터럴
- 프로그램에서 사용하는 숫자, 문자, 노리값을 뜻함
- 리터럴은 상수 풀에 있음.
- 정수 리터럴은 int로 실수 리터럴은 double로 저장됨
- 정수의 범위가 넘어가는 경우는 L, l을 float로 사용하려는 경우는 F, f 식별자를 써줘야 함.
형 변환
- 서로 다른 자료형 간에 연산 등의 수행을 위해 하나의 자료형으로 통일하는 것.
- 묵시적 형 변환과 명시적 형변환이 있음.
- 바이트 크기가 작은 자료형에서 큰 자료형으로 형변환은 자동으로 이루어짐 (묵시적)
- 덜 정밀한 자료형에서 더 정밀한 자료형으로의 형 변환 또한 자동으로 이루어 짐.
자바의 연산자들
항과 연산자
- 항 (operand) : 연산에 사용되는 값
- 연산자 (operator) : 항을 이용하여 연산하는 기호
대입 연산자
- 변수에 다른 변수나 값을 대입하는 연산자
- 이항 연산자 중 우선 순위가 가장 낮은 연산자들
- 왼쪽 변수 = 오른쪽 변수 (또는 식, 값)
부호 연산자
- 단항 연산자
- 변수의 부호를 유지 하거나 바꿈
- 실제 변수의 부호가 변하려면 대입 연산자를 사용해야 함.
산술 연산자
- 사칙 연산자
복합 대입 연산자
- 대입 연산자와 다른 연산자가 함께 쓰임
증가, 감소 연산자
- 단항 연산자
- 변수의 값을 1더하거나 1뺄 때 사용
- 연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라짐
- 문장의 끝(;)을 기준으로 연산 시점을 생각해야 함.
관계, 논리 연산자
관계 연산자
- 이항 연산자
- 연산의 결과가 true, false로 반환 됨, 비교연산자 라고도 함.
- 조건문, 반복문의 조건식으로 많이 사용됨.
논리 연산자
- 관계 연산자와 혼합하여 많이 사용됨.
- 연산의 결과가 true, false로 반환 됨.
논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가 (short circuit evaluation)
- 노리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true
- 앞 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음
- 논리 합 (||)은 두 항의 결과가 모두 false일 때만 결과가 false
- 앞 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음.
조건 연산자, 비트 연산자
조건 연산자
- 상ㅁ항 연산자
- 조건식의 결과가 true인 경우와 false인 경우에 따라 다른 결과가 수행됨
- if를 간단히 표현할 때 사용할 수 있음.
비트 연산자
- 대입연산자와 다른 연산자가 함께 쓰임
- 마스크: 특정 비트를 가리고 몇 개의 비트 값만 사용할 때
- 비트켜기: 특정 비트들만을 1로 설정해서 사용하고 싶을 때
- 예) & 00001111 ( 하위 4비트 중 1인 비트만 꺼내기)
- 비트끄기: 특정 비트들만을 0으로 설정해서 사용하고 싶을 때
- 예) | 11110000 (하위 4비트 중 0인 비트만 0으로 만들기)
- 비트 토글: 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을때
연산자 우선순위
Java 14부터 지원되는 Switch문
- 간단하게 쉼표로 조건 구분
- 식으로 표현하여 반환 값을 받을 수 있음. 리턴값이 없는 경우는 오류.
- yield 키워드 사용
package ch16; public class SwitchCaseUpTest { public static void main(String[] args) { int month = 3; int day = switch (month) { case 1, 3, 5, 7, 8, 10,12 -> { System.out.println("한 달은 31일입니다."); yield 31; } case 4,6,9,11 -> { System.out.println("한 달은 30일입니다."); yield 30; } case 2 ->{ System.out.println("한 달은 28일입니다."); yield 28; } default->{ System.out.println("존재하지 않는 달 입니다."); yield 0; } }; System.out.println(month + "월은 " + day + "일입니다."); } }
for문의 조건식 내부 문장들은 생략이 가능하다.
- 초기화식 생략: 이미 이전에 값이 초기화 되어 for 내부에서 값을 지정할 필요가 없는 경우
- 조건식 생략: 반복 수행에 대한 조건이 수행문 내부에 있는 경우
- 증감식 생략: 증감식에 대한 연산이 복잡하거나 다른 변수의 연산 결과값에 결정되는 경우
- 무한 반복
중간에 멈추는 break문, 무시하고 계속 진행하는 continue문
break문 사용하기
- 감싸고 있는 제어문의 블록을 빠져 나오는 기능 (switch문에서도 사용)
- 반복문에서는 주로 조건문(if)와 같이 사용하여 조건에 해당되는 경우 반복 수행을 멈추고 반복문 외부로 수행이 이동
- 여러 반복문이 중첩되어 있는 경우엔 break문이 포함되어 있는 반복문만 빠져나옴.
continue문 사용하기
- 반복문 내부에서 조건문과 같이 사용하며, 조건이 맞는 경우 이후 반복문 블럭 내부의 다른 수행문들을 수행하지 않음.