Tagged

코드 생성기

A collection of 12 posts

코드 생성기

조금 친절한 코드 생성기 6 - 테스트 코드 리팩토링

이번에는 테스트 코드부터 만들기로 마음 먹었습니다. 그랬더니, 테스트 코드에서도 리팩토링 할 부분이 있어서 수정했습니다. 일단 프리마커 Configuration을 여러 테스트에서 공유해야 하기 때문에, 인스턴스 변수로 선언했고, @Before를 이용해서 모든 테스트 마다 새로 만든 Configuration 객체를 사용하게 했습니다. 사실 그럴 필요까진 없는데 말이죠; public class FreemarkerCodeGenerationServiceTest {     FreemarkerCodeGenerationService service;  

코드 생성기

조금 친절한 코드 생성기 5 - 리팩토링

이번에도;; 새 기능을 추가하려다보니까 기존의 코드에서 분리 시켜야 새 메서드에서 재사용 할 수 있는 부분들이 보이길래, 기존의 코드를 쪼개서 리팩토링 했습니다. 그러면서 일부 기능은 프리마커 코드 생성기에서 컨트롤러 설정 부분으로 이동시켰습니다. 아무래도, 최종적으로 생성해야 할 장소와, 파일에 대한 정보는 설정 객체가 받은 기본 정보를 토대로 가공해서 코드 생성기 쪽으로 전달해주는게

코드 생성기

조금 친절한 코드 생성기 4 - 설계 변경 적용(인터페이스)

이번에는 ControllerSettings라는 마커 인터페이스를 도입하여 설계를 변경해보겠습니다. 이번에도 저는 TDD 프로가 아니라서;; 테스트 코드 부터 수정하진 못했습니다.. (흑흑.. 다음 부턴;; 테스트부터;???) public interface CodeGenerationService {     void generateController(ControllerSettings settings, Class domainClass) throws CodeGenerationException; } ControllerSettings 라는 인터페이스에는 아무것도 없습니다. 단순히 타입만 맞추가 위한 거죠. 그리고 FreemarkerControllerSettings 구현체를 만듭니다. 여기에

설계 변경

조금 친절한 코드 생성기 3 - 설계 변경 적용(Map)

먼저 인터페이스를 변경합니다. (TDD 프로라면 테스트 코드부터 바꾸셨겠지만, 저는 TDD 아마추어라;;) public interface CodeGenerationService {     void generateController(Map<String, String> settings, Class domainClass) throws CodeGenerationException; } Map을 사용하도록 바꿨습니다. 그리고 구현체에서 에러가 날테니 에러를 따라가서(인텔리J에서는 에러나는 코드로 알아서 자동으로 이동해 줍니다. 저는 걍 눈뜨고 손들고 있으면

코드 생성기

조금 친절한 코드 생성기 2 - 설계 변경

흠.. 그렇다. 어제 코딩하고 나서부터 계속 뭔가가 찜찜했는데, 그 원인을 (다른 기능을 추가하려다 보니까) 이제서야 알 것 같다. 컨트롤러만 생성할 것이었다면, 이런 발견은 못하고 찜찜한채로 넘어갔곘지만, DAO를 생성하려다 보니 발견한 것 같다. 문제의 원인은 컨트롤러 코드 생성에 필요한 정보를 생성자에서 받았는다는 것이었다.     public FreemarkerCodeGenerationService(Configuration configuration, String

코드 생성기

조금 친절한 코드 생성기 1 - 구상

어제는 컨트롤러 코드를 약간 불친절하게 생성해주는 코드 생성기를 만들었는데, 오늘은 DAO 코드를 조금 친절하게 생성해주는 기능을 추가해보겠습니다. CodeGeneration 인터페이스에 generateDao 메서드를 추가하고, 템플릿도 추가하면 될 것 같네요. 흠.. DAO 코드는 컨트롤러랑 다르게 CRUD 코드가 거~의 변할 일이 없고 추가될 일만 있죠. 게다가 필요로 하는 인터페이스도 하이버네이트 DAO의 경우에는 SessionFactory

코드 생성기

불친절한 코드 생성기 5(일단 끝) - 프리마커 기반 코드 생성기 만들기

서비스 인터페이스를 만듭니다. public interface CodeGenerationService {     void generateController(String module, Class domainClass) throws CodeGenerationException; } 일단은 컨트롤러만 생성할테니, 컨틀로러 생성 메서드만 만듭니다. 이때 만들어질 컨트롤러가 속할 module의 이름과 어떤 도메인 클래스에 대한 컨트롤러인지 알려줍니다. 문제가 생기면 RuntimeException을 던집니다. 자, 이제 이 인터페이스를 프리마커 기반으로 구현할 시간이군요. public class

코드 생성기

불친절한 코드 생성기 4 - 템플릿 만들기

가장 단순한 컨트롤러 코드를 가져다가 군대 군대 코드를 끼워 넣을 지점에 프리마커 태그(?)로 표시를 합니다. … @Controller @SessionAttributes(“${domainName}”) public class ${domainClass}Controller {     @Autowired ${domainClass}Service service;     @Autowired ${domainClass}Validator validator;     @RequestMapping(value=”/${domainName}/list.do”

코드 생성기

불친절한 코드 생성기 3 - Freemarker 학습 테스트

참조: http://freemarker.org/docs/pgui_quickstart_all.html 프로젝트의 sandbox에 패키지를 하나 만들고, main 메서드로 학습 테스트를 작성할 클래스 하나와 프리마커 템플릿 하나를 만듭니다. 그리고 위 참조 링크에서 코드를 가져다가 살짝 바꿔서 테스트 해봅니다. 템플릿 파일은 매우 간단하게;; ${message} main 메서드에 들어갈 코드는 위 링크에서 복사해서 가져온 다음에 File은

코드 생성기

불친절한 코드 생성기 2 - 구상2

아랫 글에 댓글이 달렸지만, 이 기능에 대해 성윤군과 논의를 하다가 IDE가 제공하는 코드 템플릿 기능에 대해 들었습니다. 아차.. 싶더군요. 그래서 생각을 해봤습니다. IDE 템플릿 기능을 이용할 경우 장점 – 매우 간편하게 코드 생성을 할 수 있습니다. 단축키를 입력하면 코드가 좌르륵.. 생겨나겠죠. 단점 – IDE 별로 템플릿을 작성해 줘야 합니다. 현재

코드 생성기

불친절한 코드 생성기 1 - 구상

사실 좀 고민입니다. OSAF처럼 GenericController를 만들까. 그냥 저 코드를 찍어내주는 코드 생성기를 만들까. 어떤게 더 사용하기 편하고 확장하기 편할까? GenericControlle를 확장하기 좋게 잘 만들면 되겠지만, 클래스 만들 때 프레임워크 코드를 상속해야 한다는게 귀찮기도 하고, 그래서 어차피 그 부분을 찍어내는 코드 생성기가 필요해지는 상황입니다. 게다가 GenericController를 만들려면 GenericService 인터페이스까지도 있어야 할테니,