클래스 생성 시 어떤 식으로 메모리 쓰는지
클래스 하나지만 인스턴스는 여러개
인스턴스
클래스는 선언만 해놓는다.
클래스 코드 하나가 있고 new를 이용해 여러개의 객체를 생성할 수 있다
이때 이 객체를 인스턴스라고 한다
heap 메모리
이렇게 생성될 때 인스턴스는 heap이라는 메모리에 들어간다
이를 동적 메모리라고 한다.
heap area에 student만큼의 사이즈가 생긴다(각 멤벼변수별로 쌓인다: int studentID, String studentName, String address)
Garbage collector라는 thread에 수거해야 heap메모리가 사라진다
stack 메모리
매서드는 stack 메모리를 쓴다
studentlee(새로 만든 인스턴스)는 address의 사이즈(자료형의 사이즈) 만큼 stack 에 들어간다
함수가 잡고 있는 곳은 다른 area고 멤버변수를 호출하면 heap에서 불러온다
stack 메모리는 실행이 끝나면 마지막으로 실행된 메모리부터 차례대로 사라진다
=> stack메모리에 studentLee, studentKim이 각각 만들어지면 heap메모리에 있는 각 멤버변수를 불러온다
이때 heap 메모리에 각 인스턴스별로 같은 클래스만큼의 사이즈 메모리를 만든다(하지만 각 메모리는 다른 것)
참조 변수 = 생성된 인스턴스를 가리키는 것 ex. studentLee
참조변수.속성, 메서드 => 해당 값을 불러오는 방법
ex. Student studentLee = new Studnet();
출력하면 패키지이름까지 포함된 클래스 풀네임이 나온다
classpart(패키지네임).Student(클래스)@주소값 => 주소값은 heap의 address를 가리킨다
ex. 15db9742(16진수, 인스턴스별로 다른 주소)
객체: 생성된 인스턴스. 객체 지향 프로그램의 대상.
클래스: 객체를 프로그래밍하기 위해 코드로 만든 상태
인스턴스: 클래스로 만든 여러개. 클래스가 만든 멤버변수를 heap area를 여럿 가지게 됨.
클래스가 메모리에 생성된 상태
멤버 변수: 클래스의 속성, 특성
메서드: 멤버 변수를 이요해서 클래스의 기능 구현
참조변수: 메모리에 생성된 인스턴스를 가리키는 변수
참조값: 생성된 인스턴스의 메모리 주소 값
cf. 클래스 안에서 main함수를 돌려봐도 그건 메서드가 아니다.
main은 클래스를 시험하기 위한 용으로 사용된 것이고
메서드가 되기 위해서는 public void showStudentInfo()_
return studentName;
}식으로 되어야 한다.
public class personinfo{
int age;
String name;
boolean married;
int numberOfChildren;
}
다른 클래스로 분리해서 main 돌리기
public class PersonTest {
public static void main(String[] args){
Person person = new person();
person.age
person.name
person.isMarried
person.numberOfChildren
각자 println해보기