개발언어의 역사
- A언어 : 1960년 , 입/출력, 문맥,
프로그램을 만들기위한 가장 기본적인 언어.
- B언어 : 1960년 , A언어+데이터타입+연산기능+메소드, 데이터를 연산하고 묶어서 관리 구현이 가능한 언어.
- C언어 : 1970년, B언어+자료형데이터타입+자료구조,
더 다양한 데이터타입을 가지고 자료구조가 생김.
- JAVA : 1990년, C언어+공통 실행환경(JVM)+클래스+객체,
데이터와 메서드를 묶는 클래스,객체지향적 언어

JAVA의 장점
- JVM이라는 가상 OS환경을 사용하여 OS위에서 돌아가기에 디바이스 호환성이 높다.
- 실제로 존재하는 개념을 추상화하기 쉽다.
(이해와 유지보수쉬움)
- 안정성이 높아 오류방지및 보안성이 높다. (Ex)컴파일러)
- 많은 분야의 작업처리 API를 제공. (네트워크,DB 등)
- 다양한 IDE와 라이브러리를 제공한다.
JVM

- 바이트코드 : 개발자가 작성한코드(.java)파일을 바이트코드(.class)로 컴파일러가 변환.
- 인터프리터 : 바이트 코드를 기계어로 번역
- JIT : 인터프리터의 효율을 높여주는 기능
- 메모리영역 : OS에게 할당받은 메모리영역
- 클래스 로더 : 바이트코드를 메모리영역으로 이동
- 가비지컬렉터(GC) : 메모리영역에서 사용하지않는 데이터를 자동적으로 관리.

(JVM 자세히알아보기)
JRE, JDK
JRE
- JRE는 Java Runtime Environment 자바 실행 환경이라는 뜻
- .class 파일만 실행만 가능.
JDK
- JDK는 Java Development Kit 자바 개발 키트라는 뜻
- JRE의 기능을 포함하며 Java Compiler(javac) + 디버깅 기능 제공
변수

int number; // number 라는 이름의 int(숫자)타입의 저장공간을 선언
String name; // name 이라는 이름의 String(문자열)타입의 저장공간을 선언


- 선언 과 동시에 초기화 및 값을 덮어쓰기가 가능하다.
- 변수를 이용하면 조건등의 값이 변결될때 코드수정이 필요X
변수의 타입

long longNumber = 2147483647L;
float floatNumber = 0.123f;
- String의 경우 byte의 양을 계산할수 없기에 \0(null)이 포함됌

참조형
- 변수의 원본을 직접 저장하는게 아닌 별도의 메모리영역의 저장 후 저장된
주소값을 참조한다
- 기본형 : Stack 영역 - 정적으로 할당된 메모리영역.
(참조형 변수의 '주소값'이기 때문에 크기가 정해져있음)
- 참조형 : Heap 영역 - 동적으로 할당된 메모리영역.

고정소수점, 부동소수점
고정소수점 : 정수와 소수사이의 위치를 미리 '고정'하고 해당 비트만을 활용해 실수를 표현.

- 장점 : 구현 및 표현방법이 간단하고 속도가 빠르다.
- 단점 : 자릿수가 크지않으므로 표현 할 수 있는 범위가 적고 정밀도가 낮다. 높은정밀도가 필요하지 않은 소규모시스템에서 간혹 이용.
부동소수점 : 소수점이 고정되어있지않고 움직임. 지수부/가수부로 나눔.


- 장점 : 고정소수점에 비해 더 큰 실수를 표현할 수 있다.(정수자리에 더 많은 비트를 할당)
- 단점 : 실수연산이 부정확할수 있음. H/W가 가지는 본질적한계로 무한반복되는 값이 나올경우 표현할수있는 근사치로 표현된다.
래퍼클래스
- 기본 자료형을 객체 타입의 자료형으로 변환이 필요할때 사용된다.
- 사용용도
- 객체로 저장해야할 경우.
- Collection, 제네릭 같은 매개변수가 객체로 요구될경우.
- 래퍼클래스의 메서드를 사용해야할 경우.
- 특징
- 산술연산을 위한 클래스가 아니기에 불변성을 지닌다.
- JDK 1.5 이상부턴 오토 박싱/언박싱이 적용된다.

상수
- 변하지않는 값을 필요로 할때 저장공간 효율성을 위해 사용.
(원주율, 지구의 둘레 등)
final int number = 10; // 1. 상수로 선언 (데이터 타입 앞에 final 을 붙이면 됩니다.)
number = 11; // e2. 변수의 값을 바꾸려고하면 에러가 납니다!
- final static 타입 변수명 을 주로사용함.
ASCII
- int와 char를 매핑해서 표현 JAVA의 경우
아스키코드라는 규칙을 이용하여 표현

타입캐스팅(형변환)
- 프로그래밍을 하며 기존의 변수타입이 아닌 내가 원하는 변수타입으로 바꿔주기 위한 방법.
- 형변환은 주로 기본형 변수인 정수 ↔ 실수 ↔ 문자 들 사이에서 일어난다.
- OOP의 특징중 다형성에 속한다.
double doubleNumber = 10.101010;
float floatNumber = 10.1010
int intNumber;
intNumber = (int)doubleNumber; // double -> int 형변환
intNumber = (int)floatNumber; // float -> int 형변환
오토캐스팅
-
명시적으로 타입캐스팅을 하지않아도 컴파일러가 자동으로 캐스팅작업을 진행.
-
작은 타입 -> 큰 타입으로 변환시 (자동 변환)
- 작은 범위에서 큰 범위로 이동하는거기에 값의 손실이 발생하지않음.
- 값의 손실이 없기에 컴파일러가 자동적으로 변환
-
큰 타입 -> 작은 타입으로 변환시 (강제 변환)
- 더작은범위로 표현하기에 값의 손실발생가능성이 있음.
(Ex) double -> int 시 소수점 아래단위가 모두 사라짐.)
- 손실이 발생하기 때문에 개발자에게 선택을 돌림.
숙제

답안 :
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String foodname = sc.nextLine();
String recipes[] = new String[10];
float star = sc.nextFloat();
float per = ((int) star * 100 / 5);
sc.nextLine();
for (int i = 0; i < 10; i++) {
recipes[i] = sc.nextLine();
}
System.out.println("[ " + foodname + " ]");
System.out.println("별점 : " + (int) star + " (" + per + "%)");
for (int i = 0; i < 10; i++) {
System.out.println(i + 1 + ". " + recipes[i]);
}
}
}
