분류 전체보기 49

[asdf] 디렉토리별로 다른 자바 버전 사용하기

코딩 테스트 연습에는 java 23을 쓰는데, Spring에 Java 21을 쓸 일이 생겼다.버전 맞추자고 도커를 돌리기는 너무 무거워서 asdf로 디렉토리별 자바 버전을 설정해주기로 했다. Mac (zsh 사용시)1. java와 asdf를 설치한다.brew install asdf \java 2. shell에 asdf를 추가한다.# asdf.sh 위치 확인find "$(brew --prefix asdf)/libexec/asdf.sh"# 환경변수 추가echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrc 3. asdf에 java를 추가한다.asdf plugin-add java https://github.com/halcyon/asdf-java.git..

기타 툴 2024.09.16

Python은 진짜 느릴까? : Python, C++, JS 실행시간 비교

코딩 테스트를 풀 때 필요에 따라 Kotlin, Python, JS를 번갈아가면서 써봤지만, 머리속 생각을 바로 코드로 옮기는 데에는 파이썬만한 언어가 없어서 거의 정착하게 되었다. 이런 결정을 할 때 신경쓰이는건 '파이썬은 느리다' 라는 평가이다. 시간 제한이 있는 문제도 있기 때문에 괄시할 수 없는 문제였다. LeetCode에서 같은 논리구조, 다른 언어로 솔루션을 올리는 사람들의 코드를 빌려 실행시간에 정말 유의미한 차이가 있는지 알아보기로 했다. 아래는 실행시간을 측정한 결과이다. 단위 : msC++PythonPython3JavaScriptSpiral Matrix IV5123860Split Linked List4264157Max Score2173159Min Count of BitFlip02534..

[JS] Map 사용하기 : prototype으로부터 안전하다

Map 자료구조란key와 value를 묶어서 저장할 때 유용한 자료구조이다.단순히 두 값을 묶을 뿐만 아니라, key를 통해 빠르게 저장된 값을 조회할 수 있다.따라서 map에서의 key는 항상 유일해야하며, 기준이 되는 연산자는 === 이다. Object와 비슷하게 보일 수도 있다. 실제로 여기 있는 기능 모두 object를 사용해서 구현할 수 있다.다만 Map 객체와 달리 Object는 프로토타입에 정의된 기본키를 가져서, 예상하지 못한 항목이 추가될 수 있다는 점이 다르다.object literal 표현식은 정말 인스턴스를 표현하거나 enum class를 구현할 때 사용하고,key - value 쌍을 저장하고 가공하기 위한 용도로는 명시적으로 Map 객체를 사용하는게 좋다고 생각한다. Map 초기화..

소프트웨어 장인 : 요약

책을 고른 이유개발 도서 추천을 받고 이것저것 뒤적거리던 중, 휘황찬란한 이론들 속 장인이라는 단어가 눈에 들어왔다.오버 엔지니어링과 하드코딩 그 사이 어디쯤 서있어야 내실있는 개발자가 될 수 있을지 이 책이 알려줄 것만 같았다.이 책을 통해 진짜 좋은 제품을 만드는 '장인'들은 어떻게 일하는지, 또 동료 장인을 행복하게 오래 일하게 하려면 어떻게 해야하는지 답을 찾고싶다. 챕터4. 소프트웨어 장인의 태도페어 프로그래밍 : 장인이 되는 길개발자들은 상당 수준의 지적 역량이 있기 때문에 혼자 배우고 싶다면 무엇이든 배울 수 있다. 문제는 시간이다. 더불어 스스로에게만 의존하면, 자신만의 좁고 편향된 생각에서 벗어날 방법이 없다.페어 프로그래밍으로 얻을 수 있는 것코드 짜는 즉시 피드백이 들어오므로 새로운 ..

독후감/완성본 2024.07.19

MacOS에서의 Git 403 error : 아이디 수정 이후에도 계속 된다면...

github token을 재발급한 이후로 403 오류로 인해 CLI 환경에서 아무런 작업도 할 수 없었다. 한동안 급한대로 IDE와 깃헙 데스크탑에 의존하다가, 삭제된 옛날 토큰이 키체인에 캐시된 것이 원인임을 파악해서 해결 과정을 공유하려고 한다.config를 수정한 경우에도 키체인을 재생성해야하기 때문에 동일한 과정을 거쳐야한다. *OS keychain이란...Mac에서 사용자의 암호 및 계정 정보를 저장하기 위해 사용하는 앱. Window에서는 Credential Manager가 같은 역할을 한다. 1. 웹페이지에서 자격 확인실제로 권한이 없어서 403 오류가 발생했을 수 있으므로 다시 한번 토큰에 잘못이 없다는걸 확인해주자. 개인 토큰은 우측 프로필의 Setting > 좌측 사..

기타 툴/Git 2024.01.08

[Kotlin] 서브 클래스의 반복작업을 위한 여러 방법 : Reflection, Branch, Strategy pattern

* 이 글은 Kotlin 문법에 익숙하다는 것을 전제로 작성했다. interface, inline function, 각종 함수형 패러다임 지원을 위한 문법을 사용할 수 있다면 어렵지 않을 것이다.문제상황자식 클래스가 아주 다양하고, 이들이 다들 비슷한 처리를 요구할 때가 있다. Android의 AudioEffect 같은 경우가 그렇다.처리를 변경할 때 마다 일일이 메서드를 찾아다니기는 무리여서, 자식 클래스들을 효율적으로 관리할 수 있는 방법이 필요했다. 이런 과일 클래스가 있다고 생각해보자. 각 과일은 Fruit로부터 상속받은 여러 메서드를 구현하고 있다. 이 클래스는 더 이상 바꿀 수 없다고 가정하자.interface Fruit { fun buy() fun wash() fun dry(..

HTTP Request Message : User-Agent

User agent란 무엇이고, 어떤 포맷으로 만들어야하는지 알아보자. 🔸User agent란? User agent의 사용 목적 User agent는 클라이언트가 어떤 환경에서 요청을 보냈는지 설명하는 필드이다. 우리가 user agent에 아무 정보도 주지 않고 구글에 'user agent'를 검색하는 요청을 날렸다고 생각해보자. 서버 입장에서는 이 요청을 보낸 사용자가 브라우저는 어떤걸 쓰는지, os를 뭘 쓰는지, 버전은 몇인지 알 방법이 없다. 아무리 응답의 유연성을 높인다해도 오늘날의 클라이언트 환경은 너무도 다양하기에, 사용자의 환경을 알지 못하면 기껏 서버가 응답을 보내도 제대로 작동하지 않을 수 있다. 이러한 이유로 RFC 9110에서는 서버측에서 거부하는게 아닌 이상 반드시 User age..

표준/통신 2023.07.16

compiler version error 원인

아래와 같은 에러가 발생했고, 세부적으로는 NoSuchMethodError 유형이라고 떴다. > A failure occurred while executing org.jetbrains.kotlin.compilerRunner .GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction 더보기 java.lang.NoSuchMethodError: 'void org.jetbrains.kotlin.cli.common.messages.MessageCollector.report$default(org.jetbrains.kotlin.cli.common.messages.MessageCollector, org.jetbrains.kotlin.cli.common.messag..

Android와 이미지 형식

Bitmap과 Vector 사진을 컴퓨터에 저장하는 형식은 크게 비트맵/벡터로 나눌 수 있다. 1. 비트맵방식 (Bitmap) : 그림을 아주 작은 화소(픽셀)로 분해하고 각 화소의 색상과 위치를 기록해 저장하는 방식. 비트의 지도라는 뜻으로 픽셀을 하나씩 채워가면서 전체를 표현한다. ex) JPG, PNG, GIF, WEBP 2. 벡터방식 : 그림을 구성하고 있는 점이나 직선, 곡선 등의 위치와 기울기 등을 산술적인 데이터로 기록해 저장하는 방식. 파일 하나로 여러 화면 밀도에 대응할 수 있어 apk 크기를 줄일 수 있다. 복잡한 이미지는 표현할 수 없어서 간단한 도형이나 로고 등에 주로 사용한다. API 20 이상에서부터 Vector Asset Studio로 SVG, PSD를 프로젝트에 벡터 이미지로..

헷갈리기 쉬운 TCP/IP 4계층과 TCP, IP 통신

OSI 7계층을 대체하는 TCP/IP 4계층과 TCP, IP 각각을 혼동하는 경우가 많아서 각 용어를 제대로 정리하려고 한다. OSI 7계층 : 인터넷에서 컴퓨터들이 서로 정보를 주고받는 프로토콜을 7 layer로 나눈 것. TCP/IP : 인터넷에서 컴퓨터들이 서로 정보를 주고받는 프로토콜을 4 layer로 나눈 것. TCP : Transport layer에서 정보를 주고받는 데 사용하는 프로토콜 중 하나. IP : OSI의 Network 계층, TCP/IP의 Internet 계층에서 두 컴퓨터가 정보를 주고받는 데 사용하는 프로토콜 중 하나. 1. TCP/IP 4계층이란 우리가 인터넷상에서 정보를 주고받는 데에는 여러 프로토콜이 필요하다. 유저 인풋을 안전하게 전달하는 방식부터 전기신호를 전선으로 보..