[학습목표]
사람과 컴퓨터 사이의 소통->프로그래밍 언어
(컴퓨터에게 사람이 대화 시도)
결과물: 빅데이터, AI(이로운역할)
초창기에는 그렇지 않았음
A언어(첫 개발언어, 1960, 입력출력,문맥)
B언어(bell 사에서 개발, 데이터 타입,연산기능(+-*/),메서드(행동 정의))
C언어(b언어보다 좋은, 현재도 많이 사용, 자료형 데이터, 자료구조)
Java(C언어의 모든 기능 포함,어디서나 마시는 커피처럼 어디서나 동작가능, Java커피에서 이름땀(대표적인 객체지향언어 - 3주차에자세히)
객체 지향??
객체 = Object
사람, 사물, 세상에 존재하는 모든 것
->특징(이름 나이 주소 혈액형 키), 행동(걷는다 숨쉰다 공부한다) 가지고 있음
자바의 가상환경을 만들어준다(자바가 구동될 수있는 가상의 기기 만들어줌)
어느 기기에서나 Java를 실행시킬 수 있는 가상의 기기만들어줌
java코드를 운영체제가 읽을 수있는(readable) 코드로 Java 컴파일러가 변환한 코드
자바 컴파일러: java 파일(사람 이해)->class(운영체제가 이해) 파일로 변환
운영체제가 읽은 바이트 코드를 기계가 이해할 수 있는 기계어로 번역(해석)
(low-level 언어)
빠르게 인터 프리터 효율높여줌
Java 데이터 저장(기억)
운영체제에 JVM이 할당받은 영역
데이터 쌓였다 죽었다가 반복
-바이트 코드를 메모리 영역에 담아 운반
쓰레기 모아서 청소
메모리 영역에서 안쓰는 데이터 제거->효율적으로 관리

개발환경 구성->프로그램 설치
1.JRE(java Runtime Environment,자바 실행 환경) 설치(=JVM 설치)
1)java->class 2)class->실행
2번만 가능하기 때문에
JDK 설치해야함
JDK(java Development Kit)
1) jre 기능 포함
2) 컴파일러 역할(java->class)
3) 디버깅(de+bug)-버그 없애기
인텔리제이 설치(editor + 확장기능)
() 소괄호
{} 중괄호
[] 대괄호
java 프로젝트(앱)는 제일먼저 클래스의 main 메소드를 실행시킨다.=JVM의 약속
public class Main {
public static void main(String[] args){
System.out.println("Our First Project");
}
}
-public : 제어자(접근 범위) 공공의,공통의 src 폴더 어디서든 접근가능
-클래스 이름 .java 이름과 같아야함
-static : 이프로그램이 시작될 때 무조건 실행된다.
메소드(input,output 타입 제한)
문자만 된다 숫자만 된다.->데이터 타입
output
-void: 메소드 출력값의 데이터 타입/ 아무것도 없다 출력은 없다.
input
-String[] args:매개변수 자리
타입 변수명(아무거나 써도 상관없고 메소드 안에서 사용가능
객체:특징(속성, 변수), 행동(메소드)
System.out.println("Hello World");
System클래스에서 out이라는 객체가 문자열을 출력한다.(println 메소드)
System.out.println(7);
System.out.println(3);
System.out.println(3.14);//숫자는 "" 로 감싸지 않아도 됨 감싸면 문자로 인식
System.out.println("JAVA");//문자열은 ""로 감싸야함 안하면 변수로 인식
변하는것(변수)과 변하지 않는 것(상수 constant, 항상 유지되는 지속되는)
-저장공간의 선언: int number;(저장공간 타입/저장공간 이름)
-값의 저장(할당):
1)선언과 동시에 저장(초기화)
int number=10;
2)선언 후 값 저장->덮어쓰기
number =10;
상수:변하지 않는 저장공간
final int number=10;
number=11;//오류 발생
1.기본형(숫자형,문자형,boolean)
2.참조형(뭔가 복잡,한번에 저장X, 어딘가에 별도로 저장)
논리형(boolean) true/false 값 저장
문자형(char)(2byte) : 문자 하나만 저장 ex) 'A','1'
정수형(byte,short,int,long)
표현할 수있는 크기에 따라 나뉨
byte -128~127범위
short -32768~32767
int -21억~21억
long num=2147483647L;//숫자 뒤에 알파벳 L 표기(접미사)
데이터값 뒤에 구분값을 붙이는 것!
정수& 실수형 표현범위 넘게 되면 오버플로우 발생해 다른 값으로 표현됨
실수는 표현범위 매우 넓어서 정수형 변수에 못담을 수있음(부동소수점 방식) 정수는 0과 1로 표현하기 쉽지만 실수는 어려움
고정소수점 방식(소수점 길이,표현 byte 제한)
vs 부동소수점 방식 (부호,지수,기수를 구분해서 저장, 이들을 곱한값을 표현해서 저장하는 방식)
-float(4byte)가 long(8byte)보다 더 넓은 범위 표현가능
float->long으로 자동 형변환 안됨
long num=3.14F;//오류 발생
(float 접미사 F, double은 접미사 없음)
float 3.4 10^38까지
double은 1.710^308 RKwl
Stack 영역 vs Heap 영역
- Stack :정적으로 할당된 메모리 영역입니다.
- 기본형 변수를 저장
- 참조형 변수의 주소값 저장
- Heap의 경우에는 동적으로 할당된 메모리 영역입니다.
- 그크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장.

박싱(감싸기)
int number = 31;
Integer num= new Integer(number);//지원종료 오류
->Integer num = number;//이런식 할당
언박싱(풀기)
int n= num.intValue();
클래스는 객체지향 언어인 Java 의 핵심기능인데요. 그렇기 때문에 클래스로 변수를 관리하면 객체지향의 많은 기능을 사용할 수 있게됩니다!!
저장공간에 저장하는 값은 0,1 을 통한 숫자값을 저장한다
문자는 어떻게 숫자로 저장할까요?
바로, 숫자(int)를 문자(char)로 매핑해서(짝을 지어서) 표현합니다!=> 아스키 코드
'a' = 97
'A' = 65
문자(char):기본형,'A',끝에 '\0'(null 문자) 없음.
문자열(String):참조형,"a","hello",끝에 '\0'(null 문자) 들어감(java에선 없음)
Scanner sc = new Scanner(System.in);
String input = sc.next();
Scanner sc = new Scanner(System.in);
String input = sc.next();
System.out.println("입력값 : " + input);
// 실행 결과
{입력}
입력값 : {입력}
1byte = 8bit
byte(1)->short(2)->int(4)->long(8)->float(4)->double(8)
//부동 소수점 방식사용해서 long보다 float가 더 큰 값 저장가능
자동 형변환(암시적):작은크기->큰크기(연산 시에도 일어남)
강제 형변화(명시적):큰크기->작은 크기, 값의 손실 일어남.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//입력
String food = sc.nextLine();//요리 제목 입력
double star = Double.parseDouble(sc.nextLine());
String[] recipe = new String[10];
for (int i = 0; i < 10; i++) {
recipe[i] = sc.nextLine();
}
//출력
System.out.println("[ " + food+ " ]");
int change_star=(int)star;
double percent = change_star * 100/5.0;
System.out.println("별점 : " + change_star+ "("+percent+"%)");
for (int i = 0; i < 10; i++) {
System.out.println((i+1)+". " +recipe[i]);
}
}
}