티스토리 뷰

Multiline string 라이브러리 적용기(?)

개요

Java에는 여러 줄에 걸쳐서 String을 선언하는 문법이 없다.

충격과 공포다 그지 깽깽이들아!
정말 충격과 공포가 아닐 수 없는데, 다른 언어에서는 아래와 같이 세따옴표나 기타 기호를 사용하여 문자열을 선언할 수 있지만,

str = """ multi
    line
    string
""""

Java에서는 중간에 + 와 따옴표(“)를 넣어야만 한다.

String str = "multi" +
    "line"    +
    "string";

컴파일러 단의 최적화 문제는 둘째치더라도, 중간에 문자열 편집을 해야 하는 경우에는 매우 불편하다.
특히, SQL문의 경우 여러 줄로 길어지는 경우가 많고, 가독성에서도 좋지 않은 편이다.

그래서?

내가 작성 및 유지보수하고 있는 어플의 경우 별다른 프레임워크 없이 생 JSP로 작성하였는데,
프론트 부분은 꾸준한 유지보수를 통해 비교적 봐줄만 하지만, DB와 관련된 영역은 정말 못봐줄 지경이다.
못 봐주는 이유중의 하나가 바로 DB DAO의 SQL문이라 이번에 해당 부분을 깔끔하게 재작성해보기로 했다.

그러나, Java 8 버전이 나왔음에도 JAVA 문법에서 multi-line string 지원은 요원해 보인다.
그래서 여러가지 대안이 나오고 있는데, 하나하나 살펴보고 프로젝트에 적용 가능성을 살펴보았다.

뭐가 있을까?

  • iBatis나 MyBatis등의 Framework사용

    • SQL구문과 파라메터를 따로 관리하여 가독성이 좋은 편
    • 다이나믹쿼리 생성이 필요한 경우 if, for문에 해당하는 태그가 추가로 필요하여 너무 복잡해진다.
  • Groovy의 따옴표 세개(“””)문법 사용

    • 추가로 문법을 사용하지 않고 일반 문자열처럼 선언이 가능하다
    • Eclipse groovy 플러그인 설치가 필요하고, 실행시 Groovy Runtime가 같이 필요하다.
    • 적용 예 : http://blog.benelog.net/2708621
  • Multiline annotation

    • String 변수에 @Multiline을 선언하고, javadoc 주석을 달아주면 주석 내용이 문자열 변수에 저장된다.
    • 입력해야 할 내용이 조금 늘어나지만, Java문법에 큰 변화를 주지 않는다. 해당 String 변수에 마우스를 가져다 대면 내용이 주석처럼 나오는건 덤.
    • 무슨 문제인지 몰라도 JUnit테스트시 해당 문자열이 치환되지 않고 null값이 나오는 경우가 있다.
      Annotation Processor가 실행되지 않아서 그런것 같은데 이클립스 설정 문제인지, 의존성 문제인지 확인하다가 포기
    • eclipse plugin 폴더에 넣어준 후 이클립스 클래스패스에 등록하면 문제없이 사용 가능하다. lombok 프로젝트 적용방법에서 참고했다.
    • 적용 예 : GitHub 링크
  • XML Property

    • 기존의 properties파일을 대체하여 xml관리하기 위한 방법으로, properties파일에서 한글이 제대로 표시되지 않는 문제때문에 프로젝트의 다른 부분에서 사용중이었다.
    • 결국 iBatis의 SQL관리와 별 차이가 없어지게 되었지만, 다이나믹 쿼리는 Java에서 직접 String.format() 등으로 처리를 해야할듯 싶다.
    • 적용 예 : http://derveljunit.tistory.com/137

결론

Multiline annotation을 사용하고 있는데 나름 좋다.
다만 몇가지 아쉬운 점이라면 탭으로 들여쓰기 한 것이 띄어쓰기로 변환이 되어 추가 작업을 해 주어야 한다는 점이다.

물롱 ibatis를 사용했다면 이 고생을 하지 않았겠지. 처음부터 제대로된 설계를 하지 않은 원죄다 :(



'컴퓨터 이야기' 카테고리의 다른 글

객체와 클래스  (0) 2011.12.01
라나 뽑기 성공  (0) 2011.07.31
7의 배수 판정 프로그램  (0) 2011.04.05
U123 바이오스 모음  (0) 2009.12.29
SetFSB를 사용하여 U123 오버클럭  (0) 2009.12.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함