전체보기(316)
-
[2019.02.11] Retrofit custom builder
요구사항1. 리퀘스트 별로 API 에 호출하기 위한 동일한 데이터 포맷이 존재함.2. 리퀘스트 별로 매번 Object를 파싱해서 JsonObject로 바꿔줘야하는 것이 유쾌하지 않음3. 리퀘스트 별로 매번 new Retrofit.builder 하는 과정이 부적절해보임4. 모든 리퀘스트는 동일한 헤더 포맷을 가짐 Header {"auth-token" : "-", "user-token" : "-" } Body {"request" : {"userToken" : "-""uri" : "-""requestTime" : "-"}"contents" : {...} } 요구사항 1public class RequestDataFormat { private JsonObject request; private JsonObject ..
2019.02.11 -
[2019.02.09] 클린 코드 (JUnit 리팩토링 사례 분석)
JUnit 리팩토링 사례 분석 이제는 더 이상 필요없는 접두어를 제거하자 지저분한 조건문은 메소드로 boolean 을 반환 받도록 분리하자 특정 메소드에 사용되는 함수들이 있다면해당 함수들의 사용 방식에 일괄성을 주자(모두 반환하는 데이터가 있게 하도록 하거나 모두 없게 하거나 하자) 숨겨진 시간 결합을 끊자. 숨겨진 시간 결합findA가 멤버변수 A를 찾아내서 할당하는 함수고,findB가 멤버변수 A를 이용해서 B를 찾아내는 함수라면,다음 코드는 숨겨진 시간 결합이 존재한다.findA();findB(); 아래와 같이 바꿔서 숨겨진 시간 결합을 깰 수 있다.A = findA();B = findB(A); 좀 더 개선하면 findB를 다음과 같이 고치고 findAAndB함수를 사용해라.public void ..
2019.02.09 -
[2019.02.09] 클린 코드 (동시성1)
동시성 동시성과 깔끔한 코드는 양립하기 어렵다.그러나 동시성은 결합을 없애는 전략이다.무엇과 언제를 분리하기 때문이다. 동시성은 필요하다.동시성은 다소 부하가 생긴다.동시성은 코드도 더 짜야한다.동시성은 복잡하다.동시성은 버그를 재현하기 힘들다.동시성은 근본적인 설계 전략을 재고해야한다. 동시성 방어 원칙1. 단일 책임 원칙 -> 동시성 코드는 다른 코드와 분리하라2. 자료 범위 제한 -> 공유자료를 최대한 줄이고 캡슐화하라, synchronized로 임계영역을 보호하라3. 자료 사본 사용하기4. 스레드를 독립적으로 구현하라.5. 라이브러리를 이해하라. 스레드 환경에 안전한 컬랙션java.util.concurrent 패키지java.util.concurrent.atomic 패키지java.util.concu..
2019.02.09 -
[2019.02.09] POJO
POJO (Wiki)프레임워크를 따르지 않는 간단한 자바 오브젝트 POJO (역사)1. EJB (Enterprise Java Beans)는 다양한 기능을 제공했다. 그런데 EJB는 지나친 하이스펙으로 인해 아키텍처가 매우 무거웠다. 그래서 원래쓰던 Java Bean으로 돌아가자라는 의견이 존재하기 시작했다. 2. 그런데 그냥 다시 옛날에 쓰던 Java Bean 을 쓰자라는 말은 뭔가 그럴듯 하지 못했다. 그래서 단순히 과거에 쓰던 Java Bean이라는 명칭을 POJO로 바꾸어서 불렀다. 그랬더니 신기하게도 Java Bean 으로 돌아가는 흐름이 만들어졌다. 3. 그런데 단순히 EJB를 버리고 POJO 방식으로 돌아간다는 것은 기술 역행에 가깝다. 그래서 EJB를 대체할 수 있는 POJO 기반의 프레임워..
2019.02.09 -
[2019.02.09] 클린 코드 (시스템, 창발성)
시스템 시스템 생성과 시스템 사용을 분리하라아래는 이것을 실제로 적용하기 위한 기법들이다. 1. 초기화 지연public SystemService getSystemService(){if(systemService == null)systemService = new SystemServiceImpl();return systemService;}+ 객체가 필요할 때까지 객체 생성을 미룰 수 있다.+ null을 반환하지 않는다.- SystemServiceImpl 생성자에 의존적이다.- SystemServiceImpl 가 적절한 기본값인지 모른다.- 환경에 따라 SystemService를 다르게 줄경우 SRP 원칙에 위배된다. 2. Main 분리하기*메인 함수는 시스템에 필요한 객체를 생성만한다.*애플리케이션은 이 객체..
2019.02.09 -
[2019.02.09] TDD를 위한 JUnit
JUnit- 단위 테스트 도구- Run as JUnit으로 단위 테스트용 클래스를 실행해볼 수 있다.- 테스트를 성공 실패 로 확인할 수 있다. Assert 문 assertTrue(a) : a가 참이면 통과한다. 아니면 Assert 된다.assertEquals(a,b) : a와 b가 같으면 통과한다. 아니면 Assert 된다.assertSame(a,b) : 객체 a와 객체 b가 같으면 통과한다. 아니면 Assert 된다.assertNotNull(a) : 객체 a가 NULL이 아니면 통과한다. 아니면 Assert 된다.assertArrayEquals(a,b) : 배열 a와 배열 b가 같으면 통과한다. 아니면 Assert 된다.출처 : http://www.nextree.co.kr/p11104/ Annotat..
2019.02.09