객체 지향 언어
객체 지향 프로그래밍이란 여러 객체의 협력을 통해 프로그램을 구현하는 것.
유지보수가 쉽고 확장성이 좋다.
프로그램이 안정적이다.
포인터를 사용하지 않아서 메모리를 직접 제어할 수 없다.
동적 메모리 수거를 프로그래머가 하지 않고 GC(Garbage Collector)를 이용해서 메모리를 효율적으로 관리.
오픈 소스
최적화된 알고리즘 라이브러리를 제공하는 JDK가 있다. 오픈 소스를 연동하여 더 풍부한 기능을 빠르게 구현할 수 있다는 장점이 있다.
모두 클래스 기반
자바 프로그램은 모두 클래스 기반으로 구성된다.
클래스란 객체를 소스 코드로 나타낸 것.
// 2진수 13
0b1101
// 8진수 13
0015
// 16진수 13
0x0d
MSB(Most Significant Bit)
맨 앞에 있는 비트, 부호비트라고도 한다.
초기화
변수를 선언 후 처음으로 값을 대입하는 경우
자바에서 제공하는 자료형은 기본 자료형과 참조 자료형이 있다.
참조 자료형은 클래스형이다. 자바에서 제공하는 것도 있고 사용자가 직접 만들 수도 있다.
boolean, byte, short, char, int, float, long, double
프로그램이 실행되어 정수 값을 연산할 때 4 bytes를 기본 단위로 사용한다. 그리고 결과 값도 int형으로 저장된다. 즉, 정수의 기본형은 int 형이고, int 형 보다 작은 byte, short 같은 경우 연산을 할 때 내부적으로 int 형으로 변하게 된다.
문자를 사용할 때는 작은 따옴표('')를 사용한다.
문자열을 사용할 때는 큰 따옴표("")를 사용한다. 문자열의 끝에는 항상 널 문자('\0')가 있다.
문자와 문자열은 전혀 다르다.
'A'는 정수 값 65로 정해진 문자이고, "A"는 "A\0"와 같다.
자바에서 문자열을 다룰 때는 String 클래스를 사용한다.
char형은 음수 값을 표현할 수 없다. char형으로 선언한 변수에 음수 값을 대입하면 오류가 발생한다.
자바는 모든 문자를 2바이트로 표현하는 UTF-16 인코딩을 사용한다.
UTF-8은 각 문자마다 1바이트에서 4바이트까지 사용하여 문자를 나타낸다. UTF-16에 비해 메모리 낭비가 적고 전송 속도가 빠르다. 이러한 특성으로 UTF-8은 인터넷에서 많이 사용한다.
부동 소수점 방식
가수 부분과 지수 부분을 나누어서 실수를 나타내는 방식
0.1 = 1.0 * 10^(-1)
가수 부분: 1.0
지수 부분: -1
float형과 double형
float형: 부호 1비트 + 지수부 8비트 + 가수부 23비트
doublt형: 부호 1비트 + 지수부 11비트 + 가수부 52비트
자바에서 실수는 double형을 기본으로 사용한다. 그래서 float형을 사용할 때는 식별자 f나 F를 사용해야한다.
float형에 비해 double형이 더 정밀하게 실수를 표현할 수 있다.
부동 소수점 값을 연산하면 약간의 오차가 발생할 수 있다. 약간의 오차를 감수하고라도 더 넓은 범위의 실수 값을 표현하기 위해 부동 소수점 방식을 사용한다.
boolean형 한 가지 뿐이다.
true, false 두 가지 값만 갖는다.
지역 변수 자료형 추론(local variable type inference)
자료형을 쓰지 않고 변수를 사용하는 것
var num = 10;
var dNum = 10.0;
var str = "hello";
var를 사용할 때 유의할 점
1. 한번 선언한 자료형 변수를 다른 자료형으로 사용할 수 없다.
2. 지역 변수만 가능하다.
변하지 않는 수. final 예약어를 사용해서 선언한다. 대문자를 사용한다. 여러 단어를 연결 할 때 _기호를 사용한다. 한 번 선언한 상수는 변하지 않기 때문에 선언과 동시에 초기화하는 것이 일반적이다. 상수는 초기화 이후에 값을 변경할 수 없다.
프로그램에서 사용하는 모든 숫자, 문자, 논리값을 일컫는 말이다.
프로그램이 시작할 때 시스템에 같이 로딩되어 특정 메모리 공간인 상수 풀(constant pool)에 놓인다.
예를 들어 int num = 3; 문장에서 값 3이 메모리 공간 어딘가에 존재해야 num 변수에 그 값을 복사할 수 있다. 즉 숫자가 변수에 대입되는 과정은 일단 숫자 값이 어딘가 메모리에 쓰여 있고, 이 값이 다시 변수 메모리에 복사되는 것이다.
형 변환의 기본 원칙
1. 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어진다.
2. 덜 정밀한 자료형에서 더 정밀한 자료형으로 형 변환은 자동으로 이루어진다.
byte -> short, char -> int -> long -> float -> double
long형이 float형으로 형 변환 되는 이유는 실수가 정수보다 표현 범위가 더 넓고 정밀하기 때문이다.
자료 손실이 일어날 수 있는 경우는 명시적으로 써줘야한다.
1. 바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우
int iNum = 10;
byte bNum = (byte)iNum;
double dNum = 3.14;
int iNum2 = (int)dNum;