stack을 구현 할 때, pointer(여기서는 int size;)를 이용하여 할당된 스택 메모리 전체(Object[] repository;)에서 사용되는 위치를 가리킨다.
pop을 하고 포인터가 이동할 때, 두 가지 매서드로 구현되어 있다. pop()과 popV2()이다. 전자의 경우 pop을 통해 사용한 메모리에 대해서는 제거하지 않고, 후자의 경우 =null을 통해 메모리를 제거한다.
이로 인하여 발생하는 결과는 아래와 같다.
@Testvoidtest(){SampleStackstack=newSampleStack();for(inti=0;i<10;i++){stack.push(LocalDateTime.now().plusDays(i));// 푸쉬를 한다. }stack.print();// 푸쉬한 결과를 출력한다. for(inti=0;i<10;i++){stack.pop();// pop을 한다. 포인트가 이동하지만 해당 객체를 해제하지 않는다.}stack.print();// pop이 되었으나 해당 객체는 살아있다.}
repository.length : 10
[0]2022-02-26T18:28:00.454089700
[1]2022-02-27T18:28:00.454089700
[2]2022-02-28T18:28:00.454089700
[3]2022-03-01T18:28:00.454089700
[4]2022-03-02T18:28:00.455091500
[5]2022-03-03T18:28:00.455091500
[6]2022-03-04T18:28:00.455091500
[7]2022-03-05T18:28:00.455091500
[8]2022-03-06T18:28:00.455091500
[9]2022-03-07T18:28:00.455091500
// pop을 하였지만 데이타가 남아있음을 확인할 수 있다.
repository.length : 10
[0]2022-02-26T18:28:00.454089700
[1]2022-02-27T18:28:00.454089700
[2]2022-02-28T18:28:00.454089700
[3]2022-03-01T18:28:00.454089700
[4]2022-03-02T18:28:00.455091500
[5]2022-03-03T18:28:00.455091500
[6]2022-03-04T18:28:00.455091500
[7]2022-03-05T18:28:00.455091500
[8]2022-03-06T18:28:00.455091500
[9]2022-03-07T18:28:00.455091500
@Testvoidtest2(){SampleStackstack=newSampleStack();for(inti=0;i<10;i++){stack.push(LocalDateTime.now().plusDays(i));}stack.print();for(inti=0;i<10;i++){stack.popV2();// 포인터가 지나간 위치에 대해서는 =null을 하여 해제한다.}stack.print();// 더 이상 객체가 살아있지 않고 제거된다.}