반응형 All205 [우아한테크캠프Pro] 6주차 - 레거시 코드 리팩터링 안녕하세요~ 잭코딩입니다! (해당 업체에서 광고를 받지 않았으며, 교육비를 직접 내고 교육을 받고 있습니다) 교육을 받으며 느낀 점을 적기 위한 포스팅입니다 드디어 마지막 미션을 끝냈습니다! 6주차 지하철 노선도 - 레거시 코드 리팩터링 미션 후기입니다 마지막 미션은 아래와 같은 Step으로 진행되었습니다 Step1 : 테스트를 통한 코드 보호 Step2 : 서비스 리팩터링 Step3 : 양방향을 단방향 Step4 : multi module 적용 각 스텝들은 레거시 코드를 리팩터링하는 일련의 과정입니다 지금까지 했던 미션들에서 배웠던 내용을 이 미션에서 모두 적용할 수 있었습니다 간단히 각 스텝들을 살펴보겠습니다 Step1 : 테스트를 통한 코드 보호 Step1 코드리뷰 링크 먼저 API의 요구사항을 정.. 2021. 1. 31. [우아한테크캠프Pro] 5주차 - ATDD 통합 안녕하세요~ 잭코딩입니다! (해당 업체에서 광고를 받지 않았으며, 교육비를 직접 내고 교육을 받고 있습니다) 교육을 받으며 느낀 점을 적기 위한 포스팅입니다 미션 코드리뷰 PR요청 후, 시간이 조금 생겨서 5주차 리뷰도 빠르게 남겨보겠습니다 5주차 지하철 노선도 - ATDD 내에서 TDD 미션 후기입니다 인수 테스트 통합 API를 검증하기 보다는 시나리오, 흐름을 검증하는 테스트로 통합하는 과정입니다 예를 들어 고객이 사이트에 들어와서 수행할 수 있는 과정을 시나리오로 작성할 수 있습니다 한번 저번 미션에서 작성한 통합 전 인수 테스트를 볼까요? @DisplayName("지하철 노선 관련 기능") public class LineAcceptanceTest extends AcceptanceTest { @Di.. 2021. 1. 27. [루씬 인 액션] 11. 검색 기능 확장(1) - 정렬, Collector, QueryParser 정렬 기능 직접 구현 검색 결과를 연관도 점수, 문서 id, 특정 필드의 값 등이 아닌 다른 값으로 정렬하고 싶다면 루씬의 FieldComparatorSource 클래스를 상속받아 정렬 방법을 직접 구현할 수 있습니다 사용자가 GPS 장비를 통해 현재 검색하는 위치를 파악한다고 가정하면 해당 지점의 위치는 검색 시점에만 알 수 있습니다 색인 시점에 필요한 준비 지리적인 거리로 검색 결과를 정렬하는 예제를 볼까요? ex) 집(0,0)과 사무실(10,10)에서 가장 가까운 멕시코 음식점은 어디? 먼저 색인하는 코드에는 x,y 형태의 문자열로 색인합니다 public class DistanceSortingTest extends TestCase { private RAMDirectory directory; priv.. 2021. 1. 26. [루씬 인 액션] 10. 고급 검색 기법(3) - 연관도 점수, 텀 벡터 함수 질의와 연관도 점수 상황에 따라 연관도 점수 계산 공식을 고치거나 다른 공식으로 바꿔치기해야 할 필요가 있다면 어떻게 해야 할까요? → 함수 질의를 사용하여 바꿀 수 있습니다 함수 질의 클래스 ValueSourceQuery 모든 함수 질의의 최상위 클래스는 ValueSourceQuery 클래스입니다 각 문서의 연관도 점수는 ValueSourceQuery 인스턴스 생성 시, 지정한 ValueSource 객체를 통해 계산합니다 ValueSourceQuery를 상속받고, 색인된 특정 필드의 값으로 연관도 점수를 계산하는 FieldCacheQuery가 가장 간단한 방법 중 하나입니다 간단한 예제를 살펴볼까요? doc.add(new Field("score", Integer.toString(score), Fi.. 2021. 1. 26. [우아한테크캠프Pro] 4주차 - ATDD 안녕하세요~ 잭코딩입니다! (해당 업체에서 광고를 받지 않았으며, 교육비를 직접 내고 교육을 받고 있습니다) 교육을 받으며 느낀 점을 적기 위한 포스팅입니다 아주 오랜만에 후기를 작성하네요 미션이 뒤로갈수록 어렵고 시간이 오래걸리네요 또 요즘 면접을 준비하느라 블로그를 작성할 시간이 없었습니다.. 최근 최종합격하여 이직하게 되었고, 다시 미션을 집중해서 하고 있습니다! 1. 초간단 자동차 경주 게임 2. 로또 - TDD 3. 지하철 노선도 - JPA 4. 지하철 노선도 - ATDD 5. 지하철 노선도 - ATDD 내에서 TDD 6. 지하철 노선도 - 레거시 코드 리팩토링 마지막 미션 총 4개의 스탭 중 2번째 진행중인데 마감기한은 1월 31일 낮 12시까지네요... 잘 끝내서 꼭 수료해보겠습니다! 그럼 .. 2021. 1. 26. [이펙티브자바 3판] ITEM55. 옵셔널 반환은 신중히 하라 이번장의 핵심은... 값을 반환하지 못할 가능성이 있고, 호출할 때마다 반환 값이 없을 가능성이 있는 메서드면 옵셔널을 반환해야 할 상황일 수 있습니다 하지만, 옵셔널 반환에는 성능 저하가 뒤따르니, 성능에 민감한 메서드라면 null을 반환하거나 예외를 던지는 편이 나을 수 있습니다 그리고 옵셔널을 반환값 이외의 용도로 쓰는 경우는 매우 드물다 자바 8 이전) 메서드가 특정 조건에서 값을 반환할 수 없을 때 1. 예외를 던집니다 → 예외는 진짜 예외적인 상황에서만 사용해야 하고, 예외 생성 시, 스택 추적 전체를 캡쳐하므로 비용도 만만치 않습니다 2. (반환 타입이 객체 참조라면) null을 반환합니다 → 반환된 null 값을 어딘가에 저장해두면 언젠가 NullPointerException이 발생할 가능.. 2021. 1. 16. [이펙티브자바 3판] ITEM54. null이 아닌, 빈 컬렉션이나 배열을 반환하라 이번장의 핵심은... null이 아닌, 빈 배열이나 컬렉션을 반환합시다 null을 반환하는 API는 사용하기 어렵고 오류 처리 코드도 늘어납니다 그렇다고 성능이 좋은 것도 아닙니다 null을 반환하지 말자 따라 하지 말아야하는 예제 private final List cheeseInStock = ...; /** * @return 매장 안의 모든 치즈가 목록을 반환한다 * 단, 재고가 없다면 null 반환 */ public List getCheese() { return cheesesInStock.isEmpty() ? null : new ArrayList(cheesesInStock); } → null을 리턴해버리면 클라이언트는 이 null 상황을 처리하는 코드를 추가로 작성해야합니다 (클라이언트들은 계속 방어.. 2021. 1. 16. 이전 1 ··· 9 10 11 12 13 14 15 ··· 30 다음 반응형