- 10 TIL
java에서 인스턴스, 멤버변수, 생성자함수의 관계
![](https://velog.velcdn.com/images%2Fcrimy950%2Fpost%2F97ca4bb0-e317-45d7-950c-8e9a9f6a2de5%2Fimage.png)
객체지향 프로그래밍의 시작을 위해 변수들의 종류, 함수의 호출과 종료, 소멸에 대해서 정리할 필요가 있다.
![](https://velog.velcdn.com/images%2Fcrimy950%2Fpost%2Fd16c3bb3-9afc-4fe3-9333-3cfa71b66084%2Fimage.png)
위 프로그램의 동작을 보면 XList 의 인스턴스 선언으로 l포인터가 가리키는 인스턴스에서 생성자함수를 통해 함수 포인터가 여러 노드들의 데이터를 이용할 수 있게 되고, 노드들 간에 포인터의 역할로 이어지고, 값을 이용하게 된다.
![](https://velog.velcdn.com/images%2Fcrimy950%2Fpost%2F96b5846a-3678-4512-a731-475a38668b85%2Fimage.png)
부분적으로 떼어서 보겠다. 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 포인터가 가리키는 대상을 가리키게 된다.
![](https://velog.velcdn.com/images%2Fcrimy950%2Fpost%2F98181f4e-21bf-40c7-a9e3-7d4b4161e425%2Fimage.png)
도식화하면 다음과 같다. 생략되지만 this 라는 인스턴스 자신을 가리키는 포인터가 생기는 것이고 함수 포인터가 이를 가리키면 , 결국 인스턴스를 가리키게 된다.
![](https://velog.velcdn.com/images%2Fcrimy950%2Fpost%2F1ce38bc6-d35d-4f6b-a732-e41b45861dc5%2Fimage.png)
deleteAll 이라는 함수를 살펴보면, pre,post 두 Node를 정의하고, while 문을 통해 post.next 포인터의 값을 삭제한다. 그리고 post는 pre포인터가 가리키는 대상을, pre 는 pre.next의 대상을 가리키게 된다. while 문을 끝까지 진행한 결과는 이렇다.
![](https://velog.velcdn.com/images%2Fcrimy950%2Fpost%2F5c13a531-1152-4ef0-9204-04e1924d3a46%2Fimage.png)
java에서 인스턴스의 메모리가 수거되는 조건은 인스턴스를 가리키는 포인터가 없는 것이다. pre와 post가 순환하며 가리키는 대상을 바꾸면서 포인터를 null 값으로 만들면, dummy insatance 를 제외한 다른 값이 입력된 인스턴스들의 메모리가 수거되게 된다.