[Java] JDBC의 Statement와 PreparedStatement
·
Back end/Java
데이터베이스와 통신하는 Java 애플리케이션을 개발할 때, JDBC를 통해 SQL을 실행하게 됩니다. 이때 Statement와 PreparedStatement 중 어떤 것을 사용하느냐에 따라 애플리케이션의 성능과 보안이 크게 달라집니다.Statement: 유연하지만 위험한 방식Statement는 가장 기본적인 SQL 실행 방식입니다. 쿼리를 작성할 때 문자열 연결(String concatenation)을 통해 동적으로 SQL을 구성합니다.String userId = "user123";String sql = "SELECT * FROM users WHERE id = '" + userId + "'";Statement stmt = connection.createStatement();ResultSet rs = s..
AtomicInteger는 어떻게 동시성을 보장할까? - CAS 알고리즘 깊이 파헤치기
·
Back end/Java
들어가며이런 질문을 받았습니다."일반 int에 synchronized를 걸지 않고 100개 스레드가 각각 +1을 하면 결과가 100이 안 나올 수 있습니다. 하지만 AtomicInteger.addAndGet()을 사용하면 락 없이도 정확히 100이 보장됩니다. 어떻게 이게 가능한가요?당시에는 제대로 답변하지 못했지만, 이후 학습을 통해 그 원리를 정리해보았습니다.문제 상황: Race Condition먼저 문제를 명확히 해봅시다.// 문제가 되는 코드private int counter = 0;// 100개의 스레드가 동시에 실행public void increment() { counter++; // 이 한 줄이 사실은 3개의 작업!}counter++는 원자적(atomic) 연산이 아닙니다. 실제로는:R..
[Java] static import 활용법
·
Back end/Java
테스트 코드를 작성하다 보면 Assertions.assertThat(...) 같은 코드가 반복됩니다. 이럴 때 static import를 사용하면, 훨씬 간결하고 깔끔한 테스트 코드를 만들 수 있습니다.🔍 예제 전후 비교📌 Before: 일반 import 사용import org.assertj.core.api.Assertions;...Assertions.assertThat(discount).isEqualTo(1000);📌 After: static import 사용import static org.assertj.core.api.Assertions.assertThat;...assertThat(discount).isEqualTo(1000);✅ assertThat을 바로 사용할 수 있어서 코드가 훨씬 깔끔해졌..
[Java] 자바 데이터 타입 (기본형, 참조형)
·
Back end/Java
자바는 정적 타입 언어로, 변수를 선언할 때 데이터 타입을 명시해야 합니다.자바의 데이터 타입은 크게 다음 두 가지로 나뉩니다.기본형 (Primitive Type)참조형 (Reference Type)🔢 기본형 타입 (Primitive Type)기본형 타입은 값 자체를 메모리에 저장합니다.자바에는 총 8가지 기본형 타입이 있으며, 성능이 중요한 영역에서 자주 사용됩니다.분류 타입 크기 예시논리형boolean1 bytetrue, false문자형char2 byte'a', '1'정수형byte, short, int, long1~8 byteint x = 59;, long big = 123L;실수형float, double4, 8 bytefloat f = 3.14f;, double d = 3.14;📌 Tip: 숫자..
[Java] 상수(Constant)
·
Back end/Java
🔒 상수란?상수(Constant)는 한 번만 값을 저장할 수 있는 메모리 공간입니다.프로그램 실행 중 절대 변경되어서는 안 되는 값을 의미하며, final 키워드를 사용하여 선언합니다.final int J = 10;// J는 한 번만 값을 저장할 수 있음📌 상수의 명명 관례모두 대문자로 작성여러 단어는 밑줄(_)로 구분예: MAX_COUNT, PI, DEFAULT_TIMEOUT❓ 상수는 언제 사용할까?값이 절대 바뀌면 안 되는 경우예: 원주율(π), 최대 접속 수, 세율 등숫자나 값의 의미를 명확하게 하고 싶을 때→ 매직 넘버 대신 의미 있는 상수명을 사용하여 코드 가독성 향상✅ 상수 사용 예제public class ConstantExam { public static void main(Strin..
[Java] 변수(variable)
·
Back end/Java
✅ 변수란? 변수(variable)는 값을 저장할 수 있는 메모리 공간입니다.자바에서는 데이터를 저장하고 처리하기 위해 변수를 반드시 선언해야 하며,변수에 저장된 값은 언제든 변경할 수 있습니다. ✅ 변수 선언 방법 자바에서 변수를 사용하려면 선언(Declaration)이 필요합니다.int count; // 정수를 저장할 수 있는 변수 count 선언double average; // 실수를 저장할 수 있는 변수 average 선언형식은 다음과 같습니다.타입 변수명;타입(type)은 변수에 저장될 값의 종류(예: 정수, 실수 등)를 지정하며, 변수명은 메모리 공간을 구분짓는 이름입니다. 이러한 이름은 식별자(identifier)라고 하며, 클래스, 메서드, 변수 등에 붙는 이름입니다.🔐 ..
[Java] 주석의 종류 (구현 주석, 문서화 주석)
·
Back end/Java
💡 주석이란?주석은 코드에 대한 설명을 작성하기 위한 용도로, 프로그램의 실행에는 영향을 주지 않습니다.가독성을 높이고, 협업 시 의도를 명확하게 전달하거나 문서를 생성하는 데 사용됩니다.📝 주석의 종류1. 구현 주석 (Implementation Comment)코드의 흐름을 이해하기 쉽도록 설명을 덧붙이는 주석으로, 두 가지 방식이 있습니다. 📌 행 단위 주석 (//)한 줄에 대한 주석을 작성할 때 사용합니다.int score = 90; // 학생의 점수를 저장하는 변수💡 단축키 팁대부분의 IDE(예: IntelliJ, Eclipse, VS Code)에서는 Ctrl + / 단축키를 사용하여 해당 줄을 주석 처리하거나 해제할 수 있습니다.Mac 사용자의 경우 Command + / 를 사용하세요. ?..
[Java] CMD에서 Java 파일 컴파일 및 실행하기 (HelloWorld.java 예제)
·
Back end/Java
Java를 처음 접하는 분들을 위해 HelloWorld 프로그램을 작성하고, 컴파일하고, 실행하는 전 과정을 소개합니다. ✅ 1. 소스코드 작성c:\test 디렉토리에 HelloWorld.java 파일을 생성합니다.아래와 같이 Java 소스 코드를 작성합니다.public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }}💡 클래스 이름과 파일명은 반드시 동일해야 합니다. (HelloWorld.java)✅ 2. 컴파일 하기1. Windows 키를 눌러 cmd를 입력 후 명령 프롬프트(cmd)를 실행합니다.2. 아래 명령어를 입력해 소스 파일이 위치한 폴더로 이..