목록분류 전체보기 (89)
설모의 기록
HTTP통신과 Spring을 이용한 데이터 저장 오늘은 기본적인 HTTP통신이 이루어지는 간략한 과정과 h2database 를 이용해 Spring에서 데이터를 관리하는 방법에 대해 학습했습니다. HTTP통신 브라우저에서 http://hyeooona825.tistory.com/ 를 검색하면 그냥 해당 페이지 하나가 로드되는 것과 같아 보이지만, 실제로는 많은 일이 일어납니다. 위의 그림이 간략하게 나타낸 모습입니다. 1. http://hyeooona825.tistory.com/ 를 입력하면 해당 도메인에 대한 IP주소를 알기 위해 DNS 서버에게 요청합니다. 그림에는 DNS 서버가 한 대이지만, 실제로는 여러 상위 DNS 서버가 있을 수 있습니다. 2. DNS 서버는 요청받은 도메인에 해당하는 IP주소를 ..
TDD 마무리, Spring Boot 의 시작 우아한테크캠프의 첫 주의 마무리로 일주일동안 배운 TDD 방식과 객체지향 프로그래밍에 대한 내용을 정리하고 앞으로 사용해 볼 Spring Boot 의 기초적인 사용법을 살펴보는 시간을 가졌습니다. TDD 방식은 앞서 정리한 포스팅과 같이 테스트 코드를 먼저 작성한 이후에 그 테스트 코드가 제대로 동작하도록 코드를 구현하고 리팩토링하는 방식입니다. 우아한테크캠프에 참여하기 이전에는 테스트 코드를 짜본 적도 없었고, 코드를 빠르게 구현해나가는 것에 초점이 맞춰져 있었습니다. 그래서 제 코딩습관을 고치는 것이 어색하고 힘들었습니다. 그런데 오늘 강의해주신 pobi의 의견이 와닿았습니다.TDD 방식의 연습은 실제 프로젝트가 아니라 자신의 장난감 프로젝트에서 시작하라..
객체지향 프로그래밍 기반으로 TDD 수행하기 오늘은 어제의 내용과 객체지향 생활체조 원칙을 바탕으로 코드를 구현하는 연습을 배웠습니다. 객체지향 생활체조 원칙은 극단적이라고 느낄 수 있지만 객체지향적으로 프로그래밍하기 위해 익혀야하는 원칙입니다. 그 내용은 아래와 같습니다.하나의 메소드에는 오직 한 단계의 들여쓰기만 한다.else 예약어를 쓰지 않는다.모든 원시값(primitive type) 과 문자열을 포장한다.한 줄에 점을 하나만 찍는다.줄여쓰지 않는다. // 축약 금지모든 엔티티를 작게 유지한다.3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.일급 콜렉션을 쓴다.getter / settert / property를 쓰지 않는다. TDD 방식을 구현하며 주의해야 할 사항위의 객체지향 생활체조 원..
TDD (Test Driven Development) ? 개발을 생각의 흐름대로 진행하다보면, 중간의 결과값을 알아보고 싶지만 그 값을 알기 위해서 해야 할 작업들이 너무 많아 포기할 때가 종종 있었을 것입니다. DB 조회 코드만 생각해도 데이터베이스에 해당 데이터가 있는지만 조회하려 해도 데이터베이스 환경을 세팅하는 코드를 실행하고, connection 을 연결하는 코드를 실행해야 비로소 데이터를 조회할 수 있습니다. 이럴 때 유용한 것이 단위 테스트입니다. 그리고 단위 테스트를 언제 작성하고 수행해야 하는지를 나타내는 방식이 TDD입니다. TDD 방식을 이용하지 않으면 일반적으로 테스트 코드를 작성하기 어렵도록 코드를 구현합니다. 그렇다보니 테스트 코드를 작성하기 어려워 '하지말자!' 또는 '다음 로..
이 포스트는 Java 언어를 이용해 프로그램을 구현해 나갈 때, 단위 테스트를 수행하기 위해 사용하는 프레임워크인 JUnit에 대한 내용입니다. 프로그램을 구현하다보면 지금 내가 작성하고 있는 코드가 정상적으로 수행되는 코드인지가 궁금한 경우가 많습니다. Java의 경우 System.out.print() 또는 디버깅 툴을 이용해 알아보고, JavaScript, TypeScript 의 경우에는 console.log() 를 이용하거나 debugger를 이용해 알아볼 수는 있습니다. 그러나 코드 중간중간의 단위에 대한 결과값을 빠르게 보기에는 어려움이 많습니다. 중간 결과를 알아보기 위해 이전에 수행해야하는 작업까지 모두 수행한 후 알아볼 수 있기 때문입니다. 이럴 때 유용한 프레임워크가 바로 JUnit 입니..
Code Convention? 개발자라면 어느 언어를 사용하느냐에 관계없이 코드 컨벤션의 중요성을 알 것입니다. 코드 스타일이 다른 사람들과 협업을 하다보면 코드를 구현하는 시간보다 동료의 코드를 이해하는 시간이 더 오래 걸립니다. for문의 body를 감싸는 괄호를 한 줄 띄우냐, 안 띄우냐로도 신경쓰이기 때문이죠. 코드 컨벤션은 기본적으로 언어마다 지켜야 할 규칙이 있지만 그 이외의 부분에서는 팀원들과 상의하여 규칙을 모두 정해야 합니다. 코드 컨벤션 규칙을 정하고 협업을 시작하면 코드를 읽는데에도, 유지보수하는데에도 상대적으로 적은 시간이 걸립니다. 오늘 제가 우아한테크캠프에서 배운 간단한 코드 컨벤션은 아래와 같습니다. 1. 클래스 명은 대문자로, 메소드 명은 소문자로 시작하기public clas..
빌더 패턴(Builder Pattern)안드로이드 프로젝트 또는 자바 프로젝트를 진행하다보면 많은 라이브러리를 사용하게 되는데요. 라이브러리에서 제공하는 객체를 사용할 때 빌더 패턴이 자주 보입니다. 예전에는 그냥 구현한 코드인 줄 알았는데, 여러 곳에서 똑같은 패턴을 사용하는 것을 보고 공부하게 되었습니다. 서버와 HTTP 통신을 하기 위해 사용하는 라이브러리인 Retrofit2를 사용할 때에도 빌더 패턴을 이용하게 됩니다. 그렇다면 빌더 패턴은 무엇일까요? 클래스 작성객체지향 프로그래밍 언어를 사용하면 클래스를 사용해 객체의 틀을 정의하게 되는데요. 흔히 작성하는 클래스 코드 예제를 살펴보겠습니다. 123456789101112131415161718192021222324252627public class..
이 문제는 상, 하, 좌, 우로 1칸씩 이동하거나 말처럼 입력받은 K번만큼만 (상, 하) (좌, 우)로 두칸 또는 한칸씩 움직여 오른쪽 아래칸으로 이동하는데에 걸리는 시간을 구하는 문제입니다. 처음엔 DFS로 푸는게 더 간단할거라 생각해서 DFS로 풀다가 시간초과를 해결하지 못해 BFS로 방법을 바꿔 풀었습니다. 이번에는 계속 틀리길래 다른 분들의 코드를 검색해봤지만 로직이 뭐가 다른건지를 이해를 못했습니다T^T 2일동안 답답해하다 오류를 발견했는데, 저는 길을 찾지 못할 때 지금까지 걸린 시간을 출력해주고 있었습니다. -1을 반환해주는 코드로 바꾸니 맞았습니다. 너무 허탈하네요.. 기본 BFS에서 사용하는 dx, dy 배열을 12 길이의 배열로 바꾸고 for문에서 인덱스가 4보다 작을 때와 클 때를 나..
이 문제는 DFS와 Backtracking을 이용해 중복되지 않은 알파벳은 방문하지 않는 조건으로 (0, 0) 에서 갈 수 있는 경로의 최대거리를 구하는 문제입니다. 저는 char 자료형 특징을 이용할 생각을 못하고 지금까지 지나온 알파벳을 ArrayList에 저장해 다음 경로로 갈 때마다 체크해주는 코드로 짜봤는데요. 시간이 8000ms가 넘길래 너무 놀라서 검색해봤는데 char 자료형을 이용하면 훨씬 수월하게 탐색할 수 있는 방법이 있었습니다. 아래에 비효율적으로 짠 코드와 최적화한 코드를 차례로 첨부하겠습니다. 우선 대문자 알파벳이기 때문에 'A' ~ 'Z' 까지가 범위가 되며 int형으로 바꾸면 65 ~ 90이 됩니다. 그래서 저는 check 배열의 인덱스를 (입력 알파벳 - 'A' ) 이라 생각..