객체와 메모리

Byeonghyeon Kim·2021년 6월 7일
0

자바

목록 보기
10/20
post-thumbnail

객체와 메모리

  • 메모리에서 객체가 어떻게 생성되고 이용되는지 알아야 객체지향 프로그래밍에서 객체를 효과적으로 다룰 수 있다!

메모리에서 객체 생성(동적 생성)

  • 객체는 메모리에서 동적으로 생성, 객체가 더이상 필요 없게 되면 GC(Gabage Colletor)에 의해서 제거
  • 클래스를 이용해 객체를 생성(*New)
    • 예) ChildClass child(레퍼런스) = new ChildClass();(생성자)
    • 레퍼런스는 메모리에 생성된 메모리의 주소를 담고 있음
    • 즉, child라는 레퍼런스에 데이터가 들어있는 것이 아니라 주소값만 있음
  • 인자가 없는 객체(레퍼런스와 연결이 끊어진 객체)
    • GC가 메모리를 돌면서 회수, 메모리에서 삭제
    • 메모리 사용 가능

레퍼런스(가리킨다)

ObjectClass obj1 = new ObjectClass();
ObjectClass obj2 = new ObjectClass();
ObjectClass obj3 = new ObjectClass();

System.out.println("레퍼런스 obj1 ---> " + obj1);
System.out.println("레퍼런스 obj2 ---> " + obj2);
System.out.println("레퍼런스 obj3 ---> " + obj3);

// 레퍼런스 obj1 ---> Reference.ObjectClass@28a418fc
// 레퍼런스 obj2 ---> Reference.ObjectClass@5305068a
// 레퍼런스 obj3 ---> Reference.ObjectClass@1f32e575
  • 동일한 클래스로 객체를 3개 생성
  • 이것들은 동일한 메모리 공간에 생성된 것이 아닌
  • 각각의 메모리 공간에 생성
  • 즉, 각각의 메모리 주소가 다름
  • 클래스가 같다고 해서 동일한 객체가 아니다!

자료형이 같아도 다른 객체

  • 자료형이 같아도 다른 공간에 존재하는 객체는 다른 객체이다!
  • 위의 코드에서 각 객체들은 다 다른객체이다!
    • 같은 클래스로 만들었음에도 불구하고

null과 NullPointerException

  • 레퍼런스에 null이 저장되면 객체의 연결이 끊기며, 더이상 객체를 이용할 수 없다.
  • 레퍼런스가 null로 바뀌었는데 객체에 레퍼런스를 통해 접근하려 하면 NullPointerException 발생
ObjectClass obj1 = new ObjectClass();
System.out.println("레퍼런스 obj1 --->" + obj1);
// 레퍼런스 obj1 --->Reference.ObjectClass@28a418fc
obj1.getInfo();
// 함수실행

obj1 = null; // 객체와 레퍼런스의 연결을 끊음
System.out.println(obj1);
// null
obj1.getInfo();
// NullPointerException 에러 발생!
  • 단, 이경우 레퍼런스가 메모리에서 사라지는 것은 아님
    • new키워드를 통해 다시 사용할 수 있음
profile
자기 주도 개발전 (개발, 발전)

0개의 댓글

관련 채용 정보