상당히 재미있는 에러인데 말이죠 ^^
encode 라는 class variable 이 문제에요.
class variable 은, object 가 생성된 다음 계속 유지가 되기 때문에, 기존 encode 의 결과를 포함해요.
예를 들어, 지금 상황이라면,
e.encode(str) 이걸 세번 부르면 hihihi, 네번 부르면 hihihihi 이렇게 나올거에요.
첫번째 블록에서는
System.out.println(e.encode(str) ); <<= 요기서 한번
System.out.println(e.decode( e.encode(str) ) ); <<= 요기서 두번째
불러진 상태이기 때문에, 처음 불려질 때 list 가 [23,6] 이고
두번째 줄에서 [23,6,23,6] 이 된 상태이겠죠
두번째 블록에서는 e1.encode 가 한번만 실행되어서 제대로 된거구요 ^^
픽스하는 것은 두가지:
1. encode() 메소드에서, 시작할 때 encode = new ArrayList... 를 통해 새로 초기화해주는 방법
2. encode() 는 한번씩만 부르고, encode 라는 variable 을 리턴해주는 getter method 를 추가해서, 단순히 리스트를 보고 싶을때는 그걸 사용하는 방법.
사실은, 이보다는 아예 encode 라는 class variable 을 안 사용하는 것이 좋을 수도 있어요. ^^
let me know how it goes!!