어디서나 마시는 커피처럼 어디서나 동작이 가능한
핵심기능 : C언어 기능 + 공통 실행환경(JVM -> 어디서나 동작이 가능) / 클래스 / 객체
JAVA의 특징
자바 가상 머신
여러가지의 기기위에(여러 OS 환경) Java를 실행시킬 수 있는 가상의 기기를 만들어 주는 것

Java 프로그램 변환 코드 : 컴퓨터가 읽을 수 있는 코드
.java 파일(사용자 작성 파일)을 .class 파일(컴퓨터가 읽을 수 있는 파일)로 변환해 주는 것
Java .class 코드 해석기
빠른 Java .class 코드 해석기
Java 데이터를 저장하는 영역
Java .class 바이트 코드를 메모리 영역에 담는 운반기
Java 쓰레기 청소기
java 프로그램의 동작 흐름
JDK 설치 (v 17) 이미 jdk 17 버전 사용 중으로 생략
intelliJ 설치 이미 학생 버전으로 있기 때문에 생략
// Main.java 파일
public class Main{ // class 명과 파일명 일치
//main 메소드
public static void main(String[] args) {
System.out.println("Our First Project! :)");
}
클래스 명명 규칙 : 파일 명과 일치해야 한다.
main 메소드 : 자바 프로그램은 가장 먼저 class의 main 메소드를 실행
static 키워드 : 프로그램 시작될 때 무조건 실행되는 녀석
void 위치 : 메서드 출력값의 데이터 타입 (output)
void 뜻 : 아무것도 없다 → 출력이 없음을 나타냄(반환값이 없다)
String[] args : 매개변수 자리 (input)
변수의 선언과 할당
변수타입 변수이름;과 같이 선연int number; // int : 변수 타입, number : 변수 이름 String name; // String : 변수 타입, name : 변수 이름1. 선언 후 할당
int number; // int : 변수 타입, number : 변수 이름 number = 10; String name; // String : 변수 타입, name : 변수 이름 name = "가람"2. 선언과 동시에 할당(초기화)
int number = 10; String name = "가람";상수의 선언
final 키워드final int NUM = 10; // 상수로 선언 NUM = 15; // error : 'final' 키워드로 상수로 선언됐기 때문에 값 변경 할 수 없다.
| 변수의 종류 | 값 속성 | 접미사(대,소문자 구별 x) |
|---|---|---|
| 논리형(boolean) | true, false / 논리값 | 없음 |
| 문자형(char) | 문자 - '가','a','A' / 문자하나 | 없음 |
| 정수형(byte, short, int, long) | 0, 25,....., 100 같은 정수형 숫자 | L(long) |
| 실수형(float, double) | 3.14, -0.1 같은 실수형 숫자 | f(float), d(double) ← 생략허용(double) |
"apple", "abc"와 같은 문장을 저장객체, 배열, 리스트와 같은 단일 저장 곹간에 담을 수 없는 값을 저장| 기본 타입 | wrapper class |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | character |
| boolean | Boolean |
int number = 12;
//boxint (wrappper class 로 만들어줌)
Integer num = number;
//unboxing wrapper class에 넣어준 애를 기본타입으로 꺼냄
System.out.println(num.intValue());
American Standard Code for Information Interchange의 약자, ANSI에서 만든 표준 코드체계.
아스키는 각 문자를 7비트로 표현하므로 2^7 = 128개의 문자를 표현할 수 있다.

//scanner -> 사용자 입력값 scan
Scanner sc = new Scanner(System.in);
//asciiNumber 라는 변수에 입력받은 값을 저장
int asciiNumber = sc.nextInt();
//ch 라는 변수에 (char)asciiNumber 형변환 하여 저장
char ch = (char)asciiNumber;
System.out.println(ch); // 입력값 : 65, 출력값 : A
//scanner -> 사용자 입력값 scan
Scanner sc = new Scanner(System.in);
//charAt(index) → 문자열의(index) 값을 char 타입으로 변환
char letter = sc.nextLine().charAt(1);
//char → int 로 형변환
int asciiNum = (int)letter;
System.out.println(asciiNum); //입력값 : da , 출력값 : 97
문자(char) : 문자 한개만 저장, ''로 값을 지정한다. ex) 'ㅁ', 'A'
char ch = 'a';
문자열(String) : 문자 여러개를 저장한다. "" 로 값을 지정. ex) "a", "abc", "가람"
String name = "가람";
Stack 영역 vs Heap 영역
Stack 영역: 정적으로 할당된 메모리 영역,기본형 변수,참조형 변수의 주소값저장
Heap 영역: 동적으로 할당된 메모리 영역, 참조형(Reference Type) 데이터 타입을 갖는 객체(인스턴스), 배열 등이 저장
입력
Scanner.in 객체의 next() 명령을 사용하여 입력 받는다.
Scanner sc = new Scanner(System.in) // Scanner 객체 생성
String input = sc.next(); // scanner 의 .nert(); 실행 명령어 (사용자 입력값 받기위한 명령어)
출력
System.out 객체의 println() 명령어 사용하여 출력
Scanner sc = new Scanner(System.in)
String input = sc.next();
System.out.println(input); //입력한 글자 출력, 입력값 : 사랑, 출력값 : 사랑
컴퓨터는 10진수를 이해할 수 없어 2진수로 표현해줘야 한다.
ASCII 코드에 의해 A → 65(10) : 010000001(2) 이 되지만 길이가 너무 긴 단점이 있다
010000001(8bit) → 1byte -> (4bit, 4bit) 0100 0001 0x41(16진수) 로 간단히 표현할 수 있다.

형 변환 이란? : 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
자동 형 변환(묵시적 형 변환) : 기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환
명시적 형 변환 : 선언된 변수를 다른 자료형으로 변환(형 변환), 큰 데이터에서 작은 데이터로 변환될 때 일부를 잘라서 작은 데이터 크기로 맞춰주는 것
작은 값을 큰 그릇에 넣어 줄 때는 생략이 가능하다
//자동 형 변환
float f = 1234; //int 타입의 값을 float 타입의 변수에 저장. (컴파일러에 의해 자동 형변환)
int i = 3.14f; //error (int의 표현 범위 < float의 표현 범위) 이기 때문에 error
//명시적 형 변환
int i = (int)3.14f //수동적ㅇ로 형변환 해주기 때문에 error x
//byte → int
byte b = 10;
//자동 형 변환
int i = b; //생략가능
//int → byte
int i2 = 300;
//명시적 형 변환
byte b2 = (byte)i2; //생략불가 byte(1byte) < int(4byte)
![]() |
|---|
산술 변환
int → long + long → long (int<long)int → float + float → float (int<float)float → double + double → double (float<double)int 보다 작은 타입이면 int로 변환byte + short → int + int → int (byte,short < int)char + short → int + int → int (char,short < int)// 1주차 숙제
//scanner -> 사용자 입력값 scan
Scanner sc = new Scanner(System.in);
//요리제목 입력 받기
String title = sc.nextLine();
// 별점 입력 받기
int starRating = (int)sc.nextDouble();
sc.nextLine(); //엔터 소비
// 레시피 입력 받기
String[] recipe = new String[10];
for(int i = 0; i < recipe.length; i++) {
recipe[i] = sc.nextLine();
}
System.out.println("["+title+"]");
System.out.println("별점 : "+ starRating+ " ("+starRating/5f*100+"%)" );
for (int i = 0; i < recipe.length; i++) {
System.out.println(i+1+". " + recipe[i]);
새롭게 알게 된 사실 : 배열에 입력을 받는데 index[0] 번째가 공백으로 나와서 자꾸 왜그런가 했다.
원인 : next() / nextInt() / nextFloat() / nextLong() / nextBoolean() / nextDouble() 의 메서드들은 입력
버퍼에서 해당 형식의 값을 읽어오고엔터나 공백 등을 구분자로 인식하여 처리하기 때문에 생기는 문제였다.
해결 : 따라서 명시적으로nextLine()메서드를 사용하여 엔터를 읽고 무시 하도록 처리해 줘야 했다.
git 기본 명령어
git init
git config user.name "GitHub 계정"
git config user.email "GitHub 이메일"
git clone gitHub경로
git remote add origin gitHub경로
git branch 브랜치 명
git checkout 브랜치명
git checkout -b 브랜치명
git branch
git config --list
git add 파일명 # 하나의 파일만 배포
git add . # 변경 파일 전체 배포
git commit -m "커멧 메시지"
git pust origin main #
git status
git reset
git pull
git diff
git log
$ pwd : 현재 작업중이 directory 확인
$ ls : 현재 위치의 모든 파일 및 폴더 리스트 확인
$ ls -a : 숨겨진 폴더까지 보여준다
$ mkdir 폴더명 : 현재 경로에 폴더 생성
$ touch 파일명 : 현재 경로에 파일 생성
$ cd 경로 : 터미널에서 폴더 위치 이동