자바 클래스 비교하는 법, 파일 비교하는 법
클래스가 아닌 파일(txt, jsp, js, java 등)은 (1) 용량, (2) 길이, (3) 내용. 3가지를 비교하면 된다.
그런데 클래스 파일은 비교가 쉽지 않다.
똑같이, 용량, 길이, 내용(바이너리 값)을 검사해본다. 그런데 2개의 클래스가 3가지 측면에서 모두 달라도, 역컴파일을 해보면 결국 내용이 동일하게 나오는 경우가 있다.
바이너리 값이 다소 달라도, 알고 보면 해당 바이너리 값은 기타 정보에 해당하는 가비지 값이었던 것.
나의 추측으로는, 동일한 파일도 컴파일러가 다르면 서로 다른 바이너리 파일(class)로 떨어질 수 있는 것 같다. 컴파일러 버전 정보라던가, 여러가지가 있겠지.
따라서 클래스와 클래스가 아닌 파일은 비교 방법이 달라야 한다.
1. 클래스가 아닌 파일 : 용량, 길이, 내용 3가지 중 하나라도 다르면 다른 파일이다.
2. 클래스 :
(2-1) 용량, 길이, 내용 3가지가 같으면, 같은 파일이다. 역공학/디컴파일 불필요.
(2-2) 용량, 길이, 내용 3가지가 다르면, 역공학을 해서 내용을 비교한다. 이것도 다르면 진짜 다른거.
주의할 점은 또한 디컴파일시 디컴파일러에 따라 지역 변수명이 랜덤하게 바뀌는 등 예외가 있으니 100% 라고 신뢰해서는 안된다.
지금으로서는 위의 방법이 최선.
더 좋은 방법을 아시겠는 분은 댓글로 부탁드립니다.