프로그래밍 언어(Programming Language): 사람과 컴퓨터간의 소통을 위한 방법(수단)
💻 컴퓨터는 0, 1만 이해한다 → 사람이 각종 연산과 작업을 부여하여 작업을 명령: 빅데이터, AI 등으로 활용되고 있다.
A언어 : 첫 개발 언어라는 의미에서 A Programming LanguageB언어 : Bell 사에서 개발해서 B언어C언어 : B언어에 비해 더 좋은 언어라는 의미로 C언어자바 : 어디서나 동작 가능한, 자바 커피에서 이름을 따서 만든 Java 언어A언어의 기능 + B언어의 기능 + C언어의 기능 에 Java 언어의 기능 을 추가한 언어Java는 발전해 온 언어 중 가장 많이 쓰이는 개발 언어 중 하나
💡 Java 컴파일러란?
내가 작성한 Java 코드들(.java)을 운영체제가 읽을 수 있는 바이트 코드(.class)로 변환하는 변환기


📌 JDK의 Jdb 기능을 통해서 실행 중인 프로그램의 코드 실행을 따라다니며 볼 수 있습니다.
👀 디버깅 = 중단점 일시정지 + 코드 라인 단위 수행
public class Main {
// [JDK]
// 1. Compiler : .java -> .class
// 2. JRE
// 3. JDB : 디버깅
// main 메소드
// 자바 프로젝트(앱)는, 제일 먼저 클래스의 main 메소드를 실행시킨다.
// = JVM의 약속
public static void main(String[] args) {
System.out.println("Our First Project! :)");
}
}

클래스 : .class 관리 단위
public : (접근)제어자, public(공공의, 공통의)
input → system → output : 타입을 제한하고 있다
void : "아무것도 없다"
주석 : description
public class Main {
// 1. 7 출력
// 2. 3 출력
// 3. 3.14 출력
// 4. JAVA 출력
public static void main(String[] args) {
System.out.println(7);
System.out.println(3);
System.out.println(3.14);
System.out.println("JAVA");
}
}
변하는 것(변수)과 변하지 않는 것(상수)
▶︎ 변수 : 변하는 저장 공간 🍽️
// int: 저장공간의 타입, number: 저장공간의 이름
// number 라는 이름의 int 타입의 저장공간을 선언
int number;
값의 선언과 동시에 값을 저장 (초기화)
int number = 10;
선언 이후에 값을 저장
int number;
number = 10;
▶︎ 상수 : 변하지 않는 저장 공간 🥘
final int number = 10;
❓ float는 4byte만 쓰는데 어떻게 long 보다 더 넓은 범위를 표현 가능한가요?
float라는 단어의 뜻은 “부동”이라는 의미를 가지고 있으며 소수점이 움직인다는 의미의 “부동 소수점 방식”으로 숫자를 저장합니다.
- 부동 소수점 방식 : 가수와 지수를 구분해서 저장하고 이 값들을 곱한 값을 저장(표현) 하는 방식입니다.
기본형 변수를 클래스로 한번 랩핑(감싸는) 변수
// 박싱 VS 언박싱
// 박싱
// Integer 래퍼 클래스 num 에 21 의 값을 저장
int number = 21;
Integer num = new Integer(number); // deprecated : 더 이상 사용하지 않음
Integer num = number; // 사실, 따로 Boxing 하지 않아도 자동 형변환 된다!
// 언박싱
int n = num.intValue(); // 래퍼 클래스들은 intValue() 같은 언박싱 메서드들을 제공해줍니다.
n = num; // 사실, Unboxing 도 마찬가지로 하지 않아도 형변환된다.
| 기본 타입 | 래퍼 클래스 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
❓ 왜, 굳이 래퍼 클래스를 사용하는 건가요?
클래스는 객체지향 언어인 Java의 핵심 기능. 때문에 클래스로 변수를 관리하면 객체 지향의 많은 기능을 사용할 수 있게 됩니다! 👍

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int asciiNumber = sc.nextInt();
char ch = (char) asciiNumber;
System.out.println(ch); // 아스키코드에 따라 변환된 문자 출력
}
}
char alphabet = 'A'; // 문자 하나를 저장합니다.String message = "Hello World"; // 문자열을 저장합니다.
📌 Stack 영역 vs Heap 영역
- Stack의 경우에는 정적으로 할당된 메모리 영역입니다.
- 그래서, 크기가 몇 byte 인지 정해져 있는 기본형 변수를 저장합니다.
- 추가로, 크기가 정해져 있는 참조형 변수의 주솟값도 저장합니다.
- Heap의 경우에는 동적으로 할당된 메모리 영역입니다.
- 그래서, 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장합니다.
- Byte = 8 Bit
- Byte(바이트)는 8개의 Bit(비트)로 구성되어 있습니다.
- 1 Byte 내에서 숫자 변수는 Bit 2진수를 10진수로 저장(표현)을 합니다.
- 10진수로는 0~255(2의8승)까지 저장(표현) 합니다.
- 1 Byte 내에서 문자 변수의 경우만 Bit 2진수를 16진수로 저장(표현) 합니다.
public class Main {
public static void main(String[] args) {
double doubleNumber = 10.1010;
float floatNumber = 10.1010f;
int intNumber;
intNumber = (int) doubleNumber;
System.out.println("double Type => " + doubleNumber);
System.out.println("int Type => " + intNumber);
intNumber = (int) floatNumber;
System.out.println("float Type => " + floatNumber);
System.out.println("int Type => " + intNumber);
}
}
public class Main {
public static void main(String[] args) {
int intNumber = 10;
double doubleNumber = (double) intNumber;
float floatNumber = (float) intNumber;
System.out.println("int Type => " + intNumber);
System.out.println("double Type => " + doubleNumber);
System.out.println("float Type => " + floatNumber);
}
}
📌 변수 타입별 크기 순서
byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)
큰 크기의 타입에 작은 크기의 타입을 할당하면 자동 형변환이 발생한다.
public class Main {
public static void main(String[] args) {
int intNumber = 10;
double doubleNumber = intNumber;
System.out.println("double Type => " + doubleNumber);
}
}
public class Main {
public static void main(String[] args) {
int intNumber = 10;
double doubleNumber = 5.5;
System.out.println("result => " + (intNumber + doubleNumber));
}
}
요리 레시피 메모장 만들기
import java.util.Scanner;
public class RecipeMemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
/* 입력 */
String title = sc.nextLine();
double score = sc.nextDouble();
sc.nextLine();
String[] recipes = new String[10];
for (int i = 0; i < recipes.length; i++) {
recipes[i] = sc.nextLine();
}
sc.close();
/* 출력 */
System.out.println("["+title+"]");
System.out.println("별점 : " + score + " (" + (score * 20) + "%)");
for (int i = 0; i < recipes.length; i++) {
System.out.println((i+1)+". " + recipes[i]);
}
}
}
