검색결과 리스트
IT/Java에 해당되는 글 5건
- 2011/09/27 메소드를 호출한 클래스/메소드 알아내는 방법
- 2010/11/23 한글 유니코드로 변환하기
- 2010/11/19 정규식 특수문자 사용하기
- 2010/04/20 프록시 패턴을 이용한 메소드 접근 제어에 대한 연구
- 2010/01/12 SerialVersionUID in Serializable Interface
글
메소드를 호출한 클래스/메소드 알아내는 방법
큰 규모의 프로젝트를 하다보면, 내가 작성한 메소드를 누군가 호출을 하게 된다. 그런데, 어떤 메소드가 호출을 할 때에는 정상 작동을 하면서도, 또 다른 메소드가 호출을 하면 에러가 발생하는 경우가 있다. 심지어 프로젝트가 너무 복잡해서 어떤 메소드가 호출을 했을 때 에러가 발생하는지 알 수 없을 때도 있다. 사실 이 코드는 에러를 잡는다기 보단,(Parameter에 관련된 Log를 찍어 디버깅이 충분히 가능하다.) 누가 나를 잘못 호출하는 지 알아낼 수 있는, 에러 유발자를 찾는 코드라고 할 수 있다. (동료의 요청으로 한번 짜보았다.)
일단, 기본 아이디어는 다음과 같다. Thread 혹은 Stack을 이용해보자. Thread를 사용하기는 애매할 것 같고, Exception 발생시 확인할 수 있는 Stack을 사용하기로 했다. Exception 클래스의 printStackTrace() 메소드 쯤은 누구나 다 한번 사용해 봤을 것이다. 혹은 런타임 에러가 발생했을 때, 아래와 같은 메시지를 본 적이 있을 것이다.
java.lang.Exception
at net.kevinx64.util.knowcaller.Callee.func(Callee.java:6)
at net.kevinx64.util.knowcaller.Caller3.m3(Caller3.java:5)
at net.kevinx64.util.knowcaller.KnowCallerTest.main(KnowCallerTest.java:7)
여기에 보면, 어떤 에러가 발생했는지(java.lang.Exception)와,누가 호출해서 에러가 발생했는지 최초 지점까지 추적해준다. 바로 이것을 통해서 아래와 같이 나를 호출한 클래스, 메소드를 알아내는 코드를 작성해보았다. 혹시나, 글의 처음에 언급했듯이, 에러 유발자를 찾으려 할 때 참고하시길 바란다.
try{
throw new Exception();
}catch(Exception e){
System.out.println("Who is call me?");
System.out.println( e.getStackTrace()[1].getClassName() + " " +
e.getStackTrace()[1].getMethodName() );
// StackTrace의 '1'번 인덱스를 가져오면 바로 상위 호출자를 가르키게 된다.
}
'IT > Java' 카테고리의 다른 글
| 메소드를 호출한 클래스/메소드 알아내는 방법 (0) | 2011/09/27 |
|---|---|
| 한글 유니코드로 변환하기 (0) | 2010/11/23 |
| 정규식 특수문자 사용하기 (0) | 2010/11/19 |
| 프록시 패턴을 이용한 메소드 접근 제어에 대한 연구 (0) | 2010/04/20 |
| SerialVersionUID in Serializable Interface (0) | 2010/01/12 |
글
한글 유니코드로 변환하기
StringBuffer ostr = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
// 유니코드로 변환할 필요가 있는 문자열인지 판단
if ((ch >= 0x0020) && (ch <= 0x007e)) {
ostr.append(ch); // 아닌 경우.
} else { // 변경해야 하는 경우.
ostr.append("\\u");
String hex = Integer.toHexString(str.charAt(i) & 0xFFFF); // 문자의 Hex 값
// 네 자리를 맞추기 위해 0 추가
for (int j = 0; j < 4 - hex.length(); j++)
ostr.append("0");
ostr.append(hex.toLowerCase());
}
}
return (new String(ostr));
}
'에러'라는 글자를 인자로 주면 '\uc5d0\ub7ec'라는 결과로 반환해준다.
[출처 : http://www.daniweb.com/forums/thread147397.html]
이 글은 스프링노트에서 작성되었습니다.
'IT > Java' 카테고리의 다른 글
| 메소드를 호출한 클래스/메소드 알아내는 방법 (0) | 2011/09/27 |
|---|---|
| 한글 유니코드로 변환하기 (0) | 2010/11/23 |
| 정규식 특수문자 사용하기 (0) | 2010/11/19 |
| 프록시 패턴을 이용한 메소드 접근 제어에 대한 연구 (0) | 2010/04/20 |
| SerialVersionUID in Serializable Interface (0) | 2010/01/12 |
글
정규식 특수문자 사용하기
Java로 String Parser를 구현하는 중에 특수문자를 치환해줘야하는 경우가 발생했다. 정규식에서 사용하는 정규 문자들을 치환(String.replaceAll 메소드 사용)해줘야 했었는데, 정규식에서는 특수문자를 정규식의 패턴으로 인식해서 에러(java.util.regex.PatternSyntaxException)가 발생하였다. 이러한 방법을 해결해주기 위해 치환할 때 아래와 같이 표현해주면 된다.
-
[]으로 싸줘야하는 문자
* → [*]
+ → [+]
$ → [$]
| → [|] -
\\ 추가 해야하는 문자
( → \\(
) → \\)
{ → \\{
} → \\}
^ → \\^
[ → \\[
] → \\] - 무관한 특수 문자
! # % & @ ` : ; - . < > , ~ ' "
이 글은 스프링노트에서 작성되었습니다.
'IT > Java' 카테고리의 다른 글
| 메소드를 호출한 클래스/메소드 알아내는 방법 (0) | 2011/09/27 |
|---|---|
| 한글 유니코드로 변환하기 (0) | 2010/11/23 |
| 정규식 특수문자 사용하기 (0) | 2010/11/19 |
| 프록시 패턴을 이용한 메소드 접근 제어에 대한 연구 (0) | 2010/04/20 |
| SerialVersionUID in Serializable Interface (0) | 2010/01/12 |
글
프록시 패턴을 이용한 메소드 접근 제어에 대한 연구
주제가 갑자기 바뀌 논문. "프록시 패턴을 이용한 메소드 접근 제어". 이차저차 했지만, 뭐 조금 틀은 나온 것 같다. 아직 갈 길이 멀다.
'IT > Java' 카테고리의 다른 글
| 메소드를 호출한 클래스/메소드 알아내는 방법 (0) | 2011/09/27 |
|---|---|
| 한글 유니코드로 변환하기 (0) | 2010/11/23 |
| 정규식 특수문자 사용하기 (0) | 2010/11/19 |
| 프록시 패턴을 이용한 메소드 접근 제어에 대한 연구 (0) | 2010/04/20 |
| SerialVersionUID in Serializable Interface (0) | 2010/01/12 |
글
SerialVersionUID in Serializable Interface
'IT > Java' 카테고리의 다른 글
| 메소드를 호출한 클래스/메소드 알아내는 방법 (0) | 2011/09/27 |
|---|---|
| 한글 유니코드로 변환하기 (0) | 2010/11/23 |
| 정규식 특수문자 사용하기 (0) | 2010/11/19 |
| 프록시 패턴을 이용한 메소드 접근 제어에 대한 연구 (0) | 2010/04/20 |
| SerialVersionUID in Serializable Interface (0) | 2010/01/12 |
