본문 바로가기

분류 전체보기58

클린코드(clean code)를 읽고 요점 정리 및 코딩의 방향성 잡기 시작 클린 코드. 말그대로 깔끔한 코드를 작성하기 위해 개발자가 알아야 할 사항들을 집필한 교과서 같은 책이었습니다. 다만 우리나라 저자가 아닌 점, 최초 발행일이 2008년인 점을 감안하여 맹목적으로 따르는 것이 아닌 옳은 방향을 잡는 나침반과 같은 용도로 삼아야겠다 생각했습니다. 회고  클린 코드의 옮긴이는 서문에서부터 시간에 쫓겨 나쁜 코드를 작성한 자신을 후회한다고 반성하였습니다. 1회독을 한 저도 그와 같이 반성을 하게 되었습니다. 이 책은 그런 책입니다. 개발에 대한 꿈을 가지고 공부한 뒤 입사를 하였지만 시간이 흐르며 일정에 치이고 현실과 타협한다는 자기합리화로 편한 길을 찾느라 망가진 코드에 대해 생각하게 만듭니다. 비슷해 보이는 기능을 찾아 제대로 검토하지 않고 복사 붙혀넣기를 하고 그저.. 2024. 6. 12.
프로그래머스 레벨 1 - 코딩테스트 고득점kit 해쉬 : 폰켓몬[자바] 문제난이도 : 레벨1문제 :폰켓몬을 가져갈 수 있는 최대 개수는 총 폰켓몬 / 2같은 종류의 폰켓몬은 가져갈 수 없음제한사항 :nums 배열에 폰켓몬의 종류가 1차원 배열로 담겨 있음.1 폰켓몬의 종류는 자연수 1~200,000답애초에 코딩테스트 공부를 거의 안하기도 했고 오랜만에 다시 공부하는 코딩테스트라 어떻게 풀어야 하는지 전혀 감이 잡히지 않았습니다.배열을 순회하면서 원소들끼리 비교해서 다르다면 count++ 하는 방법을 생각했으나 포기했습니다.(다른 사람의 풀이를 보니 sort를 통해 정렬한 후에 제가 생각한 방법대로 한 것을 보긴 했습니다. sort함수를 알고는 있었지만 거기까지 연결짓지 못했습니다.)결국 풀이를 통해 HashSet와 중복 제거라는 키워드를 찾았고 그것을 토대로 문제를 풀 수 .. 2024. 6. 12.
프로그래머스 레벨 2 - 코딩테스트 고득점kit 해쉬 : 전화번호 목록[자바] 문제난이도 : 레벨2문제 :전화번호부에 적힌 전화번호 중 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하고 결과에 따라 true, false를 리턴하는 문제.전화번호는 String[] phoneBook형태로 주어지게 된다.제한사항 :1 각 전화번호의 길이는 1이상 20이하중복되는 전화번호는 없음답제가 처음 생각한 것은 배열을 정렬한 뒤 가장 작은 수를 가진 배열의 원소를 기준으로 다른 원소들과 비교하여 접두어에 속하는지 판단하는 것이었습니다. import java.util.*;class Solution { public boolean solution(String[] phone_book) { boolean answer = true; ArrayList phone_save_l.. 2024. 6. 12.
스프링 부트 DI - 필드 주입과 생성자 주입의 초기화 시점 DI(의존성 주입)의존성 주입이란 객체가 스프링 빈에 등록된 다른 객체를 필요로 할 경우 해당하는 객체를 가져오는(주입해주는) 행위이다.전통적인 자바에서는 스스로 객체를 생성하거나 찾지만 스프링 부트에서는 이 과정을 외부에서 처리한다. (SOLID원칙을 지켜 객체 간 결합도를 낮추고 코드의 유연성을 증가함.)의존성 주입의 유형생성자 주입수정자(setter) 주입필드 주입일반 메소드 주입포스팅을 하게 된 배경과거 실무에서 저는 이 필드 주입만을 사용하여 DI를 진행했습니다. 그러나 김영한 선생님의 강의를 들으며 이 필드 주입은 그다지 권장하지 않는 방법이다, 라는 것을 배웠습니다.why?-> 필드 주입을 할 경우 객체가 생성되고 난 뒤에 의존성 주입이 일어나기 때문에 객체가 가변적이게 됩니다.-> 이는 다.. 2024. 6. 12.
리액트 커스텀 훅 사용 시 다중상태관리와 클로저의 존재 이유 리액트의 컴포넌트리액트의 컴포넌트는 함수와 클래스로 나뉜다.요새는 함수 컴포넌트를 사용하는 추세라고 한다. 왜냐하면 클래스 컴포넌트는 변경에 취약하여 인스턴스로 만든 속성에 접근이 가능한 반면 함수는 내부 상태를 클로저로 관리하기 때문에 외부에서 접근하지 못한다.또한 클래스 컴포넌트는 리액트 컴포넌트를 반드시 상속 받아야하고 생성자 super 호출 및 render메소드를 반드시 구현해야함.함수 컴포넌트는 리액트 엘리먼트를 반환해야함.클래스 컴포넌트는 상태를 관리하기 위해 this 객체를 사용한다.반면 함수 컴포넌트는 상태관리에 한계가 있기 때문에 등장한 것이 훅(hook)이다.훅(hook)리액트의 useState를 사용하여 함수 컴포넌트의 state값을 변경한다. (클래스의 인스턴스의 경우 this.st.. 2024. 6. 12.
스프링 부트 유효성 검증 예외처리하는 방법(jakarta validation) 시작SI 회사에 재직할때부터 유효성 검증하는 방법은 꽤 자주 바뀌었다. 자바 jsp를 주로 사용해서 그냥 jsp에서 모두 처리를 하고 백엔드에서 처리해야할 로직이 있을 경우에만 service단에서 처리하기도 했다. 나중에는 컨트롤러와 jsp에서 더블체킹하기도 했고 dto의 어노테이션을 사용하여 컨트롤러에서 BindResult 객체를 사용하여 처리를 하기도 했다.사이드 프로젝트를 진행하며 이에 대해 고민하다 나름대로 길을 정하여 그 과정을 포스팅해보고자 한다.Service 처리재직 초반에 사용했던 방법이다. 로그인 API를 예로 들자면, 아이디나 패스워드가 공백은 아닌지, 패스워드 정규식을 만족하는지 등의 체크사항들이 있을 것이다. 그중 프론트엔드에서 처리 가능한 로직은 jsp단에서 전부 체크한다.if(x.. 2024. 6. 12.