참조 자료형이란 기본자료형과는 개념이 다르기 때문에 이하하기가 어려울수도 있다.
참조 자료형은 클래스, 인터페이스, 배열 등이 있는데,
이 녀석들은 new 라는 키워드를 이용하여 객체라는 녀석을 만들어야만 실제로 메모리가 할당 되고 그 공간을 사용 하게 된다.
class a = new class();와 같은 방식이다.
어디 까지나 나만의 이해 방식으로 설명을 하자면,
손님이 가져갈 붕어빵이 담길 봉투를 메모리라고 생각하고,
붕어빵 틀은 클래스나 인터페이스, 배열같은 참조 자료형,
붕어빵을 만드는 과정을 객체초기화
봉투에 만들어진 붕어빵을 담는 작업을 메모리 할당이라 생각하면 된다.
붕어빵을 만들 틀 즉 클래스는 붕어빵을 만들수 있게끔 구조를 잡아둔것이다.
하지만 붕어빵마다 밀가루 양이나, 팥의 양등 값을 지정하기 위해선 실제로 틀안에
필요한 재료를 넣고, 굽는 과정이 필요한데, 이 과정을 객채 생성의 초기화라고 보면 되고,
이 만들어진 붕어빵을 봉투로 담는 과정을 메모리 할당이라 생각하면 될것이다.
(적절한 예인지는 모르겠다;;실제 컴파일 과정과 메모리 할당까지의 과정은 빈약한 지식으로 잘모르겠다)
이렇게 만들어진 붕어빵이 어느봉투(메모리 공간)에 들어갈지는 손님은(개발자) 알수가 없다.
어떤 봉투를 사용하여 붕어빵을 담을지는 주인(OS?) 마음이기 때문이다.
그렇기 때문에 참조 자료형의 변수에는 실제 값이 아닌 객체가 생성된 메모리주소값이 할당된다.
조금더 주저리 하자면,
주인이 붕어빵을만들고 봉투에 담을때 (OS가 객체를 생성하고 메모리를 할당할때)
주인이 어느 봉투가 어느손님이 가져갈 봉투인지 지정하고 (OS가 메모리에 객체를 생성하고 해당 객체의 메모리 주소생성)
손님이 붕어빵을 요청하면, 손님이 요청한 붕어빵의 위치를 알려주는 것이다(개발자가 객체를 사용하기위해 변수를 확인하면 변수는 실제 값이 들어있는 메모리 주소를 알려줌)
이런 이유로 바로 기본 자료형과의 가장 큰 차이가 발생하게 되는데.
기본 자료형의 경우는 변수가 바라보는 메모리에 직접 값이 들어있기 때문에 변수명 비교를 할경우
a==b(값이 같은지 비교하는 연산자) 을 비교했을때 값이 같으면 true, 다르면 false가 나오지만
참조 자료형의 경우는 메모리주소의 위치가 변수에 들어있기 때문에 값을 a==b를 비교하게 되면,
메모리의 주소가 같지 않으면 실제로는 같은 값이라도 다르다고 나오게 된다.
엄청나게 오랫동안 생각하고 썼는데 생각보다 내용이 적다;;
참조 자료형도 이정도만 이해하면 될것같고 더 자료가 필요한분들은
구글 검색신의 도움을 받길바란다.