Exponetial-e
-
HashCodeCS/Java (with Effective) 2022. 2. 27. 22:41
해당 글은 Effective Java Item11을 기반으로 합니다. Equals 재정의시 HashCode도 재정의하라 equals 재정의 내용이 상당히 알찬데, 전 되도록이면 책 내용처럼 equals 재정의는 하지 않을 것이기 때문에 일단은 생략했습니다. 그럼 hashCode 재정의도 일단은 필요 없겠지만, 둘이 어떤 연관관계가 있는지 살펴보는 것은 재밌을 듯 합니다. 내용에 들어가기전 Hash에 대해 모르신다면, 아래 포스팅을 참고해주세요. 11. Hash 해시 함수(hash function) 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 해시는 매핑을 통해 원하는 데이터를 더욱 빠르게 접근해 사용할 수 있도록 돕습니다. 또한, 해시는 복호 exponential-e.tistory.co..
-
SingletonCS/Java (with Effective) 2022. 2. 8. 14:07
해당 글은 Effective Java Item3을 기반으로 합니다. private 생성자나 열거 타입으로 싱글턴임을 보증하라. Singleton 관련 내용은 아래 포스팅에서 진행했습니다. Bean 그리고 scope 지난번 Bean이 무엇인지 간략하게 알아봤습니다. (IoC container, Bean 관련 개념이 아직 부족하시다면 간략히 이전 포스트 참고해 주세요.) Bean을 사용하는 이유 중 하나가 scope가 자동으로 singleton으로 exponential-e.tistory.com SpringBoot Application 실행시 SpringBoot Application 이하 패키지의 @Component, @Service, @Controller, @Repository가 붙은 클래스는 Compone..
-
BuilderCS/Java (with Effective) 2022. 2. 6. 14:07
해당 글은 Effective Java Item2를 기반으로 합니다. 생성자에 매개변수가 많다면 빌더를 고려하라. 이번 글에선 알고리즘을 풀며, 코드를 어떻게 변경해 나갔고 결론적으로 왜 빌더가 필요하게 됐는지 과정을 보여드립니다. 빌더 구현을 바로 보시려면 'Builder 구현'을 검색해주세요. 어느 언어나 마찬가지겠지만, 자바로 알고리즘 문제를 풀다보면 여러 클래스를 선언하게 됩니다. 따라서, 본래는 클래스 중복을 피하고 사용하기 위해 이너클래스로 선언해 사용을 했었습니다. 근데, 조금은 객체지향적으로 코드를 구성하고 싶다 생각이 들었고, 공통 코드를 구성해 알고리즘 문제를 풀게되었습니다. 예를 들면 초기 코드는 아래와 같습니다. import java.util.LinkedList; import java..
-
Effective JavaDaily 2022. 2. 6. 12:40
좋은 친구를 두어야 한다는 것은 중요한 것 같아요. 이런 말을 하는 이유는 Effective Java 책의 존재를 알고 있었지만, 친구가 진행하는 스터디에 참여한 덕에 제대로 공부를 하고 알게됐기 때문입니다. 물론 시작할 당시엔 중요성을 제대로 인지하지 못했고, 또 입사 연수 과정 및 부서 배치를 받으며 자바를 쓸 일이 없게 돼 스터디에선 빠지게 됐었습니다. 최근에 혼자 관련 공부를 다시 시작하면서, 간단하게 알고리즘 코드부터 적용하며 공부하고 있는데 실제 필요성과 더불어 개념 공부를 진행해보니, 좋더라구요. 의견을 나누는 건 중요하게 생각하지만, 스케줄에 얽매이지 않고 혼자하는게 적성에 맞긴 하네요.. ㅎㅎ 카테고리도 조금 변경했고, 앞으로 포스팅은 자바 관련 특히, Effective Java가 주를 ..
-
Map 그리고 merge()CS/DS & OOP 2022. 1. 29. 12:32
Java의 자료구조 중 Map에 대해 이야기 해보려합니다. HashMap, TreeMap 두가지에 모두 적용되는 이야기입니다. 간단히 두 맵에 대해 알아보고, 알아두면 좋을 내용들 그리고 마지막으로 merge에 대해 살펴보겠습니다. Map Key, Value로 내부 데이터를 구성하고 Key는 중복이 불가능하지만, Value 값은 중복 가능합니다. 중복이 가능하고 불가능 여부는 아래와 같습니다. Map map 로 선언한 경우 i) key 중복 map.put("apple", 1); map.put("apple", 2); => map.get("apple"); 호출 시 2의 값을 반환합니다. ii) value 중복 map.put("apple", 1); map.put("banana", 1); => map.get("..
-
1 - 3. 공유기 설치CS/ProblemSolving 2022. 1. 18. 22:41
백준 2110번: 공유기 설치 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 사실 이 문제는 푼지 좀 오래 되었는데, 완전 같은 문제를 최근에 풀어서 공유합니다. 문제는 대충보자면, 한정된 공유기 개수를 가지고 많은 집에서 사용할 수 있도록 적절한 위치에 놓고싶다~ 입니다. 문제에 나오는 도현이는 상당히 선한 사람이면서도, 개발자다운 면모를 갖고 있는 듯 하네요. 멋있습니다. 멋있는 도현이를 위해서 저희가 대신 고민해 주도록해요. 물론 저 같이 실력은 조잡..
-
Static Factory MethodCS/Java (with Effective) 2022. 1. 13. 23:56
이전에 진행한 MSA 프로젝트를 좀 더.. 사실 죽어가는 녀석 살려보고자 Webflux / WebClient 학습을 진행하고 있습니다. 공부하다 보니 Webflux 공식 문서에서 읽다보니 아래와 같은 문구를 발견할 수 있었습니다. The simplest way to create a WebClient is through one of the static factory methods WebClient를 가장 단순하게 생성하는 방법은 정적 팩토리 메소드를 이용하는 것이다. 라네요. 정적 팩토리 메서드? 무슨 디자인패턴 공부할 때 본 것 같기도 한 이 네이밍.. 사실 전 구면입니다. 후후 바로 이펙티브 자바 1장에서 만났습니다. 생성자 대신 정적 팩터리 메서드를 고려하라. 이 내용을 너무 건성으로 봤었는데, 상당..
-
11. HashCS/Alogrithm 2021. 12. 16. 14:06
해시 함수(hash function) 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 해시는 매핑을 통해 원하는 데이터를 더욱 빠르게 접근해 사용할 수 있도록 돕습니다. 또한, 해시는 복호화가 어렵다는 특징을 가지기 때문에 암호학 및 블록 체인 구현에 있어 중요한 요소입니다. 대표적인 알고리즘으로 MD5, SHA 등이 있습니다. 입력한 데이터와 출력된 데이터 'input - key / output - value' 이렇게 표현합니다. 크기는 동적으로 변화하며, 해시 값 자체를 index로 사용하기 때문에 탐색 시간 복잡도는 O(1)입니다. 충돌과 관련된 방법을 익히고 계셔야 O(1)라고 말할 수 있는 근거가 있다고 생각합니다. 각 방식을 단순 외우기보단 꼭 이해해 보시기 바랍니다. 아래와 같이..