- 10 TIL
java에서 인스턴스, 멤버변수, 생성자함수의 관계
객체지향 프로그래밍의 시작을 위해 변수들의 종류, 함수의 호출과 종료, 소멸에 대해서 정리할 필요가 있다.
위 프로그램의 동작을 보면 XList 의 인스턴스 선언으로 l포인터가 가리키는 인스턴스에서 생성자함수를 통해 함수 포인터가 여러 노드들의 데이터를 이용할 수 있게 되고, 노드들 간에 포인터의 역할로 이어지고, 값을 이용하게 된다.
부분적으로 떼어서 보겠다. Node라는 class 를 선언하고 name과 next라는 로컬변수를 선언했다. Node(int i , Node j) 를 통해 name, next 에 초기값을 입력하는 인스턴스를 선언할 수 있다.
XList class 선언에 대해 보면 마찬가지로 head와 tail 두 Node를 선언하고, 인스턴스를 선언할수 있도록 XList() 라는 함수를 선언했다. 그 뒤, add 라는 생성자 함수를 선언하는데, int i 를 () 안에 입력하면, tail.next 포인터가 인스턴스를 선언 후 대입받게 된다. 그리고 tail은 tail.next 포인터가 가리키는 대상을 가리키게 된다.
도식화하면 다음과 같다. 생략되지만 this 라는 인스턴스 자신을 가리키는 포인터가 생기는 것이고 함수 포인터가 이를 가리키면 , 결국 인스턴스를 가리키게 된다.
deleteAll 이라는 함수를 살펴보면, pre,post 두 Node를 정의하고, while 문을 통해 post.next 포인터의 값을 삭제한다. 그리고 post는 pre포인터가 가리키는 대상을, pre 는 pre.next의 대상을 가리키게 된다. while 문을 끝까지 진행한 결과는 이렇다.
java에서 인스턴스의 메모리가 수거되는 조건은 인스턴스를 가리키는 포인터가 없는 것이다. pre와 post가 순환하며 가리키는 대상을 바꾸면서 포인터를 null 값으로 만들면, dummy insatance 를 제외한 다른 값이 입력된 인스턴스들의 메모리가 수거되게 된다.