
private란? 클래스 안에 선언된 변수(필드)나 메서드(함수)를 외부에서 직접 접근 못하게 막는 접근 제어자
정보 은닉: 객체 내부 구현은 숨기고, 필요한 인터페이스만 공개
유지보수와 안정성 확보: 필드를 보호해서 버그가 생길 가능성을 줄임. 나중에 코드 구조가 바뀌어도 외부 코드는 안 바꿔도 됨
getter란? 객체의 private 필드 값을 읽을 수 있게 해주는 메서드
외부에서 직접적인 접근은 불가능하지만
todo.getTask(); // 읽기는 가능
setter란? 객체의 private 필드 값을 수정할 수 있게 해주는 메서드
외부에서 todo.setTask("새 할 일"); 같은 식으로 변경 가능
무결성이란? 데이터가 엉망으로 바뀌지 않도록, 일관성 있게 유지되는 상태
인터페이스의 다형성이란?
인터페이스 타입(예: List)으로 선언하고, 다양한 구현체(예: ArrayList, LinkedList)를 넣어서 쓸 수 있는 것
→ 코드의 유연성과 확장성을 높이기 위한 방법!
List, Map, Set, Runnable 등은 모두 인터페이스
isValidIndex()란?
사용자가 입력한 번호(인덱스)가 리스트의 범위 안에 있는지 확인하는 메서드
private boolean isValidIndex(int index) {
return index >= 0 && index < todos.size();
}
@BeforeEach는 테스트 하기 전 사전 설정
각 테스트 메서드 실행 직전에 무조건 자동 호출
→ 모든 테스트마다 똑같은 준비 코드 반복하고 싶지 않을 때, 테스트 간의 영향 방지 (독립성 보장)
@AfterEach
각 테스트 메서드가 끝나고 자동 실행
테스트 후 정리 작업, 테스트 간 간섭 방지, 코드 반복 방지
실전 로직 구성 능력 강화
학습 내용을 문서화해 장기 기억 강화
10926 입출력을 응용하는 문제
18108 식을 직접 세워서 계산하는 문제
10430 네 개의 계산식을 계산하는 문제.
프로세스, 쓰레드
메모리 구조 (Stack vs Heap)
스케줄링 알고리즘 (FCFS, RR, SJF)
import java.util.Scanner;
public class in_output {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(str + "??!");
}
}
📝 설명:
사용자로부터 문자열을 입력받고, 뒤에 "??!"를 붙여 출력하는 간단한 입출력 문제.
→ Scanner.nextLine() 사용하여 전체 라인을 입력받음
import java.util.Scanner;
public class Year {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
sc.nextLine();
System.out.println(year - 543);
}
}
📝 설명:
태국 불기(B.E.) 기준 연도를 입력받아, 서기(A.D.)로 바꾸는 문제.
→ 예시 입력값을 통해 불기 - 543 = 서기라는 사실을 추론. 간단한 수식으로 해결
import java.util.Scanner;
public class ModularCalc {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
sc.nextLine();
System.out.println((a + b) % c);
System.out.println(((a % c) + (b % c)) % c);
System.out.println((a * b) % c);
System.out.println(((a % c) * (b % c)) % c);
}
}
📝 설명:
세 정수 A, B, C를 이용한 모듈러 연산 비교 문제.
→ (A+B)%C == ((A%C)+(B%C))%C
→ (A×B)%C == ((A%C)×(B%C))%C
→ 수학적 분배법칙을 코드로 실습하며 이해하는 문제
생각보다 나 잘 풀기도 ..? 자신감 상승
나 천잰가? 막힘 없이 풀어버리네 ㅋㅋ
이건 랭크 몇 등급 짜리일까? 브론즈 5란다… 게임도 다 브론즈부터 시작하니까~
프로세스(Process)는 실행 중인 프로그램의 인스턴스(instance)이며,
운영체제로부터 CPU 시간, 메모리(RAM), 파일 핸들 등 자원을 할당받아
독립적으로 실행되는 작업 단위다.
프로그램은 코드 파일(정적 자원)이고,
실행되면 그 안에 정의된 클래스와 객체들이 메모리(RAM)에 올라가며
이들이 자원을 사용하면서 작동하는 상태가 바로 프로세스다.
스레드(Thread)는 프로세스 내부에서 실제 작업을 수행하는 실행 흐름 단위다.
하나의 프로세스는 하나 이상의 스레드(멀티스레딩)를 가질 수 있고,
이 스레드들은 프로세스의 자원(Heap, Method Area 등)을 공유하면서
동시에 병렬 작업을 수행할 수 있다.
스레드를 얘기하면 메모리 구조가 꼭 따라온다.
그 이유는, 스레드들이 RAM의 특정 영역(Stack, Heap 등)을 사용해 프로그램을 실행하기 때문이다.
자바의 메모리 구조
┌───────────────┐
│ Method Area │ ← 클래스, static, 상수 등
├───────────────┤
│ Heap │ ← new로 생성된 객체(인스턴스) 저장
├───────────────┤
│ Stack │ ← 함수 호출, 지역 변수 (스레드마다 개별)
└───────────────┘
함수 호출, 지역변수 등이 저장되는 공간
LIFO 구조 (Last In First Out)
스레드마다 독립적으로 존재
호출 → Stack에 쌓이고 / 종료 → Stack에서 제거
빠르지만 공간이 제한됨 → StackOverflowError 발생 가능
public class Main {
public static void main(String[] args) {
int x = 5;
String name = "Alice";
greet(name);
}
public static void greet(String target) {
String msg = "Hello " + target;
System.out.println(msg);
}
}
new로 생성된 객체가 저장되는 공간
예: String name = new String("hi"); → "hi"는 Heap에 저장
여러 스레드가 공유 가능
Garbage Collector(GC)가 자동으로 회수
느리지만 유연함 (동적 메모리)
디버깅할때 어디서 메모리 문제가 발생했는지 파악 가능
스레드동기화 Heap은 공유되므로 경쟁 조건(race condition) 발생 가능
운영체제가 여러 프로세스/스레드를 어떻게 순서대로 실행할지 정하는 규칙
먼저 도착한 프로세스가 먼저 실행됨
A(0s, 4s), B(1s, 2s), C(2s, 1s) → 순서: A → B → C
구현이 간단하지만
→ Convoy Effect 발생 가능 (느린 작업이 전체를 막음)
각 프로세스에 일정 시간(time quantum)을 주고 돌아가며 실행
Time Quantum = 2초
→ A(5s), B(3s), C(1s) → A→B→C→A→B→A
장점: 빠른 응답 시간, 굶는 작업 없음
단점: 컨텍스트 스위칭 오버헤드 발생 (전환 비용)
실행 시간이 가장 짧은 작업을 먼저 실행
A(8s), B(4s), C(2s) → C → B → A
장점: 평균 대기 시간 최소
단점: 실행 시간 예측 어려움, Starvation 발생 가능
오늘 오랜만에 백준 문제를 풀었는데
너무 잘 풀려서 기분이 너무 좋았다.
나 천잰가 하고 난이도를 봤더니… 브론즈 5^^ 하하 ;;;
근데 게임도 처음엔 다 브론즈니까!
난 챌린저 가버릴 거야.
CS 공부를 본격적으로 시작했는데
프로그램 - 프로세스 - 스레드 이 차이점을 알게 되었고,
스레드는 그냥 CPU의 손이라고만 생각하고 있었는데,
생각보다 많은 내용들이 있어서 당황했다.
갑자기 Heap? Stack?
"풀스택"에 그거? 막 이러면서
열심히 자료조사하고 GPT랑 씨름해서
어느 정도 머릿속에 들어왔다.
벌써 5일차라니 시간 진짜 빠르다… 근데 하루도 허투로 쓰지 않았다는거!!
오늘도 멋있다 나!