자바의 추상 자료형
자바에는 왜 delete가 없을까?
객체가 놓이는 곳
자바의 객체는 모두 힙에
C++의 객체는 함수 안에서 선언만 하면 스택 영역에 놓이고, new로 만들면 힙에 놓입니다. 자바의 객체는 모두 힙에 놓이고, 참조 변수를 거쳐서만 닿습니다.
스택 영역은 함수가 불리면 쌓이고 끝나면 걷히는 메모리 칸이고, 힙은 실행 중에 필요할 때 받아 쓰는 칸입니다. 참조 변수는 객체를 가리키는 변수, 포인터는 칸의 위치를 담는 값입니다.
접근 제한자
자바는 멤버마다 붙입니다
C++는 private: 절 하나가 그 아래 멤버 전체를 덮습니다. 자바는 멤버 하나하나 앞에 private이나 public을 붙입니다. 이런 낱말을 접근 제한자(access modifier)라고 합니다. 감추고 내놓는 뜻은 같습니다.
자바에서는 사용자 정의 타입을 모두 클래스로 만듭니다. {…}는 본문을 줄였다는 표시입니다. stackPtr와 stackRef처럼 언어마다 교재의 이름이 다릅니다.
가비지 컬렉션
칸은 언어가 거둡니다
자바의 객체는 모두 가비지 컬렉션으로 거둬 갑니다. 가비지는 쓰레기, 곧 아무도 가리키지 않는 칸입니다(5강). 객체를 가리키는 참조가 없어지면 가비지 컬렉터가 그 칸을 찾아 돌려받습니다. 그래서 delete를 적을 일이 없습니다.
가비지 컬렉터는 그런 칸을 찾아 대신 돌려주는 장치입니다.
패키지 스코프
friend 대신 같은 패키지
자바에는 friend가 없고, 그 자리를 패키지 스코프(package scope)가 맡습니다. 접근 제한자를 붙이지 않은 멤버는 같은 패키지 안의 모든 클래스에서 보입니다.
패키지는 클래스 여럿을 담는 묶음이고 9편에서 다시 봅니다. 스코프는 이름이 보이는 범위입니다. a, b, c는 예시 멤버입니다.
정리
C++와 다른 점 다섯
자바의 추상 자료형은 C++와 닮았습니다. 다른 점은 이 다섯입니다. 객체가 놓이는 곳과 거두는 방법을 언어가 정해 두어서, 프로그래머가 챙길 일이 줄었습니다.
다음 편