본문 바로가기

우아한테크코스 4기/레벨125

[Java] JDBC API Statement vs PreparedStatement 오늘 제이슨의 수업에서 mysql을 docker container에 올려 실행하는 방법과 간단한 jdbc api 사용법, sql 문법에 대해 배웠습니다. 수업 진행 중 제이슨이 "Statement 와 PreparedStatement가 있는데 차이는 누가 블로그에 올리겠죠." 라고 했고 저는 이 블로그 각을 놓칠 수 없었습니다. 옛날에 JDBC를 공부하던 때의 기억을 되살려 한 번 Statement vs PreparedStatement를 비교하여 포스팅을 해보고자 합니다. 원문은 baeldung 에서 확인할 수 있고 이 포스팅은 원문을 조금 이해하기 쉽게 설명하고자 합니다.. Statement vs PreparedStatement JDBC API에는 두가지 인터페이스가 존재합니다. (인터페이스의 구현체는 .. 2022. 3. 29.
[Java] Singleton LazyHolder는 왜 Thread safe 한가? Singleton 패턴에 대해 공부하다보면 쓰레드로부터 안전한 코드를 작성해야 한다는 이야기를 들어보셨을 것입니다. 그덕에 알게되는 여러가지 방법이 있습니다. Enum을 이용해 Singleton을 보장한다. synchronized 키워드를 메서드에 추가한다. synchronized 블럭을 lazy 생성 조건문 내부에 추가한다. 내부 정적 클래스를 구현하여 내부 클래스에서 생성된 인스턴스를 가져온다. 이 방법들 중에서도 1 ~ 3 번은 각각 단점들이 존재하여 현재는 잘 사용하지 않는 다고 알려져 있습니다. Enum 같은 경우는 상태 정보를 가질 수 없고 synchronized 키워드는 에러 혹은 성능저하를 동반한다. 덕분에 우리는 4번 내부 정적 클래스를 구현하여 내부 클래스에서 생성된 인스턴스를 가져온다.. 2022. 3. 16.
[Java] 전략패턴 디자인 패턴 디자인 패턴이란 객체 지향 설계 과정에서 빈번하게 사용되는 설계를 모아 패턴화 한 것입니다. 즉, 재설계를 최소화 하며 요구사항의 변화를 수용할 수 있는 패턴을 정리한 것이라고 생각하면 좋습니다. 아래 예시를 보겠습니다. // 만약 Grade가 z까지 있다면...?? 후..;; public String calculateGrade(final int score) { if (score < 50) { return "F"; } else if (score < 60) { return "D"; } else if (score < 70) { return "C"; } else if (score < 80) { return "B"; } else if (score < 90) { return "A"; } else { .. 2022. 3. 15.
[Java] 의존성 역전 원칙 의존성 역전 원칙에 대해 들어본적 있으신가요? 흔히들 객체지향의 핵심 원칙으로 SOLID를 알고 계실텐데요, 의존성 역전 원칙은 DIP로 객체지향 핵심 원칙의 다섯번째 원칙입니다. 오늘 포스팅에서는 의존성 역전 원칙의 개념에 대해 학습하고 직접 코드를 작성하며 왜 이 원칙을 지켜야 하는가에 대해 몸소 느껴보고자 합니다. DIP DIP는 고수준 모듈을 참조하여 예상치 못한 의존성의 변화를 줄이고자 생겨난 원칙입니다. 여기서 고수준 모듈과 저수준 모듈에 대한 궁금증이 들텐데요. 과연 이 둘은 무슨 의미일까요? 고수준 모듈 상위 수준의 정책으로 하나의 큰 기능이라고 볼 수 있습니다. 간단하게 자바의 Interface를 생각하면 됩니다. 저수준 모듈 고수준 모듈의 기능을 구현하기 위해 필요한 상세 기능. 즉, .. 2022. 3. 7.
[Java] Synchronized 이해하기 자바에서는 멀티 쓰레드 환경에서 안정성을 부여하기 위해 synchronized라는 예약어를 제공합니다. 하지만 일반적으로 순수 자바로 프로그래밍을 하다보면 멀티 쓰레드를 경험할 일이 없어 해당 예약어에 대해 이해하는 것이 어려운데요. 이번 포스팅에는 synchronized예약어를 이해하고 간단하게 실습하는 시간을 갖고자 합니다. 소스코드 synchronized란? synchronized는 사전적으로 동시에 일어나다. 라는 의미를 갖고 있습니다. 그 의미처럼 자바에서도 동시에 일어나는 일에 대해 안정적으로 처리하기 위해 해당 키워드가 생겼습니다. 동시에 하나의 객체에 접근하는 여러 쓰레드에 대해 , 하나씩 들어오세요하며 안내하는 존재라고 생각하면 쉬울 것 같습니다. synchronized는 메서드와 블록으.. 2022. 3. 5.
[Java] StringBuilder와 String 연산 살짝 파보기 최근 미션을 진행하면서 output을 출력할 때 String 연산을 사용한다 vs StringBuilder를 사용한다로 선택지가 나뉘고 있습니다. 지난 백엔드 String 강의에서 네오가 ByteCode를 비교해준 것을 토대로 앞으로의 미션동안 제가 직접 사용할 output 연산에 대한 의사결정을 해보고자 합니다. String 연산의 발전 JDK 5 JDK 5 버전부터 String 연산은 JVM에서 StringBuilder로 최적화 되어 연산되었습니다. 아래 코드를 실행시켜봅시다. public String concat(String s, int i) { return s + i; } javap -c 명령어를 통해 바이트 코드를 간소화해서 확인해보면 아래와 같습니다. java.lang.String concat.. 2022. 3. 3.