Class(클래스)
class 클래스명(타입){
int age; // 기본타입처럼 보이지만 클래스 객체 타입
String name; // 클래스 객체 타입
}
class Person{ // 타입명: Person //int, String을 담을 수 있는 타입을 만들어준것.
int age;
String name;
}
// 하나의 타입에 여러 값을 넣을 수 있게 된다.
// 변수선언 (이유: 메모리를 할당해서 값을 저장하려고)
// 타입이름 변수명
Person p1; // 타입이름이 Person 이니까. 그 객체가 할당받은 메모리를 담을, 주소값을 담을 변수만 할당해 놓은것
//객체 생성
// 클래스 모양으로 `heap`에다가 메모리를 할당 받는다.
// new 생성자이름
p1 = new Person(); // ⭐️기본타입과 다른 점! 이렇게 객체 생성을 한다.
//램에는 담는 값에 따라 메모리영역 Static/Stack/Heap 에 저장이된다.
stack
메모리의 특징
- 변수 이름으로 접근 가능
heap
메모리의 특징
- 변 이름으로 접근 불가능
- 주소로 접근 가능
- new 라는 연산자로 힙에 메모리 할당. 뒤에 또 나오면 새롭게 heap에 또 메모리 할당함
// 객체 선언과 생성을 한번에~
Person p2 = new Person();
옛날에는 delete 를 사용해서 지웠는데,
현재는 GC가 사용되지 않는 메모리를 heap 영역에서 없애줌
heap 에 접근하려면 주소를 알아야 하고, 찾아갈 수 있게 클레스로 만든 변수(객체/참조변수)의 이름을 알아야 한다.
따라서 데이터에 바로 접근은 불가능 하지만, 접근 가능한 주소값을 가질 수 있다.
// 객체이름.멤버변수이름 = 값
p1.age = 10; // 여기서 .은 멤버 접근 연산자이다. 따라서 100번지.age
//p1 - 100번지에 있는 객체의 age 변수에 10을 할당해라. (heap-p1.age에 10이 저장된다)
p1.name = "asdf";
p2.age = 20;
p2.name = "bbb";
System.out.println("p1.age:" + p1.age); // 출력값 p1.age:10
System.out.println("p1.name:" + p1.name); // p1.name:asdf
System.out.println("p2.age:" + p2.age); // p2.age:20
System.out.println("p2.name:" + p1.name); // p2.name:bbb
heap 이랑 stack은 다시한번 찾아보셔요!!
저번주 면접 볼 때 나왔었어요!!