카테고리 없음

[패스트 캠퍼스 자바 완주반]5-3. 인스턴스

닉네임이 멋이 중헌디 2021. 2. 27. 22:41

클래스 생성 시 어떤 식으로 메모리 쓰는지 
클래스 하나지만 인스턴스는 여러개 

인스턴스 
클래스는 선언만 해놓는다. 
클래스 코드 하나가 있고 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해보기