HashMap(구현 방식, 해싱, 해시 함수, 해시 충돌)
·
👶🏻 CS/Data Structure
해싱이란 무엇인가?데이터를 키(key)와 값(value) 형태로 저장하는 경우, 키를 입력받아 특정 위치를 계산하는 과정을 해싱이라고 한다.이때 사용되는 함수가 해시 함수(Hash Function)이며, 해시테이블의 키 값으로 레코드가 저장되어 있는 주소(혹은 색인)를 산출하는 함수이다.함수의 출력값을 해시 값(Hash Value) 또는 해시 코드(Hash Code)라고 부른다.  HashMap의 구조와 작동 원리HashMap은 데이터를 키-값 쌍으로 저장하는 자료구조로 내부적으로 배열과 연결 리스트를 조합하여 구현된다. 데이터 저장의 기본 구조HashMap은 데이터를 저장하기 위해 배열을 사용한다.이 배열의 각 위치를 버킷(Bucket)이라고 부르며, 해시 함수가 반환한 값을 기반으로 데이터가 특정 버..
리플렉션(Reflection)으로 DI 구현해보기 +단점
·
💻 Dev/Java & OOP
자바 기본서를 읽던 중 리플렉션 파트가 나왔다.특히 스프링 프레임워크의 DI(Dependency Injection)나 어노테이션 처리에 사용되고, 자사 라이브러리를 만들 때 사용한다고 한다.아직 한 번도 사용해 본 적은 없어서 DI 구현을 통해 이해해보고자 한다! @TestAutowired 구현하기리플렉션의 활용을 이해하기 위해 간단한 @TestAutowired 어노테이션을 만들어보자. 이 어노테이션은 클래스의 필드에 붙여 의존성을 자동으로 주입하는 기능을 한다. 1. @TestAutowired 어노테이션 정의먼저 @TestAutowired 어노테이션을 정의한다.이 어노테이션은 필드에만 사용할 수 있고, 런타임에도 유지되어야 하므로 @Retention과 @Target을 설정한다.@Target(Elemen..
[F-Lab] 5주차 회고
·
📝 끄적끄적/F-Lab
사전 질문프로젝트 관련요구사항 정의서 관련자체 회원가입 없이 소셜 로그인만? OAUTH + JWT 조합으로 빠르게프로토타입 관련 사전 학습최범균의 JSP 2.3 웹 프로그래밍Chapter 1~4 (진행중)Chapter 9, 10Chapter 14Chapter 17~20프로젝트 숙제프로토타이핑 하기 (피그마 혹은 frame0 활용)요구 사항 정의하기 (화면 단 기준으로)(Optional) 유저 시나리오, 핵심 비즈니스 로직 다이어그램 표현 멘토님 질문vector의 동기화ArrayList 복사 과정Hash load factor컨텍스트 스위칭 오버헤드에도 불구하고 스프링 MVC가 스레드를 200개 정도 사용하는 이유cpu를 놀지 않게 하기 위해 스레드를 늘리는 건 알겠는데, 컨텍스트 스위치 비용을 줄이려면?..
[F-Lab] 백엔드(BackEnd) 코스 1개월 솔직후기
·
📝 끄적끄적/F-Lab
왜 F-Lab인가퇴사https://javacatcher.tistory.com/155에도 적었지만, 나는 지방에서 4년 차 SI, SM 개발자로 일하다 퇴사했다그동안 많은 것을 배웠지만, 연차가 쌓일수록 단순한 구현보다 성능을 고려한 개발을 하고 싶어졌다.또 서비스 회사로 이직하고 싶다는 마음이 간절했다. 서울로 가서 컨퍼런스에도 다니고, 다양한 네트워킹에 참여하며 성장하고 싶었다. next-step나의 개발자 인생은 next-step의 TDD 교육을 들은 전후로 나뉜다고 할 수 있다.이직을 결심한 순간 80만 원이라는 거금을 들여 교육을 들었다. 수료 이후에 개발에 대한 생각, 코드가 180도 바뀌었다.모든 후기에 이런 식으로 적혀있었는데 처음엔 “주작 아니야?” 했는데 이럴 수밖에 없다. 엄청 빡세고..
Stack은 왜 상속의 실패 사례일까?
·
💻 Dev/Java & OOP
Java에서 Stack 클래스는 종종 "상속의 실패 사례"나 "디자인이 망가진 클래스"로 언급된다.뭐 때문인지 알아보자! Vector를 잘못 상속받았다.Stack 클래스의 가장 큰 문제는 Vector 클래스를 상속받았다는 점이다.Stack의 선언을 보면 다음과 같다.public class Stack extends Vector {Stack은 LIFO(Last In, First Out) 방식의 스택 자료구조를 구현하기 위해 설계되었지만, Vector는 일반적인 동적 배열을 나타낸다. 근데 뭐가 문제라는걸까? 🤔Stack이 Vector를 상속받았다는 것은 Vector의 모든 메서드를 사용할 수 있다는 것을 말한다. `Vector`는 일반적인 동적 배열 자료구조기 때문에 원래 스택에서는 허용되지 않을 중간에 ..
[F-Lab] 4주차 회고
·
📝 끄적끄적/F-Lab
사전 질문BigDecimal 중요 필드 2개(BinInteger, scale)G1 GC는 java 9? java 11? → 9부터 맞지만 LTS 기준으로 알고 있어도 됨프로젝트 주제 구체화개발자 네트워킹 관련 사전 학습자바의신2권~19장까지 (끝)프로젝트 주제 선정2가지 중 구체화해서 고민해 보기최범균의 JSP 2.3 웹 프로그래밍Chapter 1~4 (진행 중)Chapter 9, 10Chapter 14Chapter 17~20 멘토님 질문리플렉션의 단점왜 자바 11부터 G1 GC를 사용하게 되었을까요?system.out.println의 단점ArrayList vs LinkedListArrayList vs Vector Stack은 왜 상속을 잘못받은 사례일까요?ArrayList의 기본 크기를 10이라고 했을..