본문 바로가기

Development39

자바 Integer 캐싱에 대해 (Java IntegerCache, Autoboxing) 간단한 자바 문제를 만들어달라는 요청을 받았다. 장난을 섞어서 이전에 알고리즘 문제를 풀 때 이슈가 있었던 상황을 문제로 만들었다. (이하의 코드 결과는 자바 실행 시의 옵션이나 구현에 따라 달라질 수 있다. 아무런 옵션을 넣지 않고, 이하의 코드만 실행한 경우를 가정한다.) Integer a = 100; Integer b = 100; Integer c = 200; Integer d = 200; System.out.println(a == b); System.out.println(c == d); 어찌보면 당연해보이는 문제지만, 은근 주변에 시켜보면 답이 많이 다르게 나올꺼다. 1. 객체끼리의 주소값 비교이므로 false, false 라는 답변 -> 훌륭하다. 2. 에이 당연히 true, true지 -> 좀.. 2024. 2. 27.
개발자가 질문하는 방법 (회사, 상사, 커뮤니티, 개발관련 질문 등) 이번에 진행중인 디자인 패턴의 아름다움 스터디에서, 책 내용관 관련 없지만, '질문하는 방법'에 대해 얘기해보자는 토론 주제가 나왔다. 그래서 내 생각을 정리해봤다. 주의점 : 내 경험과 생각을 적어둔 것 뿐이니 정답은 아닐테고, 더 좋은 방법 역시 있을꺼다. '개발자가' 질문하는 방법이라 적어두긴 했지만, 사실 다른 업종도 비슷비슷할 것 같긴하다. 아무튼 내가 개발자니 다른 업종은 잘 몰라서 범위를 축소해 제목을 적어두었다. 내 생각에 질문할 때 들어가야 하는 내용은 다음과 같다. 1. 현재 상황 설명 2. 내가 지금까지 해본 것(모르는걸 질문하는 경우) 또는 내가 생각하는 안건(어떠한 결정 사항에 대해 질문하는 경우) 3. 내가 알고 싶은게 무엇인지 1. 현재 상황 설명 질문 시 물어보는 사람이 헷갈.. 2024. 2. 25.
Map에 mybatis의 map-underscore-to-camel-case가 안먹히는 이유를 알아보자 관련된 질문을 받아 이유를 찾아보기 위해 mybatis 소스를 까보게 되었다. 찾아본김에 혹시 궁금할 사람도 있을 것 같아 어느 부분에 의해 Map을 사용 시 map-underscore-to-camel-case 옵션이 안먹히는지 공유하려고 한다. map-underscore-to-camel-case 사용 이유 테이블의 칼럼명이 phone_number 이런식으로 언더바가 들어간 형태로 되어 있는 경우가 있다. 이걸 받기 위해 dto의 변수도 'String phone_number;' 처럼 언더바가 들어간 형태로 가자니 자바의 기본적인 카멜 케이스 형태랑 안맞아서 멋없다. setter도 'setPHONE_NUMBER' 이런식으로 들어가야하니 더더욱 멋없다. 그래서 String phoneNumber; / setP.. 2024. 2. 21.
인텔리제이, CLion에서 Rust 사용하기 (개발하기) 목차 Rust가 좋다고 하길래 궁금해졌다. 일반적으로 Rust 언어로 개발할 때 vscode를 많이 쓰는 것 같다. 하지만 내 경우 이미 젯브레인 계열의 단축키가 익숙해져 버린 몸이므로, 인텔리제이나 CLion으로 Rust를 사용해보고 싶었다. Rust 설치 https://www.rust-lang.org 에서 Get Started 또는 Install 메뉴에서 Rustup을 다운로드 후 실행한다. rustup은 러스트의 버전 및 환경 관리 도구라고 보면 된다. Case 1. 이미 Visual Studio가 깔려있던 경우 Rust를 사용하려면 MSVC 라는게 필요하다. 이미 Visual Studio 같은게 깔려있었다면 아래처럼 메뉴가 나타날꺼다. '1'을 선택해 안내에 따라 설치를 진행하자. 이 때, 윈도우.. 2023. 7. 28.
인텔리제이, 파이참 여러 PC 환경 동기화 (jetbrains 툴을 여러 PC에서 사용하는 경우 환경 동기화) 목차 별도로 노트북을 사용하지 않는 경우, 집과 회사에서 사용하는 PC가 다를 수 있다. 인텔리제이나 파이참 등 jetbrains의 툴들을 회사에서 사용하는 설정과 집에서 사용하는 설정을 다르게 쓰고 싶은 경우도 있겠지만, 일반적으로는 한 곳에 공들여서 설정해두고 나면 다른 쪽도 동일한 환경으로 사용하고 싶어진다. 예를들어 이번에 copilot 플러그인을 설치했다면, 다른 쪽도 굳이 plugins에서 새로 설치 안해도 알아서 설치되면 좋을꺼다. 뭐 Live Templates(예를들어 sout이라고 치면 System.out.println(); 이 나타나는 숏컷같은거)을 새로 등록한 경우, 이것도 알아서 다른 PC에도 설정되면 좋을꺼다. 또는 윈도우를 밀어서 재설치하는 경우나, 새로운 컴퓨터를 샀거나 등의 .. 2023. 7. 28.
[객사오 정리] 1장. 협력하는 객체들의 공동체 스터디 메인 페이지 목차 - ☆ 표시가 붙은 부분은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것 혹은 다른 책이나 자료의 내용으로, 객사오 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다. - 모든 이미지의 출처는 객체지향의 사실과 오해(조용호 저) 책 입니다. 서문 ☆ 4page에 나오는 상속과 일반화 : 상속엔 서브클래싱과 서브타이핑이 있다. 서브클래싱은 단순히 코드를 재사용하기 위해 상속을 사용한 경우인데 이 경우엔 일반화와 관련이 없다. 서브타이핑은 다형적인 협력 위해 상속을 사용하는 경우이다. 이 경우 부모 클래스는 자식 클래스의 일반화이다(반대는 특수화). 1. 협력하는 객체들의 공동체 객체지향의 목표는 실세계를 모방하는 것이 아니다. 고객과 사용자를.. 2023. 4. 26.
개발자 쓸만한 인텔리제이 플러그인 추천 (IntelliJ Plugin) 목차 개인적으로 쓰고 있는 플러그인들 중에 쓸만한 것들을 한번 적어봤다. File -> Settings -> Plugins 에서 검색해서 설치하면 된다. Atom Material Icons IDE 전체적인 아이콘들을 이쁘게 해준다! 일단 깔아보고 너무 정신없으면 삭제하자. 내 경우엔 별론거 같아서 삭제했다가 어느순간 생각나서 다시 설치해뒀다. CodeGlance3 코드 우측에 미니맵같은걸 추가해준다. CodeMetrics 코드가 얼마나 복잡한지(?) 알려준다. 대충 저게 빨개지면 뭔가가 잘못되고 있다고 생각하면 된다. 물론 어쩔 수 없을때도 있다..(?) 이하 극단적인 경우긴 하지만 11차원 너비 우선 탐색이 필요한 백준 17114번 (하이퍼 토마토) 문제를 푼 코드이다 ㅋㅋ 우측에 CodeGlance3.. 2023. 4. 5.
기본적인 자바 람다(Lambda) 목차 개인적으로 가독성이 좋은지 잘 모르겠어요. 개인적으로 람다가 정말 가독성이 좋은진 잘 모르겠다. 그렇다고 안쓴다는 얘기는 아니고, 쓰긴 쓴다. 다만 쓸 수 있다고 너무 아무대나 다 써버리면 읽기 편하다는 장점이 오히려 사라지는 것 같다. 코드가 짧다고 항상 가독성이 좋은건 아니다. 익명 클래스를 사용한 A보다는 람다를 사용한 B가 더 보기 편한게 맞다. 보기 편하긴 하지만 결국 아래처럼 좀 생소한 클래스에 써있다면 결국 까봐야 한다. 특히 생성자가 많다면 더 헷갈릴 것 같다. (물론 인텔리제이 기준 ctrl 누른상태로 클릭하면 해당 생성자로 바로 이동하긴 한다.) 아무튼 개인적으로 그렇다는거고, 코드가 더 짧아져서 어느 수준 이상의 실력이라면 보기 편한게 사실이다. 그러니 기본은 알아두자. 람다 기.. 2023. 4. 3.
Spring Initializr 에서 선택한 자바 버전은 어떤 의미일까? 목차 Spring Initializr는 자바 버전을 선택할 수 있다! 근데 알다시피 스프링 부트 3.0 부터는 자바 17 이상을 써야 하는데, Spring Initializr는 아무튼 버튼은 그대로 표출되어 있다. 이와 관련된 에러는 '스프링부트 3.0.0 프로젝트 생성시 에러 해결법' 에서 볼 수 있다. 그럼 궁금한건 그럼 저 "자바 버전을 선택하는게 어떤 의미가 있나?" 라는 부분이었다. 자바 버전을 변경하면 바뀌는 부분 스프링부트 2.7.X 버전이하일 경우 자바 버전을 바꾸면 변경되는 부분은 build.gradle의 sourceCompatibility 부분이다. 그리고 스프링부트 3.0.x 버전의 경우, 분명 3.0.0 초창기에는 Spring Initializr로 생성 시 17버전이 아니라면 저 부.. 2023. 4. 3.
IntelliJ는 왜 jdk(java)를 설치 안해도 동작할까? 어찌보면 당연한내용인데, 인텔리제이를 처음 썼을 땐 엄청 신기했던 것 같다. 인텔리제이의 경우 jdk를 설치하지 않아도 잘 동작한다. 혹시 당연히 자바를 설치해야 한다고 생각해서 따로 설치하고 환경변수까지 등록해서 사용중인 사람들도 있을 것 같은데, 사실 환경변수에 등록 안되있어도 인텔리제이는 혼자서 잘 동작한다. 프로젝트마다 독립적으로 동작하기 위해 jdk를 환경변수로 등록 안하고 사용하는게 더 좋을 것 같다. 그렇지 않으면 프로젝트마다 실행하기 전에 환경변수를 가서 버전 바꿔주거나, 리눅스쪽이라면 sdkman 같은걸로 자바 버전을 변경해주면서 써야 할 것이다. 인텔리제이에서는 File -> Project Structure에서 자바 버전을 선택할 수 있고, 또 원한다면 추가할 수 있다. 이렇게 받아진 .. 2023. 3. 28.