[이펙티브 자바 3/E] 아이템 9 : try-finally 보다는 try-with-resources를 사용하라 핵심 close 메서드를 호출해 직접 닫아줘야하는 자원에 "try-with-resources"를 적용해 안전하게 닫아주자!! 예) InputStream, OutputStream, java.sql.Connection 등 ** 자원을 닫지 않으면 성능 문제로 이어질 수 있다. try-finally (Java7 이전) 변수1 = null; 변수2 = null; try { 변수1 = new 자원객체1(); 변수2 = new 자원객체2(); 변수1.작업(); 변수2.작업(); ... } finally { if (변수1 != null) 변수1.close(); if (변수2 != null) 변수2.clos..
로또 미션을 진행하면서 로또 번호 하나를 포장하는 클래스인 LottoNumber 클래스를 생성하게 됐다. LottoNumber 클래스는 다음과 같이 정수 타입의 number 멤버 변수 하나만을 갖는 간단한 클래스이다. public class LottoNumber { private final int number; public LottoNumber(int number) { validateRange(number); this.number = number; } } 이제 로또에서 사용하는 모든 로또 번호에 대해서는 LottoNumber 클래스를 사용하게 된다. 이때 우리는 "당첨 번호와 보너스 번호의 중복을 검사"하거나 "당첨 번호와 로또 티켓의 로또 번호가 몇개가 동일한지를 검사"하는 등 LottoNumber 객..
사용자 입력값(String)에 대한, 검증(validation)을 하다보면 Null, Empty, Blank에 대한 검사는 필수적으로 들어간다고 생각한다. 나도 현재 진행 중인 미션에서 이에 대한 검증이 필요했으며, 다음과 같은 코드 리뷰를 받게됐다. 생각해보면 이때의 나는 Null, Empty, Blank에 대한 구분을 넘어서 구분의 필요성 자체를 못 느꼈던 것 같다... 이제는.. 안다.. 😊 분명 어디인가에 나와 같은 사람이 있을것이라 생각하며 이 글을 쓴다. Null, Empty, Blank가 각각 무엇을 의미하는지 살펴보고, 어떻게 검사하는지, 또 사용자 입력값 검증에 어떻게 적용해야할 지 살펴보자!! Null 변수에 아무것도 할당되지 않은 상태를 의미한다. String nullString = ..
생성자가 2개 이상일 경우, 하나의 주생성자를 지정하고 주생성자에서만 초기화를 진행하고, 그 외의 부생성자에서는 주생성자를 호출하는 방식이 추천된다고 한다. ✅ 이렇게 생성자에서 또 다른 생성자를 호출하는 방식을 생성자 체인 기법(Constructor Chainning)이라고 한다. (생성자 체인 기법 참고 블로그) ✅ 주생성자는 모든 부생성자 뒤에 위치시키는 것이 유지보수측면에서 좋다. before public Car(final String name) { this.name = name; position = 0; } public Car(final String name, final int position) { this.name = name; this.position = position; } after Ca..
리뷰어 희봉이 "Random과 ThreadLocalRandom의 차이점이 무엇일까요?"라는 질문을 던져주셨다. 🙇♀️ 나는 그동안 Random를 사용하면서도 이에 대한 정확한 학습이나 이것 보다 더 적절한 라이브러리는 없는지에 대한 생각을 한적이 없었다. 덕분에 Java 표준 라이브러리에서 제공하는 랜덤 넘버 생성 기능이 Random, ThreadLocalRandom, SecureRandom 등 다양하다는 것을 알게 되었다. (추가 학습이 필요하다!!) Java7부터 다중 스레드 프로그램을 위한 ThreadLocalRandom이 추가되었다. ThreadLocalRandom는 Random과 같은 기능을 제공하면서도 다음과 같은 장점을 가진다. 스레드 세이프(Thread Safe)하다. 다중 스레드 프로그..
[이펙티브 자바] 아이템 27 비검사 경고를 제거하라 네오의 수업에서 테스트 코드에서 함수명을 한글로 사용할 수는 있지만 이럴 경우 컴파일 경고(Compile Warnning)가 발생하며 이러한 경고의 경우 프로그램이 커지고 경고가 많아질 수록 디버깅에 어려움을 주는 요소이기때문에 그때 그때 제거해주는 것이 좋다는 말을 해주셨다. 그리고 경고를 없애는 방법으로는 다음의 두가지를 말씀해주셨다. 1. @SuppressWarnings("NonAsciiCharacters") 사용 2. 함수명을 영어로 만들고 @DisplayName으로 설명 추가 당시 나는 모든 테스트 코드의 함수명을 한글로 만들어놓았기 때문에 이번 미션까지는 @SuppressWarnings("NonAsciiCharacters")를 사용하여 경고..
그동안 블로그를 써오면서 한번도 스킨을 커스터마이징 한적이 없는 것 같아 이번에는 내가 원하는 스타일의 스킨으로 조금씩 변경해보려고한다. 이 글에는 내가 참고한 글들을 정리해보려한다. 글 헤더 변경 (이미지 삭제) 참고 블로그 사이드바에 글쓰기, 관리자, 방명록 추가 참고 블로그 글, 사이드바 가로 크기 변경 참고 블로그 애드핏 광고 배너 크기 설정 문제 다음과 같이 배너가 너무 크다는 생각에 설정에서 크기를 조정해봤지만 변화되는게 없었다. 그래서 일단 광고를 없애고 나중에 더 알아보려한다. 글 수정, 삭제 추가 참고 블로그 로고 추가 및 타이틀 폰트 변경 참고 블로그 뭔가 개발자 느낌을 내보고 싶었다. 이모지 다운로드 사이트 / 파비콘으로 변환 및 다운로드 사이트 / 구글 웹 폰트 사이트 다음 코드와 ..
이전에 Homebrew 설치를 완료했으니 이제는 이를 이용해 Java를 설치하고 테스트용 프로젝트를 실행해보려한다. Java 설치하기 Homebrew 업데이트 $ brew update ⛔️ Homebrew가 설치되어있지 않을 경우 다음을 참고하여 설치하자!! adoptopenjdk/openjdk 추가 brew tap adoptopenjdk/openjdk 설치 가능한 jdk 확인 $ brew search jdk ==> Formulae openjdk openjdk@11 openjdk@8 jd mdk cdk ==> Casks adoptopenjdk-jre adoptopenjdk14 adoptopenjdk-openj9 adoptopenjdk14-jre adoptopenjdk-openj9-jre adoptope..
처음 맥북을 사고보니 이전에 그램을 썼을 때와는 달리 설치 및 설정해줘야하는 것들이 많은 것 같고 아직 나에게는 모든 것들이 너무 생소해 차근차근 알아보고있는 중이다. 그 중 오늘은 대부분의 맥 유저들이 추천하는 macOS용 패키지 관리자 Homebrew를 설치하고 사용해보려한다. 사실 일일이 사이트에 접속해서 다운받으면 되지만 뭔가 맥을 맥처럼 쓰고 싶다는 생각에 설치하게되었다. Homebrew 설치하기 Homebrew 설치 여부 확인 먼저 다음과 같이 내 맥에 homebrew가 설치되어있지 않다는 것을 확인했다. $ brew -v zsh: command not found: brew Homebrew 공식 홈페이지에 들어가보면 다음과 같은 설치 명령어를 확인할 수 있으며 복사할 수 있다. 해당 명령어를 ..
2022년 1월 4일 이제 재테크를 좀 시작해봐야겠다는 생각에 통장을 확인해볼 겸 오랜만에 들어갔더니 Amazon에서 1.3만원이 빠져나간게 보였다. 뭔가 큰 돈은 아니었지만 생각지 못했던 상황이라 좀 당황스러웠다..ㅜ 일단 어디서 청구가 되었는지 확인해봐야하기 때문에 AWS에 접속해 청구서를 확인해보았다. 다음과 같이 청구서에서 월별로 얼마가 청구되었는 지 확인할 수 있다. 아래 세부 정보 탭에서 대체 어떤 곳에서 돈이 새고 있는 지 확인할 수 있다. 보면은 Lightsail에서 대부분 청구된 것을 확인할 수 있으며, EC2에서도 대략 천원정도 청구되었다. Lightsail의 경우 3개월의 프리티어 기간이 종료되었기에 이해할 수 있었지만 EC2의 경우 10개월 정도의 프리티어 기간이 남아있는걸로 알고있..