사용자 입력값(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")를 사용하여 경고..
2022년 1월 4일 이제 재테크를 좀 시작해봐야겠다는 생각에 통장을 확인해볼 겸 오랜만에 들어갔더니 Amazon에서 1.3만원이 빠져나간게 보였다. 뭔가 큰 돈은 아니었지만 생각지 못했던 상황이라 좀 당황스러웠다..ㅜ 일단 어디서 청구가 되었는지 확인해봐야하기 때문에 AWS에 접속해 청구서를 확인해보았다. 다음과 같이 청구서에서 월별로 얼마가 청구되었는 지 확인할 수 있다. 아래 세부 정보 탭에서 대체 어떤 곳에서 돈이 새고 있는 지 확인할 수 있다. 보면은 Lightsail에서 대부분 청구된 것을 확인할 수 있으며, EC2에서도 대략 천원정도 청구되었다. Lightsail의 경우 3개월의 프리티어 기간이 종료되었기에 이해할 수 있었지만 EC2의 경우 10개월 정도의 프리티어 기간이 남아있는걸로 알고있..
우아한테크코스의 프리코스 2주차 미션 제출 후 받은 공통 피드백 내용 중 저에게 도움이 된 피드백 내용과 그에 대한 생각, 또 해당 피드백을 코드에 어떻게 적용하였는지 작성해보려고합니다. 특히 이번 피드백의 경우 제가 2주차 미션을 진행하며 고민했던 부분들을 다룬 내용이 꽤 있어 제가 미션을 진행해온 방향이 크게 틀리지 않았다는 것을 확인 받을 수 있었던 것 같습니다. 발생할 수 있는 예외 케이스에 대해 고민한다 정상적인 경우를 구현하는 것보다 예외 상황을 모두 고려해 프로그래밍하는 것이 더 어렵다. 예외 상황을 고려해 프로그래밍하는 습관을 들인다. 이 피드백을 보고 저는 1차 코딩테스트를 봤을 때가 생각났습니다. 코딩테스트를 볼 당시 나름 기능 구현 뿐만 아니라 예외 상황에 대한 처리 또한 신경썼다고 ..
우아한테크코스의 프리코스 1주차 미션 제출 후 받은 공통 피드백 내용 중 나에게 도움이 된 피드백 내용과 그에 대한 생각, 또 해당 피드백을 코드에 어떻게 적용하였는지 작성하였다. 축약하지 마라 의도를 드러낼 수 있다면 이름이 길어져도 괜찮다. 누구나 실은 클래스, 메서드, 또는 변수의 이름을 줄이려는 유혹에 곧잘 빠지곤 한다. 축약은 혼란을 야기하며, 더 큰 문제를 숨기는 경향이 있다. 클래스와 메서드 이름을 한 두 단어로 유지하려고 노력하고 문맥을 중복하는 이름을 자제하자. 클래스 이름이 Order라면 shipOrder라고 메서드 이름을 지을 필요가 없다. 짧게 ship()이라고 하면 클라이언트에서는 order.ship()라고 호출하며, 간결한 호출의 표현이 된다. - 객체 지향 생활 체조 원칙 5:..
MVC 패턴 Model - View - Controller의 세가지 개념을 사용하는 어플리케이션 디자인 패턴이다. MVC패턴을 잘 적용한다면, 사용자 인터페이스(View)로부터 비즈니스 로직(Model)을 분리하여 애플리케이션의 시각적 요소나 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. * 비즈니스 로직 (Business logic) : 실세계의 규칙에 따라 데이터를 생성/표시/저장/변경하는 부분을 말한다. View (User Interface) 사용자에게 직접적으로 보여지는 부분으로, 입/출력을 담당한다. 1. 사용자로부터 이벤트, 입력값을 받으면 이를 Controller에게 전달한다. 2. Controller로 부터 결과값을 전달 받으면 이를 출력한다. View는..
우아한테크코스 프리코스에서는 JDK 1.8 버전 사용을 권고하고 있다. 하지만 내 노트북의 JDK는 버전 11을 쓰고 있고 현재 Spring Boot로 개발 중인 mnm 프로젝트에서 이 JDK11을 사용하고 있기 때문에 혹시 몰라 노트북의 환경을 JDK1.8로 변경하기가 두려워 JDK1.8을 설치한 도커 컨테이너를 생성해 해당 환경에서 미션 프로젝트를 테스트해보려한다. 🍑 도커 이미지 생성 도커 버전 확인 D:\woowacourse\docker-jdk8> docker -v Docker version 20.10.8, build 3967b7d 도커 파일 생성 (Dockerfile) FROM ubuntu RUN apt-get update RUN apt-get install -y openjdk-8-jdk RUN..
우리는 지금까지 NAVER CAMPUS HACKDAY의 Java Code Conventions를 학습하였다. 📌 [우아한테크코스/프리코스] Java Code Conventions (tistory.com) [우아한테크코스/프리코스] Java Code Conventions 우아한테크코스 프리코스에서 권고하는 NAVER CAMPUS HACKDAY의 Java Code Conventions를 학습하고 이를 적용시켜 보려한다. 📌 캠퍼스 핵데이 Java 코딩 컨벤션 (naver.github.io) 캠퍼스 핵데이 Java 코딩 컨벤.. programmer-ririhan.tistory.com 그렇다면 이번에는 NAVER CAMPUS HACKDAY의 Java Code Conventions를 IntellJ 설정에 적용한다..