본문 바로가기

분류 전체보기

(107)
[Java] HashTable, ConcurrentHashMap에 대해서 HashTable vs HashMap Java를 사용하면서 HashMap은 많이 사용해봤지만 HashTable은 들어만 보고 거의 사용해본 적은 없는 것 같습니다. 하지만 DB나 여러 라이브러리에서 사용하고 있을 것으로 생각이 되어서 정리해보려 합니다. 우선은 ConcurrentHashMap을 알아보기 전에 HashMap과의 차이를 알아보겠습니다. HashTable은 HashMap과 매우 유사합니다. 아래에서 사용법을 알아볼텐데 메서드 명조차 거의 동일합니다. 가장 큰 차이점은 Thread-safe 여부입니다. HashTable 내부에서는 synchronized 키워드를 이용해 Thread-safe하도록 구현되어 있습니다. 이외에도 Key값에 Null을 허용하는지 여부와 에러를 발생시킬 수 있는 코드를 ..
[Kotlin] 코틀린과 자바의 차이 저는 Java를 주로 사용합니다. 그런데 취미로 Flutter를 이용해서 앱을 만들어보려고 하던 중 Java와 완전호환성을 가지고 있고 새로운 언어인 Kotlin에 관심이 가더라구요. 하지만 Java보다 어떤것이 더 나은지 아니면 차이점은 무엇인지 정도는 알고 써야 제가 익숙한 Java를 사용하지 않는 이점이 있을 것 같아서 찾아보고 정리하게 되었습니다. kotlin이란 Java Platform을 대상으로 하는 새로운 프로그래밍 언어로서 즉, JVM에서 돌아가는 언어이다. Jetbrains에서 만들었다. Kotiln의 철학 실용성 Kotlin은 다른 프로그래밍 언어가 채택한 검증된 해법과 기능을 사용하여 복잡도를 줄인 실용적인 언어를 지향하고 있습니다. 간결성 코드를 더 간단하고 간결하게 만들어 내용을 ..
[Java] this 키워드에 관해서 this 키워드 java를 사용하다보면 this.~~ 방식으로 사용하는 키워드를 보게 됩니다. 단순하게는 객체 자기 자신을 가르킨다라고 생각하면 되는데요. 사용하다가 약간의 헷갈리는 부분이 생겨서 정리하게 됐습니다. this 키워드의 역할 클래스가 인스턴스화 되었을 때 자기 자신의 메모리 주소를 담고 있는 키워드 인스턴스의 지역변수로 숨겨진 채로 존재한다 자신의 인스턴스 필드임을 명시하고자 할 때 사용한다 기본적인 사용법 public class Car { private String name; private int power; public Car(String name, int power) { this.name = name; this.power = power; } } 기본적으로 생성자에서 주로 사용하게 되는..
[Java] HashMap에서 잠시 헷갈렸던 부분! Java에서 Map을 종종 사용하게 됩니다. 근데 Map에 대한 로직을 보는데 헷갈리는 부분이 있더라고요. 제가 헷갈렸던 부분을 예시로 보고 정리해보았습니다. HashMap HashMap같은 경우에는 메모리 값에 기반한 해시 값을 이용해 값을 찾아오게 됩니다. 여기에 사용되는 해시값은 Object 클래스에 포함되는 hashCode() 메서드를 통해서 만들어지게 됩니다. 그리고 여기서 만들어지는 값으로 equals() 메서드를 통해서 Object끼리 비교하게 됩니다. 물론 equals와 hashCode는 모두 오버라이딩이 가능합니다. 그리고 변경 시에는 통일성을 위해 두 메서드 모두를 수정하는 것이 필수입니다. 사용하는 방식과 약간 헷갈렸던 사례에 대해서 예제를 통해 보겠습니다. 예시 class TestC..
[MyBatis] 마이바티스의 #{}, ${} 차이 ? : 마이바티스에서 #하고 $ 차이 알아요? Me : .....iBatis에서 #으로 썼었나? 저는 마이바티스를 처음 알고 쓴지가 1년 반 정도 된것 같습니다. 근데 정말 아무 생각 없이 쓰다가 최근데 #하고 $의 차이를 아냐는 질문을 듣고 정신이 나가버렸습니다. 질문을 듣자마자 "음..? #{parameter} 이렇게 쓴거 같은데 $도 있었나?" 이렇게 생각이 들고 iBatis에서 $를 쓴거 같기도 하더라구요. 그래서 그냥 버전의 차이 아닌가요?라는 답답한 답변을 해버리고 말았습니다. 1년 반동안 정말 아무 생각도 없이 쓰기만 했네요 ㅎㅎ SELECT ${COLUMN} FROM USER WHERE user_id = #{userId} MyBatis에서 $,#을 사용한 예시입니다. 위의 SQL을 보기전에..
DB의 결합 인덱스에 관해서 분명히 결합인덱스에 포함이 되어있는데 왜 인덱스를 타지 않지??! 최근에 일을 진행하면서 기존 쿼리가 인덱스를 여러개 추가했음에도 인덱스를 사용하지 않고 Table Full Scan을 하는 경우가 발생했습니다. 문제의 원인은 인덱스를 여러개를 충분히 추가해두긴 했지만 결합인덱스에서 우선 설정되지 않은 컬럼으로 조회 조건이 적용되면서 발생한 이슈였습니다. 이번 일로 인해 결합인덱스에 대해 공부가 필요할 것 같아서 간단하게 정리해보겠습니다. 결합인덱스 (Composite Index) 결합인덱스란 복수의 컬럼으로 구성된 인덱스로 복수의 컬럼으로 묶었을 때 데이터 분포도가 좋아지는 경우 사용됩니다. //결합 인덱스 생성 구문 예시 CREATE INDEX idx_composite_index_1 ON Test(id..
URI와 URL의 차이 최근 들어 저의 눈에 자주 띄는 용어 중에 URL과 URI가 있습니다. 보통 웹서버 호출을 위해 서버 URL을 코드에 사용하게 되죠. 근데 여러 API를 사용하던 중에 분명 보내는 데이터는 내가 아는 URL인데 URI라고 파라미터명이 적혀 있는 경우가 있습니다. 처음에는 비슷한 의미니 대충 넘어갔는데 이번에 한번 알아보고 정리해보았습니다. URI (Uniform Resource Identifier) Uniform : 일정한 규칙을 따르는, 일정한, 균일한, 고른, 같은 형태의 Resource : 자료, 자원 Identifier : 식별자 위의 영어 단어의 뜻으로 보자면 URI = "일정한 규칙을 따르는 자료 식별자"라고 할 수 있겠네요. Identifier의 경우에는 우리가 흔히 아는 ID의 약자이기도 ..
[GraphQL] GraphQL 처음 시작하기 GraphQL이 뭘까? GraphQL은 페이스북에서 만든 쿼리 언어입니다. 소식에 조금 늦은 저는 2020년에 처음 들었는데 최근 들어서 GraphQL 소식이 자주 들려오고 있습니다. 현재의 인기는 어느 정도일까요? 아래의 그래프를 보면 GraphQL에 대한 관심도가 어느 정도인지 알 수 있습니다. 꾸준하게 사람들에게 언급되고 배우려고 하는 사람, 사용하고 있는 사람들이 많이 늘고 있습니다. 일단 GraphQL은 뒤에 QL이라고 붙는 것을 보면 SQL(Structed Query Language)과 마찬가지인 것 같은데 사용되는 예시를 살펴보면 매우 다릅니다. GraphQL은 웹 클라이언트와 서버 사이에 사용되고 SQL은 서버와 데이터베이스 사이에 사용됩니다. 그래서 웹 데이터를 처리하는 방법인 REST와..
[Java 15 ~] Record Java Record 자바 14에서 preview로 등록되었고 자바 16 버전에 정식으로 새로운 기능으로 Record Type이 추가되었습니다.(나모찾기님 수정) 내용을 간단하게 설명하자면 기존의 POJO 객체를 만들 때 get~, set~ 이런 식으로 잡다하게 붙여줘야 할 일을 줄여주는 Type입니다. 기능 모든 프로퍼티를 포함한 생성자 제공 모든 프로퍼티에 private final 적용 모든 프로퍼티의 getter 메소드 생성 toString, equals, hashCode 메소드 생성 프로퍼티들에게 annotation을 붙일 수 있도록 허용 사용법 //Record를 사용하지 않은 클래스 public class Car { private final String name; private final int..
[프로그래머스] n진수 게임 (Java) 카테고리 n진수 만들기 나만의 카테고리 n진수 만들기 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/17687 코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0 programmers.co.kr 요점 n진수 만드는 법을 알아야한다. 참고 지식 n진수 만들기 풀이 (Java) class Solution { public String solution(int n, int t, int m, int p) { int numLength = (t * m) + p; String str = "..