본 글은 책 자바의 정석을 ref 하며, 요약한 내용입니다.
✔ 자바는 객체지향 언어이다. (상속, 추상화, 캡슐화, 다형성)
✔ 풍부한 JAVA API 라이브러리를 제공한다.
✔ 자바 app은 JVM과 상호작용한다.
JVM
소프트웨어로 구현된 하드웨어
자바가 실행되기 위해선 JVM이 필수적
운영체제에 종속적이다. (Write once, Run everywhere)
JRE(java runtime environment)
JVM + 자바 프로그램을 실행하는 도구들
* JRE가 설치되어 있다면 어떤 환경에서든지 자바 소스 파일을 실행할 수 있다.
* 개발이 필요없는 단계라면 JRE만으로 프로그램을 실행할 수 있다.
JDK(java devlopment kit)
JRE(java runtime environment) + JAVA API + 컴파일러.. (개발에 필요한 도구)
자바 프로그램 실행 과정
자바 app은 실행할 때 main 메서드를 시작점으로 한다.
Sample.java -> (javac.exe)(컴파일러) -> Sample.class -> (java.exe)(인터프리터) -> 프로그램 실행
변수
메모리 공간에 이름을 붙여주는 것
변수 타입에 맞게 메모리를 확보
변수의 초기화
이전에 사용했던 garbage value가 남아 있을 수 있어서 사용하기 이전에 초기화해주는 것이 바람직
* 전역 변수는 초기화 생략 가능
* 지역 변수는 반드시 초기화
변수의 종류
기본형 - boolean, byte, short, int, long, float, double, char
참조형 - 배열, 열거, 클래스, 인터페이스
* boolean을 제외한 나머지 7개의 기본형 타입은 서로 변환이 가능
* char 은 유니코드 체계를 위해 2byte (유니코드 정수 값이 저장된다)
* char과 shrot는 같은 2byte이지만 범위가 다르다.
* JVM 스택 연산에 4byte를 사용하므로 byte, short보다 int 형이 유리하다.
* 정수형 타입 크기를 벗어나면 overflow가 발생한다.
* 실수형 타입 float - 정밀도 7자리, double - 15자리
String 결합
한쪽이 String 이고, 연산자가 + 로 연결되어있다면 다른 한쪽도 String으로 만든 후 결합
printf
%5d - 5칸 오른쪽정렬
%-5d - 5칸 왼쪽 정렬
%14.10f - 14칸. 소수점 이하 10칸
word
cpu가 한 번에 처리할 수 있는 데이터의 크기 32bit, 64bit
2진법, 8진법, 16진법
2진법 - 컴퓨터는 전기가 흐르면 1 흐르지 않으면 0
2진법을 이용하여 10진법, 8진법, 16진법 변환
실수의 진법 변환
소수부에 2를 계속 곱하여 0이 될 때까지 반복, 결과의 정수부 나열
2의 보수
N의 보수: 자릿수를 한자리 증가시키는, 더해서 0으로 만드는 수
ex) 숫자 73의 10의 보수 = 37 (73과 37은 보수관계)
✔ 보수에서는 자릿수가 중요하다.
만약 10진수가 2자리를 표현한다면 73과 37은 보수관계가 맞다. (73+37 = 100) "1"00 표현 불가
하지만 10진수가 3자리를 표현한다면 73과 937이 보수관계이다. (73+937 = 1000) "1"000 표현 불가
2의 보수에서는 MSB가 0이면 양수, 1이면 음수로 구분한다.
4자리 이진수에서는 0011의 2의 보수는 1101 (0011과 1101은 보수관계)
4자리 2의 보수 체계에서 1101은 십진수 -3의 역할을 한다.
십진수로 3인 0011의 반대 값은 -3인 1101
-3일 때 3의 보수(1101)를 구하고 더하면 -3의 효과를 낸다.
* 2의 보수 구하기 = 1의 보수 +1
오버플로우
4 자릿수의 bit체계에서 0111과 0001을 더하면 1000이 된다. MSB가 1이므로 음수다. 1000은 -8이다.
7+1의 결과는 8인데, 결과가 -8이 나왔다. 이를 표현 숫자 범위를 벗어난 오버플로우라고 한다.
인코딩과 디코딩
인코딩 - 문자를 숫자(지정된 바이트)로
디코딩 - 숫자(지정된 바이트)를 문자로
디코딩을 하기 위해선 어떻게 인코딩했는지 알아야 한다.
UTF-8 UTF-16
UTF-8 -> 가변크기 1~4 byte 표현 (웹문서에서 유리, 아스키 코드와 호환됨, 대부분 프로그램의 Default)
* 110XXXXX 10XXXXXX 10XXXXXX
* 한 문자를 표현할 때 3Byte를 써야하는 경우 -> 110을 시작으로하고, 나머지 Byte는 10으로 시작.
* 110으로 문자 시작을 알림
UTF-16 -> 고정크기 2byte 표현 (자바에서 사용)
형 변환
기본형과 참조형 간의 형 변환은 불가능
더 큰 타입으로 대입될 때는 묵시적 형 변환, 작은 타입으로 대입될 때는 값이 손실되며 명시적 형 변환
정수형 -> 실수형 : 정밀도 제한으로 오차 발생
실수형 -> 정수형 : 정수부만 저장
* byte < short < int < long < float < double
'프로그래밍 > 자바' 카테고리의 다른 글
6장, 7장 객체지향 프로그래밍 (0) | 2022.07.28 |
---|---|
3장 연산자, 4장 조건문과 반복문, 5장 배열 (0) | 2022.07.28 |
[JAVA] 컬렉션 프레임 워크 <-> 배열 변환 (0) | 2022.07.13 |
[JAVA] 자바 메소드 참조 (0) | 2022.04.12 |
[JAVA]자바 익명 클래스와 람다식 정리 (0) | 2022.04.11 |