01. introduce
자바 소개
•
TIOBE : 점유율 조사 사이트
•
C언어 + C++ 다음으로 점유율이 높은 자바
•
한국은 자바민국
•
자바 뒤를 따르는 파이썬과 자바스크립트
•
창시자 : 제임스 고슬링
<br>
자바의 폭풍 성장을 도운 요인
•
인터넷과 웹의 발전
•
플랫폼 호환성 문제 해결
•
플랫폼 독립적인 언어
<br>
컴파일러 역할
•
개발자가 작성한 소스코드를 CPU가 처리할 수 있도록 번역
<br>
프로그램 종속성이란?
각각 OS에서 제공하는 함수가 다르기에 소스코드가 각 OS에 따라 달라진다.
각각의 OS마다 컴파일을 달리해줘야 한다.
<span style='background-color: green'>자바는 플랫폼 독립성이다. 종속성이 아니다!</span>
OS단 위에 JVM(각 OS에 맞게 개발된) 을 얹어 플랫폼 독립성을 구현 하였다.
우리는 고슬링 아저씨가 만든 JVM 만 OS에 맞게 설치만 한다면 Write Once!! Run Anywhere!!
단점으론 당연히 속도저하
OpenJDK 설치하기
설치 확인하기
cmd에 아래 입력
javac
java -version
Plain Text
복사
환경변수
•
시스템 부팅 시, OS가 환경편수를 쭉 읽어들인 후 메모리에 올려놓기 때문에 언제 어느 위치에서 실행시켜도 실행된다.
자바 실행 원리
자바를 실행하면 일어나는 일
javac 컴파일러가 내가 작성한 .java 소스 코드를 JVM이 알아먹을 수 있는 0101덩어리로 번역하여 .class 파일을 만들어 주었다.
02. 변수
변수
변수 선언
•
해당 타입 만큼 메모리에 공간을 잡아라
•
메모리 할당 명령
•
선언과 초기화는 동시에 이루어질 수 있다
변수 선언 후의 메모리
int num;
num = 256;
Plain Text
복사
•
메모리를 할당하라는 명령이기에
•
메모리엔 주소가 있다.
•
메모리를 관리하는 주체는 OS 이다.
변수명 규칙
int appleNum = 10;
Plain Text
복사
1.
대소문자는 구분되며 길이 제한은 없다.
2.
자바 예약어는 사용할 수 없다. (ex. class, boolean, try, catch ···)
3.
camelCase가 관례로 사용된다.
4.
특수문자는 _ $ 만 사용 가능하고 첫번째 글자에 숫자는 올 수 없다.
변수 사용과 메모리 할당 예제
int num1; //변수 선언
num1 = 10; //변수 초기화
int num2 = 10; //변수 선언과 초기화를 동시에
int num3 = num1 + num2; //변수를 사용한 연산
System.out.println(num1 + " + " + num2 + " = " + num3); //결과 출력
Plain Text
복사
데이터 타입
•
1byte = 8bit
•
오버플로우 발생할 가능성 항상 인지할 것
데이터 타입을 나눈 이유
•
컴퓨터는 2진수밖에 이해를 할 수 없다
◦
음의 정수는 컴퓨터에게 어떻게 알려주어야 할까?
2의 보수법을 사용
◦
실수는 컴퓨터에게 어떻게 알려주어야 할까?
부동 소수점, 표준 IEEE 754 방법을 사용
실수계산에서 오차가 발생하는 이유
double num = 0.1;
for(int i = 0; i < 1000; i++) {
num += 0.1;
}
System.out.println(num);
// 결과
// 100.09999999999859
Plain Text
복사
•
십진법에서도 1/3을 정확하게 표현할 수 없다.
이진법에서도 정확하게 표현할 수 없는 수가 있을 것이다.
•
메모리는 유한, 실수는 무한
무한을 유한에 담기위해서 미리 일정 구간으로 사용할 값을 정하고 연산된 값에서 가장 오차가 적은 근사값으로 저장된다.
문자코드
char ch1 = '헐';
char ch2 = '확';
char ch3 = 54736; // 문자 '헐'의 유니코드 값
char ch4 = 54869; // 문자 '확'의 유니코드 값
char ch5 = 0xD5D0;
char ch6 = 0xD655;
System.out.println(ch2 + " " + ch2);
System.out.println(ch3 + " " + ch4);
System.out.println(ch5 + " " + ch6);
Plain Text
복사
•
문자와 숫자가 일대일 매칭
•
UTF-8 통일됨
boolean
int num1 = 10;
int num2 = 20;
System.out.println(num1 < num2);
Plain Text
복사
•
결과값으론 true가 반환
•
CPU는 연산이 끝나면 8개의 자료형 中 하나로 값을 반환
기본 타입 | 메모리 크기 | 저장 범위 |
byte | 1 btye | -128~127 |
char | 1 btye | 0~65535 |
short | 2 btye | -32768 ~ 32767 |
int | 4 btye | <span style='background-color:green'>-21억 ~ 21억</span> |
long | 8 btye | |
float | 4 btye | |
double | 8 btye | |
boolean | 1 btye | true, false |