본문 바로가기
  • Where there is a will there is a way.

개발85

테스트 주도 개발 테스트 주도 개발 켄트백 아저씨 1. 작은 테스트를 하나 추가한다. 2. 모든 테스트를 실행해서 테스트가 실패하는 것을 확인한다. 3. 조금 수정한다. 4. 모든 테스트를 실행해서 테스트가 성공하는 것을 확인한다. 5. 중복을 제거하기 위해 리팩토링을 한다. 테스트 주도 개발이기 때문에 무턱대고 우선 시나리오 대로 코드를 작성한다. @RunWith(SpringJUnit4ClassRunner.class) public class DollarTests { @Test public void testMultiplication(){ Dollar five = new Dollar(5); five.times(2); assertEquals(10, five.amount); } } 여기서 1. 객체가 없을 것이고 2. 생성자가.. 2019. 8. 9.
리팩토링 리팩토링은 어떨 때 필요한가 같은 작업의 삼진 아웃 때 어떤 작업을 처음 할 땐 그냥 하고, 비슷한 작업을 두 번째 해야 할 땐 중복 작업이라 좀 망설여져도 일단 그냥 하고, 세번째 하게 되면 그때 리팩토링을 실시하는 것이다. 기능을 추가 할 때 소프트웨어에 새 기능을 추가해야 할때 이 시점에 해야 하는 첫째 이유는 코드를 이해하기 쉽게 만들기 위해서다. 버그를 수정할 때 주로 코드를 이해하기 쉽게 만들려고 리팩토링한다. 코드의 기능을 파악하려다 이해하기 힘들면 이해하기 쉽게 만들 려고 리팩토링을 실시한다. 리팩토링을 하고나면 버그 찾기가 쉬워진다. 코드를 검수할 때 코드 검수를 통해 개발 팀원 모두가 코드를 파악하게 되며 선임, 개발자가 경험이 적은 개발자에게 지식을 전수하는 결과도 얻게 된다. 리팩토.. 2019. 7. 25.
템플릿 메소드 패턴 템플릿 메소드 패턴 이란 언제 사용하는것이 좋은가 ? 변하는 부분과 변하지 않는 부분이 있고 변하지 않는 부분의 관리포인트가 많을 때 사용하면 좋다. 만약 커피와 차를 만든다고 가정해보자 커피를 끓일때와 차를 끓일때 방법이 비슷하다면? 커피 1. 물을 끓인다 2. 커피를 우려낸다. 3. 커피를 컵에 따른다. 4. 설탕과 우유를 추가한다. 차 1. 물을 끓인다 2. 차를 우려낸다. 3. 차를 컵에 따른다. 4. 레몬을 추가한다. 자 이렇게 되면 우리는 흔히 package template.first; public abstract class Beverage { abstract void prepareRecipe(); void boilWater(){ System.out.println("물을 끓인다"); } voi.. 2019. 7. 4.
어댑터 패턴 어댑터 패턴 객체지향 어댑터가 뭔지는 그리 어렵지 않게 이해할 수 있을 것이다. 흔히 미국여행 갔을 경우 어댑터가 달라서 준비해간 경험이 있다면 말이다. 어댑터의 역할은 국산 플러그와 미국식 소켓 사이에서 국산 전원 플러그를 미국식 소켓에 꽂을 수 있게 해주는 역할을 한다. 그렇다면 객체지향 어댑터는 어떨까? 객체지향 어댑터 어떤 소프트웨어 시스템이 있는데, 새로운 업체에서 제공한 클래스 라이브러리를 사용해야 한다고 해 보자. 그런데 새로 채택한 업체에서 사용하는 인터페이스가 기존 업체에서 사용하던 인터페이스하고 다르다고 가정해 보자. 하지만 기존의 코드를 바꿔서 이 문제를 해결할 수는 없는 상황이다. 그렇다고 업체에서 공급 받은 클래스도 변경할 수 없고.. 그렇다면 이때 한 업체에서 사용하는 인터페이스.. 2019. 7. 1.
커맨드 패턴 커맨드 패턴 호출 캡슐화 : 한차원 높은 단계의 캡슐화 메소드 호출을 캡슐화하는 것이다. 메소드 호출을 캡슐화 하는 것이다. 흔히 식당으로 생각해보자 고객과 웨이트리스 , 그리고 주문과 주방장 사이의 관계에 대하서 생각을 해보면 커맨드 패턴에서 각 객체들 사이의 관계를 이해할 수 있을 것이다. 1. 고객이 웨이트리스한테 주문을 한다. 2. 웨이터는 주문을 받아서 카운터에 갖다 주고 주분 받아요 이야기를 한다. 3. 주방장이 주문대로 음식을 준비한다. 1 -> createOrder() 2 -> takeOrder() 3 -> orderUp() 4 -> makeBurger(), makeSake() flow 주문서는 주문한 메뉴를 요구하는 역할을 하는 객체로 생각할 수 있다. 다른 객체와 마찬가지로 여기저기로 .. 2019. 6. 30.
스프링 부트 스케쥴러 메모 @Component @AllArgsConstructor public class LanguageComponent implements CommandLineRunner { public static List languages; private LanguageRepository languageRepository; @Override public void run(String... args) throws Exception { languages = languageRepository.findAll(); } public List getLanguages() { return languages; } /** * 매일 10시에 language 정보 받아오게끔 수정 */ @Scheduled(cron = "0 0 10 * * *") pu.. 2019. 6. 10.