분류 전체보기 381

Leetcode) TreeNode.java

Intro LeetCode 의 코딩 문제들을 풀다보면 자주 나오는 Node 계열 클래스들이 있습니다. 대표적으로 TreeNode와 ListNode 등이 있는데요. 처음 이런 문제를 접할 때에는 너무 당황해서 어떻게 풀어야 할지도 모르고 테스트 코드를 작성하기도 참 막막 한데요, 지금은 어느정도 익숙 해 졌다 보니 묵묵히 inner class로 복사해 집어 넣은 후에 코드를 작성 하기 시작합니다. TreeNode 예제 문제 https://leetcode.com/problems/range-sum-of-bst/ ListNode 예제 문제 https://leetcode.com/problems/merge-nodes-in-between-zeros/ 하지만 매번 같은 코드를 복사해서 이너클래스로 넣어서 만드는 것도 ..

Mac) 화면 분할을 위한 Rectangle

Intro MacOS에서 화면분할용 프로그램중에 가장 유명한 프로그램은 단연 Magnet 입니다. 종종 $0.99 세일도 한다고 해서 저도 구입을 하려고 Black Friday도 기다려보고, Boxing데이도 기다렸는데 세일을 할 생각을 안하더라고요.. 혹시 내가 이걸 샀는데 Apple이 MacOS에서 정식 기능으로 제공하면 어떡하지? 하는 맘에 정가에 못사고 있는 Magnet 아쉬운 대로 지금까지는 오픈소스중에 가장 괜찮다는 Spectacle을 꾸준히 사용 해 왔습니다. 나름 필요한 기능도 다 있고 속도도 빠릿빠릿 해서 단축키만 잘 설정 해 주면 괜찮게 사용 할 수 있습니다. Windows나 Linux에서 사용하던 창 분할 들에 비하면 부족한 느낌이 없지않긴 하지만 그래도 꾸준히 사용 해 왔는데요 Sp..

IT Computer/Mac 2022.02.16

JAVA) Equals를 override 할 경우 hashCode도 오버라이드 해야 하는 이유

Intro 몇일 전 Equals를 Override 해서 사용 하던 중, hashCode를 오버라이드 하지 않아 문제가 있었습니다. 많은 java 관련 책들에서는 equals의 오버라이드 시에는 hashCode도 꼭 함께 오버라이드 해야한다고 말하고 있는데, 정작 그 이유를 알지 못해 여태 간과 하고 있었습니다. 그러다 마침내 해당 문제에 봉착 했습니다. equals로 비교 했을 때 같은 값 이라면 Set에 담을 때에는, 별개로 담기지 않아야 하는데 각기 다른 객체로 인식하며 각각 담기는 것 이었습니다. 이로인해 약간의 혼란을 겪은 후로 왜 Equals를 오버라이드 할 때에는 hashCode도 함께 오버라이드 해 줘야 하는 이유에 대해 확실하게 깨달을 수 있었습니다. 이번 경험을 통해 익힌 내용을 쉽고 간..

Programming/Java 2022.02.13

일간에러 2022-02-10 Name for argument of type [java.lang.String] not specified

Intro 영한님의 JDK 동적 프록시를 활용한 동적 프록시 기술을 실습 해보던 중 예기치 못한 에러가 발생했다. 응답 코드는 500이며 에러 전문은 아래와 같다. java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either. at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver..

Java) String의 Immutable이 의미하는 것

Intro 자바 개발자들은 Java에서의 String이 immutable 하다는 사실을 대부분 잘 알고 있습니다. 하지만 그 불변의 속성이라는게 이해하기에는 마냥 쉬운게 아닌데요, 혹자는 String temp = "abc"; temp = "123" 의 예를 들며, String 타입 변수인 temp의 값이 변했는데요! 라고 주장 하기도 합니다. 또한, String은 primitive Type(기본 타입)이 아닌 Reference Type(참조 타입) 인데요, 이게 참 헷갈리게 만들때가 많습니다. 참조타입이라서 String을 call by reference로 이용해보려고 하면 그건 또 안되거든요. 그래서 이번에는 String의 불변이 의미하는 것에 대해 자세히 알아보겠습니다. String Object의 생성..

Programming/Java 2022.02.06

HTML) href 속성의 html 링크 절대 경로로 강제하기

Intro 얼마전 프로젝트를 진행 하던 중에 하나 난관에 부딪친 일이 있었습니다. 유저가 URL을 입력 하면, DB에 저장 해 두었다가, 필요 할 때 해당 URL 주소로 연결되는 링크를 만들어 주는 기능을 만들고 있었는데.. 테스트를 진행 하다가 주소로 제대로 연결이 되지 않는 문제가 있었습니다. https:// 라고 프로토콜을 정확하게 입력 하면 연결에 문제가 없었지만, 프로토콜을 생략하고 www.naver.com 과 같은 값을 넣었을 때는 절대경로가 아닌 상대경로로 연결을 시도 하는 문제가 있었습니다. 간단하게 해결 하는 문제지만 생각보다 검색했을 때 해결방법이 나오지 않아 고생을 조금 했지만 결국 고칠 수 있었습니다. 문제 재연 먼저 해당 문제를 똑같이 재연 해 보겠습니다. 이를 위해 아주 간단한 ..

Development/HTML ⁄ CSS 2022.01.30 (1)

Ubuntu) 우분투에서 카카오톡 실행 (100% 정상작동 방법)

Intro Windows나 Mac에서 되는데 Linux에서는 할 수 없는거야 셀수 없이 많지만 왠만한거는 다 괜찮습니다. 어딘가에 대체할 만한 소프트웨어가 다 있기 마련이며 크리티컬 한 소프트웨어 일수록 사용 가능 할 확률이 높습니다. 심지어 Third Party 소프트웨어들이 정말 많기 때문에 저는 Notion, Apple music, iCloud Drive, Github Desktop 등 공식 지원 하지 않는 소프트웨어들을 사용 하고 있으며 심지어 intelliJ IDEA, Visual Studio Code, Postman, Dropbox, Typora, Slack 등은 제조사에서 Linux를 공식적으로 지원을 해 줍니다. 하지만 그중 하나 한국인이라면 모두가 사용하지만 리눅스에서 사용 할 수 없는 ..

IT Computer/Linux 2022.01.29 (2)

JAVA) String 순회 - 배열만들기 vs charAt

Intro 오래전부터 String 을 파싱할 때 마다 고민이 있었습니다. charAt으로 인덱스를 순회하며 해당 위치에 있는 문자를 확인 할 것인가. 아니면 해당 스트링을 캐릭터 배열로 만들어 둔 다음에 배열의 인덱스로 순회 할 것인가. 사실 개인적으로는 배열 인덱스를 찾아 가는게 빠를 거라고 생각해서 charAt을 잘 안썼었는데요. 문득 의문이 들어서 테스트를 해 봐야 겠다는 생각이 들었습니다. 코드 확인 chatAt(index) 먼저 String의 charAt 함수를 확인 해 보았습니다. 코드를 보는순간 너무 부끄러웠습니다. 분명 자바 기초를 처음 학습 할 때, String은 사실 캐릭터 배열이라는걸 배웠었습니다. 배웠다는건 기억 하는데 정작 String의 작동 원리를 여태 잊고 사용 해 왔다는게 내..

Programming/Java 2022.01.29

Ubuntu) Display Link 활용한 모니터추가 연결

Intro 그래픽카드 스펙에 따라, 모든 컴퓨터는 스스로가 최대로 연결 할 수 있는 외장 모니터 갯수의 제한을 가지고 있습니다. 회사에서 지급받아 사용하고 있는 Dell XPS 15 시리즈는 매뉴얼에 따르면, Dell에서 나온 도킹 스테이션을 사용하지 않으면 최대 3개의 모니터까지 연결을 할 수 있다고 적혀 있습니다. 내장 디스플레이를 사용하지 않는 조건이 달리기 때문에, 실제 내장모니터 포함 최대 3개의 화면을 사용 할 수 있습니다. 이정도면 그래도 부족함이 없는 편 입니다. 하지만 저는 개인적으로 퇴근 후에는 집에서 M1 맥북 에어를 사용 하고 있는데요. m1 시리즈는 최대 연결할 수 있는 외장 디스플레이가 딱 1개 입니다. 이게 정말 치명적인게. 13인치 디스플레이는 실질적으로 사용하기에 매우 불편..

IT Computer/Linux 2022.01.28

Ubuntu 20.04) 스크린샷 저장 폴더 변경

Intro 우분투에서 스크린샷을 찍을때 기본 저장 폴더는 /home/사용자/Pictures 입니다. 하지만 해당 경로는 스크린샷을 찍을 때 외에는 들어갈 일이 없기 때문에 관리하기가 번거로운데요. 스크린샷 저장 폴더를 원하는 폴더로 변경 하고자 합니다. 특히 저는 Dropbox에 바로 저장하도록 해서 스크린샷을 찍었을 때 다른 디바이스와 빠르게 공유하며 작업 하는데 스크린샷의 공유에 들어가는 번거로운 작업들이 줄어들어 매우 만족스럽습니다. Screenshot Locations 설치 아래의 링크에서 Screenshot Locations 라는 GNOME Extention을 설치하면 매우 편하게 필요할 때 마다 스크린샷의 저장 경로를 변경 할 수 있습니다. https://extensions.gnome.org/..

IT Computer/Linux 2022.01.25

IntelliJ IDEA) Path Variable 설정으로 VM Argument 저장해두기

Intro 웹 어플리케이션을 개발 하다보면, 외부 API를 사용해야 할 때가 종종 있습니다. 거기에 추가로, 드물기는 하지만 호출을 위한 API KEY가 특정 IP에 종속된 경우가 존재합니다. 그럴 경우에는 개발환경에서도 키를 하나 발급받아서 따로 사용하는게 가장 이상적이기는 하지만.. 그게 현실적으로 어려운 경우가 많습니다. API 키 발급 조건이 까다로울수록 더더욱 그렇습니다. 그럴 경우에 저는 보통 Dynamic Proxy를 활용하는 방향을 택합니다. 그러면 어플리케이션에서 외부 API를 호출 할 때에, 해당 프록시 서버의 ip 주소를 통해 요청되기 때문에 특정 IP Address에 종속되어 있는 API 키라고 해도 사용 할 수 있습니다. 자바 어플리케이션에서 프록시 서버를 통해 연결하는 방법에 대..

Java) 컬렉션이나 배열같은 참조 변수의 캡슐화

Intro 행정안전부 소프트웨어 개발보안 가이드 https://www.mois.go.kr/frt/bbs/type001/commonSelectBoardArticle.do;jsessionid=TjAX2IwVk6hpONx8dKSZ4VTj.node10?bbsId=BBSMSTR_000000000015&nttId=88956 지난 주에 행정안전부의 소프트웨어 개발 보안 가이드를 읽다 보니 꽤나 인상적인 부분이 있었습니다. 자바의 캡슐화에 대해 단순히 private으로 변수를 생성하고 그에대해 Setter만 막아 두면, 해당 변수는 외부에서 변경이 불가능 하다고 너무나도 당연하게 여기고 있었는데 해당 문구를 보고 잠깐 고민을 해보니 자바의 캡슐화에 대해 너무 안일하게 생각하고 있었구나 싶었습니다. 캡슐화의 허점 Pub..

Programming/Java 2022.01.23

Leetcode) 소개 및 풀이 코드 Github에 자동 커밋방법

Intro 개발공부를 시작 한 이후로 오랜 취미중 하나였던 온라인 게임을 그만 두었습니다. 사실 온라인 게임을 오래동안 해 왔던 이유는, 그 자체가 재밌다는 이유도 조금은 있었지만 그보다는 주로 무료한 시간을 달래기 위함이었습니다. 그러면서 게임이라는 가상 공간에서 모르는 사람들과 만나 협력하고 경쟁하여 승리를 따냈을 때의 그 달콤한 성취감에 중독되어서 시간이 남는다. 무료하다. 이 두가지 조건이 만족될때면 어김없이 게임을 하곤 했었습니다. MAY 2020. Queenstown, New Zealand 퇴근후 집에 오면 어김없이 이런 열악한 환경에서도 리그오브레전드 혹은 롤토체스를 즐겨 하곤 했습니다. 그러다 한국에 돌아와 2020년 11월. 개발 공부를 시작 한 이후로 게임을 하는 첫번째 조건이었던 시간..

Chrome) 즐겨찾기 아이콘 변경 하기

Intro 위의 제 Chrome 브라우저에서 보이는 것 처럼, 저는 Bookmark bar에 추가해 둔 사이트가 제법 많아지면서, 즐겨찾기 사이트들의 이름을 지우고 아이콘만 남겨 사용 하고 있습니다. 하지만 favicon이 없는 웹사이트를 즐겨 찾기에 추가 하는 경우에는 아래 보이는 것 처럼, 지구본 모양(?) 아이콘이 남게 되는데요 아이콘만으로 웹사이트를 구분하는 경우에는, 이렇게 아이콘이 겹치는 몇개가 생겨버리면, 어떤 사이트인지 한눈에 알 방법이 없습니다. Bookmark Favicon Changer 이 경우 Chrome 익스텐션을 활용 해서 즐겨찾기에 있는 favicon을 변경 할 수 있습니다. 설치 https://chrome.google.com/webstore/detail/bookmark-fav..

Git) 이전 커밋에 덧붙이기 amend

Intro Commit을 하다 보면 적당한 크기로 커밋하는게 쉽지 않다는 걸 많이 느낍니다. 커밋 하나하나의 크기가 너무 작으면, 후에 커밋을 추적하기가 어렵고 커밋의 크기가 너무 크면 중간에 문제가 생기거나 실수를 했을때 돌아가야 할 지점이 너무나도 멀다는 문제가 있습니다. 커밋 하나에 잡다한 여러가지 연관성 없는 기능에 대한 코드가 함께 있어도 코드리뷰를 하는데 불편함을 초래 합니다. Commit 을 하고 보니 이게 빠졌네 이건 모두가 한번씩 있는 경험이 아니고 거의 몇일에 한번씩 혹은 커밋이 잦은 편인 저의 경우에는 거의 매일 겪는 일 입니다. 특히 간단한 오타 수정이 가장 흔한 상황 인데요. 그렇다고 오타를 수정 했는데 커밋을 안하고 다음 커밋까지 미루기도 곤란하고, 오타 하나만 달랑 수정하는데 ..

Development/Git 2022.01.14