DEV/cs 6

[CS] TCP vs UDP, 뭐가 다른가

TCP와 UDP의 차이, 3-way handshake가 뭔지, 각각 언제 쓰는지 간단히 정리했습니다.공통점둘 다 OSI 전송 계층(4계층) 프로토콜로, 데이터를 "어느 포트로 보낼지" 정해서 전달하는 역할을 합니다. 차이는 연결을 맺고 전달을 보장하느냐에 있습니다. TCP: 연결형, 신뢰성 보장데이터를 보내기 전에 먼저 "연결"을 맺고, 상대가 잘 받았는지 확인해가며 순서대로 전달합니다.연결 설정: 3-way handshake로 연결을 맺은 뒤에만 데이터 전송 시작신뢰성: 패킷이 유실되면 재전송, 순서가 바뀌면 재정렬속도: 확인 절차가 있어서 UDP보다 느림예시: 웹(HTTP), 이메일, 파일 전송처럼 데이터가 하나라도 빠지면 안 되는 경우 UDP: 비연결형, 속도 우선연결 설정 없이 바로 데이터를 보내..

DEV/cs 2026.09.18

[CS] 데드락(Deadlock)이란 - 발생 조건과 해결 방법

데드락이 뭐고 왜 생기는지, 발생하는 4가지 조건과 예방/해결 방법을 자바 예시와 함께 정리했습니다.데드락이란두 개 이상의 스레드(또는 프로세스)가 서로가 가진 자원을 기다리느라, 아무도 진행하지 못하고 영원히 멈춰버리는 상태입니다. java// 스레드 A: lock1을 잡고 lock2를 기다림synchronized (lock1) { synchronized (lock2) { ... }}// 스레드 B: lock2를 잡고 lock1을 기다림synchronized (lock2) { synchronized (lock1) { ... }}A가 lock1을 잡은 채 lock2를 기다리는데, 마침 B가 lock2를 잡은 채 lock1을 기다리고 있으면 둘 다 영원히 풀리지 않습니다. 이게 데드락입니다.발생..

DEV/cs 2026.09.17

[CS] JAVA 가비지 컬렉션(GC)이란

자바 가비지 컬렉션이 뭐고 왜 필요한지, Young/Old 영역 구조와 동작 원리를 간단히 정리했습니다.가비지 컬렉션이란더 이상 사용하지 않는 객체를 JVM이 자동으로 찾아서 메모리에서 해제해주는 기능입니다. C/C++처럼 개발자가 직접 free()를 호출해 메모리를 해제할 필요 없이, JVM이 "누구도 참조하지 않는 객체"를 판단해서 알아서 치워줍니다. javaObject obj = new Object(); // 힙에 객체 생성, obj가 참조obj = null; // 참조를 끊음 → 이 객체는 이제 아무도 참조하지 않음(가비지)// GC가 실행되면 이 객체가 메모리에서 회수됨가비지인지 어떻게 판단하나간단히 말하면, 아무 변수도 가리키고 있지 않은 객체가 가비지입니다. 위 예시처럼 obj = null을..

DEV/cs 2026.09.16

[CS] JAVA 인터페이스 vs 추상클래스, 뭐가 다른가

인터페이스와 추상클래스의 차이를, 코드 예시와 함께 간단히 정리했습니다.인터페이스와 추상클래스는 모두 객체지향 프로그래밍에서 공통된 규칙이나 기능을 정의하기 위해 사용합니다.하지만 가장 큰 차이는 “무엇을 위한 것인가?”입니다.인터페이스 → 클래스가 어떤 기능을 해야 하는지 규격을 정하는 것추상클래스 → 여러 클래스가 공통으로 사용하는 기능을 물려주는 것인터페이스(Interface)인터페이스는 클래스가 어떤 동작을 반드시 제공해야 하는지 규격(계약)을 정의합니다.interface Flyable { void fly();}interface Swimmable { void swim();}Flyable은 "날 수 있어야 한다"는 규격을 정의하고,Swimmable은 "헤엄칠 수 있어야 한다"는 규격을 정..

DEV/cs 2026.09.15

[CS] 객체지향과 절차지향 프로그래밍이란, 비교

절차지향과 객체지향 프로그래밍이 뭐가 다른지, 같은 예제를 두 방식으로 짜보면서 비교했습니다. 절차지향(Procedural)이란"데이터"와 "그 데이터를 처리하는 함수"를 분리해서, 위에서 아래로 순서대로 실행되는 절차(함수 호출) 중심으로 프로그램을 짜는 방식입니다.C언어가 대표적입니다.// 절차지향 스타일: 데이터(구조체 느낌)와 함수가 분리됨class Account { int balance;}class AccountService { static void withdraw(Account account, int amount) { if (account.balance Account는 데이터만 가지고 있고, withdraw라는 함수가 그 데이터를 밖에서 조작합니다. 데이터와 로직이 따로..

DEV/cs 2026.09.14

[CS] 전략 패턴(Strategy Pattern)이란

같은 문제를 해결하는 여러 알고리즘을 각각 캡슐화해서 런타임에 교체 가능하게 만드는 전략 패턴을, 간단한 자바 예시로 정리했습니다.전략 패턴이란같은 문제를 해결하는 여러 알고리즘을 각각 캡슐화하여, 런타임(실행 시점)에 교체 가능하도록 만드는 행동 디자인 패턴입니다. "어떻게 할지(How)"를 사용하는 쪽(Context)에서 분리해서, 알고리즘(Strategy)만 갈아끼울 수 있게 만드는 게 핵심입니다.예시: 결제 수단결제 수단이 카드/카카오페이/포인트로 여러 개 있고, 상황에 따라 골라 써야 하는 경우를 생각해보겠습니다 나쁜 예 (if-else로 분기)javapublic void pay(String type, int amount) { if (type.equals("CARD")) { /..

DEV/cs 2026.09.11