전체 글 141

프로그래머스 - 무인도 여행 (자바)

내가 보려고 쓰는 풀이. 문제 링크 [나의 풀이] 전형적인 DFS 문제라 생각했다. 근데 난 코딩테스트 찌랭이라(못해도 너무 못함), 내 풀이에 확신이 없었다. 다 풀고 남의 풀이들 보니, 역시나 DFS나 BFS로 푸는 게 일반적이었음. 전형적인 DFS인데도 불구하고 블로그에 기록하는 이유는, 글로 써야 내 머릿속에 한번 더 들어오기 때문. import java.util.*; class Solution { static char[][] map; static int row, col; static int[] dx = {-1, 1, 0, 0}; static int[] dy = {0, 0, -1, 1}; static boolean[][] check; static int sum = 0; public int[] so..

'TDD'와 '리팩토링'에 대하여

NextStep '단위테스트'와 'TDD'에 대하여 - 숫자 야구 게임에 이어, ['TDD'와 '리팩토링'에 대하여 - 자동차 경주]를 하며 학습한 내용이다. 📌 목표 매일 미션 진행하기 한 번에 모두 구현하기보다, 매일 일정한 시간을 투자한다. 가진 것을 비우기 구체적인 요구사항을 회피하지 않고, 적용하기 전과 후의 코드를 분석한다. 내가 가진 것을 비울 때, 가장 많은 것을 배울 수 있다. 정답을 찾기 위해 집착하지 않는다. 미션을 진행하는데 정답은 없다. 정답을 찾으려는 노력이 오히려 학습을 방해한다. 즉, 현재 상황에서 최선의 답을 끊임없이 찾으려고 노력한다. ✔️ 학습 목표 - 자동차 경주 TDD 기반으로 프로그래밍하는 경험 메소드 분리 + 클래스를 분리하는 리팩토링 경험 점진적으로 리팩토링하는..

경계 & 일급 컬렉션이란?

NextStep을 학습하다... '경계'와 '일급 콜렉션'이란 것을 알게 되었다. 한 포스팅에 담기엔 내용이 좀 길어져서 따로 포스팅을 하는 것이다. (일급 컬렉션에 대해서는 맨 아래 출처 링크가서 보시는 게 더 나을 겁니다. 특히 이동욱 개발자님 블로그 추천합니다. 저는 지식 전달보다는 학습에 초점을 맞출 것이라 많이 축약해서 올릴 예정입니다.) 먼저 '경계'를 알아보자. ✔️ 경계 1. 외부 코드 사용하기 API를 사용하는 사용자는 자신의 요구에 집중하는 인터페이스만 존재하기를 기대한다. java.util.List, java.util.Map과 같은 collection을 외부에 노출하는 경우, 사용자는 너무 많은 인터페이스에 노출하게 된다. Map sensors = new HashMap(); ... S..

클래스는 작아야 한다!

안녕하세요. 오늘은 클래스와 클린코드를 엮어서 학습해 볼 것입니다. 즉, 깨끗한 클래스를 다룰 겁니다. 개인적으로 클래스 분리는 객체지향의 꽃이라고 생각합니다. ✔️ 클래스는 작아야 한다! 클래스를 만들 때 첫 번째 규칙은 크기다. 클래스는 작아야 한다. 두 번째 규칙도 크기다. 더 작아야 한다. ❓ 그럼 도대체 얼마나 작아야 할까? 함수는 물리적인 행 수로 크기를 측정했다. 💡 클래스는 맡은 책임을 센다! 다음 코드는 SuperDashboard라는 클래스로, 공개 메서드 수가 대략 70개 정도다. 너무 많은 책임을 가진다. public class SuperDashboard extends JFrame implements MetaDataUser { public String getCustomizerLangu..

깨끗한 테스트 코드 유지하기

오늘은 단위 테스트에 대해 학습을 해볼 것이다. 테스트코드를 짜는 것도 기능 구현과 같이 또 하나의 코드를 작성하는 것이므로 어렵지만, 테스트코드의 단위를 설정하는 것도 초보 개발자인 나에겐 어렵다. 테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화한다. 그러므로 테스트 코드는 깨끗하게 관리하자. ✔️ TDD 법칙 세 가지 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙: 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 예를 들어, 숫자 1 ~ 9까지 검증하는 메서드를 짠다고 가정해보자. 먼저 테스트 코드를 짠다. @Test void 숫..

함수는 한 가지만 해라

오늘은 '함수는 한 가지만 해라'에 대해서 학습할 것이다. 저번에 클린코드 연습하는데, 아무리 해도 메서드 작게 쪼개기가 안 되는 것이었다...! 또 한 번 학습의 중요성을 느끼고... 💡 어떤 프로그램이든 가장 기본적인 단위가 함수다. ✔️ 작게 만들어라 함수를 만드는 첫째 규칙은 '작게'다. 함수를 만드는 둘째 규칙은 '더 작게'다. 그럼 함수가 얼마나 짧아야 할까? 일반적으로 다음 예시 코드정도가 마땅하다. public static String renderPageWithSetupsAndTeardowns (PageData pageData, boolean isSuite) throws Exception { if (isTestPage(pageData)) includeSetupAndTeardownPages(..

'단위테스트'와 'TDD'에 대하여

객제지향, TDD, 클린코드에 대한 학습을 하기 위해 'NEXTSTEP 플레이그라운드' 과정을 진행하고 있다. 총 4번의 단계별 미션이 있다. 4~5개월 전에 우테코 프리코스를 약 4주간 참여한 경험이 있다. 이번 '자바 플레이그라운드' 코스도 우테코 프리코스와 비슷한 것 같다. 단계에 따라 구체적인 요구사항이 추가되는 형식. 우테코 프리코스 때는 단순 회고만 올렸다. 하지만 이번엔 회고뿐만 아니라, 나의 코드를 분석해보는 과정까지 블로그에 담아보려 한다. 'NEXTSTEP 플레이그라운드' 과정은 총 4회의 단계별 미션이 있다. 1회차는 [숫자 야구 게임]이다. 그것을 학습하며 깨달은 것들을 기록해 볼 예정이다. 📌 목표 매일 미션 진행하기 한 번에 모두 구현하기 보다, 매일 일정한 시간을 투자한다. 가..

오류 코드보다 예외를 사용하라

출처: Clean Code 클린 코드 애자일 소프트웨어 장인 정신 / 로버트 C. 마틴 저 (얘 나랑 좀 닮음;;; 내 친구도 인정함) 클린코드에 대해 인상깊은 문장을 봐서 공부해봤다. 예외처리 서두에 '깨끗하고 튼튼한 코드에 한걸음 더 다가가는 단계로 우아하고 고상하게 오류를 처리하는 기법...(후략)' 문구가 인상깊다. 📌 요약 오류 처리도 한 가지 작업이다. 함수는 '한 가지' 작업만 해야 한다. 오류 처리도 '한 가지' 작업에 속한다. 그러므로 오류를 처리하는 함수는 오류만 처리해야 마땅하다. try/catch 블록은 원래가 추하다. 코드 구조에 혼란을 일으키며, 정상적인 동작과 오류 처리 동작을 뒤섞는다. try/catch 블록을 별도 함수로 뽑아내는 편이 낫다. public void delet..

Spring Security로 회원가입을 해보자 (3) - SecurityConfig 및 로그인

안녕하세요. 오늘은 1편 Spring Security로 회원가입을 해보자 (1) - 회원 엔티티 설계와 2편 Spring Security로 회원가입을 해보자 (2) - SecurityConfig 및 회원가입에 이은 3편 로그인 입니다. 이번 포스팅은 로그인 설정이 주를 이룰 것 같네요. 이번 편은 제 코드에 대한 확신이 있는 것은 아닙니다. 저도 학습 중이고, 하나씩 적용해보고 있어서... (전에 올렸던 CRUD와 1:N 연관관계, 회원가입은 나름의 확신?이 있었는데 말이죠.) 아무래도 Spring Security를 사용해 DB에 회원 정보를 가져오고, 그것을 가지고 작업을 하는 게 단순 select로 되는 것이 아니다보니 그렇습니다. 일단 모든 테스트코드는 통과됩니다. 하지만 틀린 부분이 있을 수 있으..

프로젝트 2023.03.06

Spring Security로 회원가입을 해보자 (2) - SecurityConfig 및 회원가입

안녕하세요. 1편인 Spring Security로 회원가입을 해보자 (1) - 회원 엔티티 설계에 이어, SecurityConfig 및 회원가입에 관한 여러 가지 설정들을 하겠습니다. 로그인은 다음 편에 쓸 것 같습니다. 1편 : Spring Security로 회원가입을 해보자 (1) - 회원 엔티티 설계 3편 : Spring Security로 회원가입을 해보자 (3) - SecurityConfig 및 로그인 1편과 마찬가지로, 계속해서 수정될 수 있습니다. ※ 틀린 부분이 있을 수도 있습니다. 먼저 SecurityConfig 입니다. 아마 후에 많이 바뀔 것 같은 부분입니다;; ✔️ SecurityConfig [SecurityConfig] @Configuration @EnableWebSecurity p..

프로젝트 2023.03.02