☕ 자바(Java)는 왜 생겼을까?
자바는 1990년대 초반 "더 강력하고, 더 유연한 프로그래밍 언어"를 만들기 위해 개발되었습니다.
당시 가장 널리 쓰이던 언어는 C, C++였지만, 이 언어들은 메모리 관리, 이식성 문제, 복잡한 문법 등의 한계를 가지고 있었습니다.
자바는 이런 문제를 해결하면서도 인터넷 시대에 적합한 언어로 설계되었습니다. -chatGPT
=> JDK
자바 프로그램을 개발할 때 필요한 개발 도구 모음
=> javac(자바 컴파일러)
파일을 바이트코드(.class)로 변환해줌
=> JVM
자바 가상 환경으로써 바이트코드를 읽어서 해석하고 프로그램을 실행

객체지향언어
모든 것이 객체(class)라는 개념을 기반으로 설계됐으며 캡슐화, 상속, 다형성 같은 OOP 개념을 지원
거대한 생태계
오랜 시간 동안 꾸준히 발전해왔으며 웹 개발, 서버 개발, 데이터 처리 등 다양한 분야에서 사용됨

주 기억장치 (뇌)
메모리(RAM - Random Access Memory)
특징 => 휘발성, 빠른 속도
보조 기억장치 (메모)
하드디스트(HDD/SSD)
특징 => 영구저장, 속도 느림
| 구분 | 종류 | 특징 |
|---|---|---|
| RAM | 주 기억장치 | 휘발성, 빠름 |
| HDD/SSD | 보조 기억장치 | 영구저장, 느림 |
컴퓨터의 메모리는 1 Byte 단위로 주소가 매겨져 관리됨 (1 Byte = 8 Bit)
Bit란 ? 메모리의 최소 저장 단위
1 Bit에는 2개의 데이터중 하나를 저장할 수 있음 (0,1)
-> 필요한 데이터의 크기를 판단하고 적당한 크기를 활용해 데이터를 저장하는 것이 좋음
기본적으로 낙타표기법(camelCase) 사용
ex) firstName lastName
패키지 이름
| 규칙 | 나쁜 예시 | 좋은 예시 |
|---|---|---|
| 소문자만 활용(권장) | ⚠️chapTer1 | ✅chapter1 |
| 숫자로 시작 금지 | ❌ 1chapter | ✅ chapter1 |
| 특수문자 사용 금지 | ❌ chapter#1 | ✅ chapter1 |
| 예약어 사용 금지 | ❌class, ❌public, ❌static |
| 규칙 | 나쁜 예시 | 좋은 예시 |
|---|---|---|
| 대문자로 시작 | ❌myNewClass | ✅MyNewClass |
| 카멜케이스 | ❌ My_new_class | ✅ MyNewClass |
| 숫자로 시작 금지 | ❌1MyNewClass | ✅ MyNewClass |
| 특수문자 사용 금지 | ❌ My#New#Class | ✅ MyNewClass |
| 예약어 사용 금지 | ❌ Class, ❌ Public, ❌ Static |
-> 데이터를 컴퓨터에 저장하기 위한 공간 (데이터 저장 공간을 만드는것)
마찬가지로 낙타표기법 사용
변수타입 변수명 ;
ex) int intNumber;
초기화는 0으로 됨
int a = 3;
a= 10;
위처럼 재정의 가능
| 자료형 | 종류 | 범위 | Byte | Bit |
|---|---|---|---|---|
boolean | 논리형 | true/false | 1 | 8 |
char | 문자형 | 0 ~ 65535 유니코드 값 | 2 | 16 |
byte | 정수형 | -128 ~ 127 | 1 | 8 |
short | 정수형 | -32,768 ~ 32,767 | 2 | 16 |
int | 정수형 | -2,147,483,648 ~ 2,147,483,647 | 4 | 32 |
long | 정수형 | -9,233,372,036,854,775,808 ~ | ||
| 9,233,372,036,854,775,807 | 8 | 64 | ||
float | 실수형 | 약 소수점 6~7자리까지 | 4 | 32 |
double | 실수형 | 약 소수점 15~17자리까지 | 8 | 64 |
double doubleNum = 3.1;
int intNum = (int)doubleNum;
명시적 변환 o
int intNum = 3;
double doubleNum = intNum;
명시적 변환 필요 x
System.out.print();
System.out.println();
| 출력 방법 | 설명 |
|---|---|
| System.out.print() | 줄 바꿈 없이 출력 |
| System.out.println() | 출력 후 줄 바꿈 |
print()는 개행문자 (\n)가 생략된 것
입력이란? : 데이터를 자바 세상으로 전달하는 것 -> 객체 (Scanner 사용)
스캐너(Scanner) 객체 생성
Scanner scanner = new Scanner(System.in);
스캐너를 사용하려면 스캐너 변수를 먼저 생성해줘야함
이 후 스캔한 값 변수에 담기
import java.util.Scanner;
int scan = scanner.nextInt();
스캐너를 사용하려면 import 반드시 되어야함
int a = 5;
int b = 2;
int sum = a + b; //7
int sub = a - b; //3
int mul = a * b; //10
int div = (double) (a / b); //2.5
일반적인 연산자 사용 가능
나눗셈의 경우 소숫점 활용을 위해 캐스팅 해줘야함
int a = 5;
int b = 2;
int mod = a % b; //1
a를 b로 나누고 남은 값을 반환해줌
(홀수나 짝수를 찾아야할 경우 유용하게 사용)
int a = 5;
a += 1; //6
a -= 1; //5
a *= 2; //10
a /= 2; //5
a %= 2; //1
a의 값을 계산 후 다시 할당해줌
a += 1;은 a = a + 1; 과 같음
++a;
--a;
연산 후 값을 활용
a++;
a--;
값 활용 후 연산
int a = 1;
inb b = 2;
a > b
a < b
a >= b
a <= b
true false로 반환 (boolean 타입으로 값 받아줘야함)
int a = 1;
int b = 2;
a > 0 && b > 0
a > 0 || b < 0
a != b
마찬가지로 boolean 타입으로 반환
문자열은 (==) 사용이 아닌 .equals로 비교
동등성 & 동일성
클래스에서 적으면 더 좋을 내용이지만 간략하게 정리하자면
(==)는 두 객체가 동일한가를 판별
ex) int형 변수 a와 b의 값이 일치하는지를 확인함
(.equals)는 두 객체가 논리적으로 동등한가를 판별
String은 객체이므로 참조값을 가지고 있음
(==)연산자를 사용하게 되면 같은 문장이더라도 안에 들어있는 참조가 다르므로 무조건 false 반환
(.equals)를 사용하게 되면 String 객체안에 toString()이 오버라이딩 되어있으므로 객체에 대한 참조가 아닌 참조 안에 들어있는 hashcode의 값이 동일한지를 확인
산술 -> 비교 -> 논리 -> 대입 순으로 진행
boolean result = 10 + 5 > 12 && true;
// 실행 순서 (10 + 5) > 12 && true : 산술
// → 15 > 12 && true : 비교
// → true && true : 논리
// → result = true 대입