전체 글

개발에 관심있는 컴공 학부생 입니다 :)
·WEB
스레드에 대한 자세한 설명은 스레드란 무엇인가?를 보면 될 거 같다. 스레드(Thread)란?간단하게 말해서 스레드는 일꾼이다. 하나의 프로세스 내에서 작업을 처리하는 단위로, 컴퓨터의 CPU는 스레드 단위로 작업을 처리한다. CPU는 매우 짧은 시간 동안 여러 작업을 번갈아 가면서 처리하기 때문에, 사용자 입장에서는 동시에 여러 작업이 실행되는 것처럼 보이지만 사실은 여러 스레드가 번갈아가면서 작업을 수행하는 것이다. 스레드가 많으면 좋을까?스레드가 많다고 해서 무조건 좋은 것은 아니다. 스레드를 많이 생성하면 다음과 같은 문제들이 발생할 수 있다.메모리 소모: 스레드가 생성될 때마다 메모리를 사용하기 때문에, 스레드가 많아지면 메모리 부족 문제가 발생할 수 있다.Race Condition: 여러 스레..
·JAVA
GC(Garbage Collection)란?JVM에서 메모리를 관리해 주기 때문에 더 이상 사용하지 않는 객체를 청소해 주는 작업이다. Java의 Heap 메모리 구조Java의 Heap 메모리는 객체가 동적으로 생성되고 관리되는 메모리 영역이다. 이 메모리는 크게 Young 영역과 Old 영역으로 나뉜다. Young 영역은 다시 Eden 영역과 Survivor 영역으로 세분화된다.1. Young 영역Young 영역은 상대적으로 짧은 생애를 가진 객체들이 위치하는 영역이다. 이 영역은 두 부분으로 나뉜다.Eden 영역: 새로운 객체가 생성되는 영역이다. 모든 객체는 처음에 Eden 영역에 생성된다.Survivor 영역: Eden 영역에서 살아남은 객체들이 이동하는 영역이다. Survivor 영역은 두 개로..
·JAVA
Java에서 final 키워드는 불변성을 보장하고 의도하지 않은 변경을 방지하기 위해 사용되는 강력한 기능이다. 이 포스트에서는 메서드 파라미터와 객체 필드에 final을 사용하는 이유에 대해 작성해보려고 한다. final 이란?final은 변수, 메서드, 클래스 등에 사용될 수 있는 키워드로, 변경이 불가능하거나 상속이나 오버라이딩을 금지할 때 사용되며 주로 불변성(immutability)을 보장하기 위해 사용된다. 메서드 파라미터에 final 사용 이유의도하지 않은 수정 방지: 파라미터를 final로 선언하면 메서드 내부에서 해당 파라미터의 값을 재할당할 수 없게 된다. 이로 인해 파라미터를 의도하지 않게 변경하는 것을 방지할 수 있다.public Player(final List playerNumbe..
·회고
이번 계산기 프로젝트에서 발생한 문제와 그 해결 방법을 정리하려고 한다.문제 상황ArithmeticCalculator 객체를 매번 새로 생성할 때, 계산 결과가 results 리스트에 저장되지 않는 문제가 발생했다. 이는 매번 객체가 새로 생성되면서, 결과가 저장되지 않고 사라지는 상황이었다.public void start() { while (true) { ... ArithmeticCalculator arithmeticCalculator = new ArithmeticCalculator(firstNumber, secondNumber, operation); Number answer = arithmeticCalculator.calculate(); ..
·JAVA
Garbage Collection이란?Garbage Collection(GC)은 메모리 관리를 자동으로 처리해 주는 기능이다. Java, Kotlin 같은 언어에서는 개발자가 직접 메모리를 해제하지 않아도 되는데, 그 이유가 바로 이 GC 덕분이다. C 언어에서는 free()를 호출해 사용한 메모리를 수동으로 정리해야 하지만, Java는 JVM이 주기적으로 불필요한 객체를 감지하고 제거해 준다. Java에서는 메모리 누수를 막기 위해 System.gc()로 GC를 강제 호출할 수도 있지만, 이 방법은 성능 문제를 일으킬 수 있으니 사용하지 않는 것이 좋다. Minor GC와 Major GCJVM의 힙 메모리는 크게 두 영역으로 나뉜다: Young Generation과 Old Generation이다. 이 ..
·WEB
트랜잭션(Transaction)이란?트랜잭션은 "더 이상 나눌 수 없는 작업의 단위"를 의미한다. 데이터베이스에서 여러 작업을 하나로 묶어 처리할 때 사용되며, 트랜잭션이 성공하면 모든 작업이 적용되고, 실패하면 아예 적용되지 않도록 하여 데이터를 안전하게 처리할 수 있다. 트랜잭션의 속성트랜잭션은 ACID라는 네 가지 중요한 속성을 가진다.원자성 (Atomicity): 트랜잭션 내의 모든 작업은 하나의 단위로 실행되며, 하나라도 실패하면 전체 작업이 취소(rollback)되어 데이터에 아무 영향도 없게 된다.일관성 (Consistency): 트랜잭션이 끝난 후 데이터는 항상 일관성을 유지해야 한다. 데이터베이스의 규칙을 어기지 않도록 보장하는 것이다.격리성 (Isolation): 여러 트랜잭션이 동시에..
·JAVA
제네릭(Generic)제네릭은 클래스나 메서드에서 사용되며, 코드의 재사용성을 높이고 타입 안전성을 보장하기 위해 사용된다.와 같은 형태로 사용하며, 여기서 T는 타입 변수(type variable)라고 한다.보통 T, E, K, V 같은 이름을 자바 컨벤션으로 사용하지만, 다른 이름을 써도 된다. 하지만 자주 쓰이는 이름을 사용하면 혼란을 줄일 수 있다. 제네릭 클래스 예시public class Generic { public E multiTypeMethod(T t, U u) { ... }}Generic instance = new Generic();instance.multiTypeMethod(longVal, intVal);위 예시처럼 여러 개의 타입 변수를 사용할 수 있다. 제네릭 ..
·JAVA
개요객체 지향 프로그래밍에서 추상 클래스(Abstract Class)와 인터페이스(Interface)는 중요한 개념이다. 이 두 가지는 코드의 재사용성과 유지 보수성을 높이는 데 도움을 주지만, 사용 방법과 목적에서 차이가 있다. 이번 포스팅에서는 추상 클래스와 인터페이스의 개념과 차이점을 명확히 하고, 언제 어떤 것을 사용해야 하는지에 대해 알아보겠다. 추상 클래스추상 클래스는 클래스 간의 공통적인 기능을 정의하기 위한 미완성 설계도이다.abstract 키워드를 사용하여 선언하며, 완성되지 않은 추상 메서드와 일반 메서드를 모두 포함할 수 있다.public abstract class 추상클래스명 {}예를 들어, 다음과 같이 LibraryItem이라는 추상 클래스를 선언할 수 있다.추상메서드가 없어도 추..
·WEB
JUnit이란?JUnit은 자동화된 테스트를 쉽게 작성하고 실행할 수 있게 해 주며, 테스트 결과를 빠르게 피드백받을 수 있어 개발자들이 선호하는 프레임워크이다.현재 많이 사용되는 건 JUnit 5이며, 자바 8 이상을 필요로 한다.단위 테스트단위란 엄격하게 정해져 있지는 않지만, 일반적으로 클래스 또는 메서드 수준으로 정해진다.그래서 구현 목표에 맞게 잘 동작하는지 확인하는 것이 중요하다. 단위 테스트의 장점단위 테스트는 주로 하나의 메서드를 단위로 테스트하기 때문에, 코드를 변경해도 기존에 작성한 테스트 코드만 돌려보면 변경 사항이 기존 기능에 영향을 미쳤는지 빠르게 확인할 수 있다. 이렇게 하면 새로운 기능을 추가하거나 기존 코드를 수정할 때 더 안전하게 작업할 수 있는 장점이 있다. Annotat..
·WEB
데이터베이스는 현대 소프트웨어 개발에서 데이터를 저장하고 관리하는 핵심 요소이다. 오늘은 가장 많이 사용되는 데이터베이스 유형인 관계형 데이터베이스(RDB)와 비관계형 데이터베이스(NoSQL)에 대해 깊이 있게 알아보고, 각각의 특징, 장단점을 다뤄볼 것이다.RDB (Relational Database)란?사전에 엄격하게 정의된 DB schema를 가진 테이블 기반형식으로 저장하는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다. 장점엄격한 데이터 구조데이터가 구조화되어 있고, 외래 키(foreign key)와 같은 제약 조건(constraints)을 통해 데이터 간의 일관성을 유지할 수 있다. 트랜잭션 지원원자성, 일관성, 격리성, 지속성(ACID)이라는 ..
유선준
개발 일기 블로그