java (5) 썸네일형 리스트형 가상 메소드를 호출한 클래스/메소드 알아내는 방법 큰 규모의 프로젝트를 하다보면, 내가 작성한 메소드를 누군가 호출을 하게 된다. 그런데, 어떤 메소드가 호출을 할 때에는 정상 작동을 하면서도, 또 다른 메소드가 호출을 하면 에러가 발생하는 경우가 있다. 심지어 프로젝트가 너무 복잡해서 어떤 메소드가 호출을 했을 때 에러가 발생하는지 알 수 없을 때도 있다. 사실 이 코드는 에러를 잡는다기 보단,(Parameter에 관련된 Log를 찍어 디버깅이 충분히 가능하다.) 누가 나를 잘못 호출하는 지 알아낼 수 있는, 에러 유발자를 찾는 코드라고 할 수 있다. (동료의 요청으로 한번 짜보았다.) 일단, 기본 아이디어는 다음과 같다. Thread 혹은 Stack을 이용해보자. Thread를 사용하기는 애매할 것 같고, Exception 발생시 확인할 수 있는 S.. 2011. 9. 27. 11:19 가상 계약에 의한 설계(Design by Contract; DBC) 계약에 의한 설계(Design By Contract, 이하 DBC)는 아이펠(Eiffel)이라는 언어를 만든 버트란드 마이어가 개념을 개발하였다. 이것은 프로그램 모듈들의 책임을 문서화하는데 초점을 맞춘다. 각각의 모듈이 가져야 하는 기능만큼만 동작하도록 한다. 이러한 개념을 문서화하고 검증하는 것이 바로 DBC의 핵심이다. 모듈이 동작할 때, 어떠한 인자를 넣어주어야 하는지, 어떤 결과를 원하는지 등이 있는데, DBC에서는 모듈을 호출하기 위해 참이어야 하는 것을 선행조건(Precondition), 모듈이 자기가 할 것이라고 보장하는 것을 후행조건(Postcondition)이라고 한다. 또, 불변식(Invariant)이라는 것이 있는데, 호출자의 입장에서 이 조건이 언제나 참이라고 보장하는 것을 말한다.. 2010. 12. 27. 13:55 가상 한글 유니코드로 변환하기 public String convert(String str) { StringBuffer ostr = new StringBuffer(); for (int i = 0; i = 0x0020) && (ch 2010. 11. 23. 15:28 가상 정규식 특수문자 사용하기 Java로 String Parser를 구현하는 중에 특수문자를 치환해줘야하는 경우가 발생했다. 정규식에서 사용하는 정규 문자들을 치환(String.replaceAll 메소드 사용)해줘야 했었는데, 정규식에서는 특수문자를 정규식의 패턴으로 인식해서 PatternSyntaxException이 발생하였다. 이러한 방법을 해결해주기 위해 치환할 때 아래와 같이 표현해주면 된다. 1. []으로 싸줘야하는 문자 * → [*] + → [+] $ → [$] | → [|] 2. \\ 추가 해야하는 문자( → \\( ) → \\) { → \\{ } → \\} ^ → \\^ [ → \\[ ] → \\] 3. 무관한 특수 문자! # % & @ ` : ; - . , ~ ' " 2010. 11. 19. 16:14 가상 SerialVersionUID in Serializable Interface Servlet을 구현하다가 보면, Warning 항목이 위와 같이 뜨면서, SerialVersionUID를 작성하라고 한다. 지금까지 작업을 할 때에는, 그저 무시하고 말았었는데, 웹 서비스가 실행되다가 InvalidClassException이 발생할 가능성이 있다고 한다. Java API에는 다음과 같이 명시되어 있다. 직렬화 가능(Serializable) 클래스가 serialVersionUID를 명시적으로 선언하지 않는 경우, 직렬화 런타임은 「Java(TM) 객체 직렬화 스펙」에서 설명하고 있듯이, 클래스의 다양한 측면에 근거해, 클래스의 serialVersionUID의 Default 값를 계산한다. 다만, 모든 직렬화 가능 클래스가 serialVersionUID를 명시적으로 선언하는 것을 강하게 .. 2010. 1. 12. 09:43 이전 1 다음