[1. 자바에 대해서]
Java의 필요성
1. 공통 실행 환경이 있어 여러기기의 운영 체제에서 실행 가능
2. 코드의 이해와 유지보수가 쉬움 (클래스 통해 객체 생성)
3. 오류 방지 및 보안상 안전 (java언어를 byte코드로 변환하는 Compiler가 먼저 오류 체크)
4. 네트워크/db 연결 및 통신 등의 작업을 처리하는 API 제공 ( → 대규모 앱 개발 가능)
(앱 : 운영체제 위에서 실행되는 프로그램 ex. Mobile App, Server App)
5. 다양한 개발 도구와 라이브러리
JVM (Java Virtual Machine) : 자바 가상 머신
여러 기기 위에 Java 프로그램 실행할 수 있도록 가상의 기기 만들어주는 것
<Compile-time 환경>
Java Complier
: .java 파일을 운영체제가 읽을 수 있는 바이트코드(.class 파일)로 변환
<Run-time 환경>
Class Loader
: JVM으로 .class(바이트코드)를 불러와서 메모리에 저장
Interpreter
: 운영체제가 읽은 바이트코드(.class)를 기계가 실행할 수 있는 기계어로 번역
JIT Complier
: Interpreter의 효율을 높여주는 서포터 해석기 (빠른 .class코드 해석기)
Runtime 시스템
: 프로그램이 실행 중인 상태를 관리
메모리영역 : 운영체제로부터 JVM이 할당받은 메모리 영역
Garbage Collector
: 메모리 영역에서 안 쓰는 데이터를 주기적으로 청소
Java의 개발환경 구성
JRE (Java Runtime Environment) : 자바 실행 환경
→ .class 파일만 실행 가능
JDK (Java Development Kit) : 자바 개발 키트
→ .java파일을 .class 파일로 변환해주는 Compiler(javac), 코드디버깅하는 jdb 등의 기능 있음
[2. 변수]
1. 기본형 변수
- (논리형)boolean, (문자형)char('')
- (정수형)byte,short,int,long
- int와 long 데이터값(리터럴) 구분 위해 long 숫자 뒤에 접미사 L을 붙임
- (실수형)float,double
- float과 double 데이터값(리터럴) 구분 위해 float 숫자 뒤에 접미사 f를 붙임
- float은 "부동 소수점 방식"을 사용하므로 long보다 더 넓은 범위 표현 가능
- 부동 소수점 방식 : 가수와 지수를 구분하여 저장하고 이 값들을 곱한 값을 저장하는 방식
-
2. 참조형 변수
- String("", 문장 끝에 \0 저장), Object, Array, List
- 실제 값이 아닌 원본 값의 주소값 저장
- Stack 영역 : "정적"으로 할당된 메모리 영역 (크기가 정해져 있는 기본형 변수 & 참조형 변수의 주소값 저장)
- Heap 영역 : "동적"으로 할당된 메모리 영역 (크기가 계속 늘어날 수 있는 참조형 변수의 원본 저장)
3. Wrapper 클래스 변수
- 모든 기본형에 대한 래퍼 클래스 존재 (첫글자를 대문자로)
- 클래스로 변수 관리 시 객체지향의 많은 기능 사용가능
입력과 출력
형변환
<변수 타입별 크기 순서>
byte(1) → short(2) → int(4) → long(8) → float(4) (부동소수점!!) → double(8)
- 자동형변환 : 작은 타입에서 큰 타입으로 형변환 시
→ 값의 손실 없이 변환 가능하여 컴파일러가 자동으로 형변환 해줌
- 강제형변환(=캐스팅) : 큰 타입에서 작은 타입으로 형변환 시
→ 값의 손실이 생겨 자동으로 형변환 해주지 않고 개발자가 선택하여 형변환함