언어의 역사
- A언어 : 입/출력, 문맥 기능만 구현가능한 언어, 첫번째 개발 언어여서 A언어
- B언어 : 데이터를 담을 수 있는 타입이 생기고, 데이터를 연산하고 묶어서 관리할 수 있는 메서드 구현이 가능한 언어, Bell사에서 만들어서 B언어
- C언어 : 다양한 데이터 타입을 정의하고 자료구조에 담을 수 있는 언어, B언어보다 더 좋은 언어라고 해서 C언어
- Java : C언어 기능 + 공통 실행환경(JVM), 클래스, 객체, 어디서나 마시는 커피처럼 어디서나 동작 가능한, 자바 커피에서 이름을 따서 만듬

자바의 장점
1. 공통 실행환경(JVM)이 있어서 여러 기기에서 실행 가능
- 각각의 컴퓨터 환경에 따라 다른 운영체제 (Window, iOS, Linux 등등) 를 가지고 있어도 그 운영체제 위에서 동일하게 실행 할 수 있음
- 앱 개발에 유용 -> Mobile App, Server App 등등
2. 세상과 닮아있는 개발언어라 코드를 이해하기 쉽고 유지 보수가 쉽다. - > 객체 지향 언어
- 객체(Object)? 세상에 존재하는 모든것. 사물이나 생명체 등. => 특징(성격, 색깔, 크기 등)과 행동(움직임)을 가지고 있다.
3. 안정성이 높아서 프로그래밍 오류를 방지하고 보안상 안전
- Java 언어로 작성된 문맥을 바이트 코드로 변환하는 변환기(Compiler)가 먼저 오류를 체크
4. 대규모 앱 개발이 가능 (요새는 Kotlin을 많이 사용함)
- 네트워크 및 데이터베이스 연결 및 통신 등의 작업을 처리하는 API를 제공
5. 다양한 개발 도구와 라이브러리를 사용
- 많은 사람이 사용한다 -> 언어가 발전한다 -> 다양한 라이브러리가 만들어진다. (third party)
JVM (Java Virtual Machine)
- 자바가 구동 될 수 있는 가상의 환경을 만들어 준다. -> 여러가지의 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는것을 의미 (PC, Mobile, Server 전부 가능)

- 없으면 각각의 환경마다 따로 설정을 해주어야한다.

JRE (Java Runtime Environment)
- .class 파일만 실행 가능
- JDK 가 javac 명령을 통해 .java 파일을 실행가능한 .class 파일로 변환
JDK (Java Development Kit)
- .java 파일들을 .class 파일들로 변환해주는 Java Compiler(javac) 기능이 있다.
- 코드를 디버깅하는 jdb 등의 기능이 있다.
- 즉, 컴파일러 기능 + JRE 기능 + 디버깅 기능을 가지고 있다.
변수 (변할 수 있는 저장 공간 <-> 상수 : 변하지 않는 저장 공간)
- 타입 : 저장공간의 종류 (int, String, char 등)
- 이름 : 저장공간의 이름 (변수 이름)
- 초기화 : 선언과 동시에 저장 (선언 동시에 할당)
- 덮어쓰기 : 선언 이후에 값을 저장 (선언하고 나중에 할당)
- ex) int number = 10; -> 초기화
- ex) int number; number = 10; -> 덮어쓰기
기본형 변수 (원본 값이 Stack에 저장)
- 논리형 변수 : boolean -> True/False 값만 저장
참조형 변수 (원본 값이 Heap 저장)
- 문자열 변수 : String -> 문장을 저장
- 그 외 : Object, Array, List … -> 객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값
- 실제 값이 아니라 원본 값의 주소 값을 저장한다.

래퍼 클래스 변수 (기본형 변수를 클래스로 한번 랩핑(감싸는) 변수)
- 박싱: 기본 타입에서 래퍼 클래스 변수로 변수를 감싸는 것
- 언박싱 : 래퍼 클래스 변수를 기본 타입 변수로 가져오는 것

문자 (char)
문자열 (String)
- 문장의 끝에 \0(널문자)가 함께 저장이 됩니다.
(몇개의 byte 를 쓸지 모르기 때문에 끝을 표시해야 합니다.)
=> C언어에서도 char랑 char 배열에서 char 배열의 마지막에는 \0문자가 들어감
- Bit
- Bit : 0,1 형태의 2진수 데이터로써 컴퓨터가 저장(표현)할 수 있는 최소 단위
- 정수형 값 : 10진수 숫자(0~10범위의 숫자)이며 2진수(0~1범위)Bit 로 저장(표현) 합니다.
- 4개의 Bit로 16진수 숫자(0~F(16)범위의 숫자)를 2진수(0~1범위)Bit 로 저장(표현) 합니다.
- Byte = 8 Bit
- Byte(바이트)는 8개의 Bit(비트)로 구성
- 1 Byte 내에서 숫자 변수는 Bit 2진수를 10진수로 저장(표현)
- 10진수로는 0~255(2의8승)까지 저장(표현)
- 1 Byte 내에서 문자 변수의 경우만 Bit 2진수를 16진수로 저장(표현)
형변환
- 앞에 접미사로 타입을 붙여준다.
자동 형변환 (형변환을 직접적으로 캐스팅하지 않아도 자동으로 형변환)
1) 자동 타입변환은 작은 크기의 타입에서 큰 크기의 타입으로 저장될때 큰 크기로 형변환이 발생합니다.
변수 타입별 크기 순서 :
byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)
2) 작은 크기의 타입이 큰 크기의 타입과 계산될때 자동으로 큰 크기의 타입으로 형변환이 발생합니다. (소수점이 버려짐)
자동 형변환 vs 강제 형변환
- 작은 타입 => 큰 타입 형변환시 (자동 형변환)
HW1. 요리레시피 메모장 만들기
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float star = sc.nextFloat();
sc.nextLine();
String[] rec = new String[10];
for (int i = 0; i < 10; i++) {
rec[i] = sc.nextLine();
}
title = "[ " + title + " ]";
star = (int)star;
float percentage = star / 5 * 100;
System.out.println(title);
System.out.print("별점 : " + (int)star + " (");
System.out.printf("%.1f", percentage);
System.out.println("%)");
for (int i = 0; i < 10; i++) {
System.out.println((i + 1) + ". " + rec[i]);
}
}
}