본문 바로가기

Programming/JAVA

java : 대체 객체가 뭐죠? instance 가 뭡니까?

클래스를 통해 만들어지는 객체.

전 흔하게 객체가 뭐냐는 질문을 받으면 클래스를 통해 만들어지는 사용가능한 메모리에 올라간 클래스?
이렇게 답하곤 했습니다.

오늘 자바의 정석을 보던 중 아주 명확하게 이해할 수 있는 구절을 보았습니다.

"객체는 클래스에 정의된 인스턴수 변수의 집합이다. 객체에는 클래스변수나 메서드가 포함되지 않는다.
 객체는 오직 인스턴수 변수들로만 구성되어 있다."


그렇습니다!!!  

객체는 오직 인스턴수 변수들로만 구성되어있는 집합과도 같은 것이며 결코 static 변수나 혹은 어떤 메소드든 포함되지 않습니다. 그럼 생각해볼까요?

class A{
   int a;
   int b;
   class A(){}
   public void method(){}
}
class Test{
   public static void main(String[] args){
      A a = new A();
   }


위의 Test를 실행하게 된다면  A라는 객체가 생성되는 것은 아주 뻔한 얘기입니다.
그럼 메모리 과정을 알아볼까요?
대입연산 이전에 우선 new 키워드를 통해 A클래스가 생성되는군요. 디폴트로 생성자를 가진 A클래스는
Heap 메모리에 int type의 a와 b변수를 가지고 올라갑니다.
그리고 method 메모리에는 method() 가 올라가지요.
마지막으로 stack 메모리엔 A타입의 a변수가 올라가고
이 a변수는 Heap 메모리에 있는 객체 A의 주소를 가지게 됩니다.
하지만 메소드 메모리의 method()는 객체에 포함되지 않습니다. 혼동하지 않길!! (직렬화 공부하던 중 정리중;;;)

예전에 자료구조 시간에 배웠던 말이 생각나네요.
세상의 모든 사물은 객체입니다. 이것들은 실존하는 것이죠. 그리고 이 사물들간의 통신에도 사물이 필요합니다.
간혹 착각하는 것은 우리가 하는 통신을 함수라하여 존재치 않는 것이라고 하는데,
통신에도 통신에 필요한 공기같은 것이 있습니다.
사물로 존재치 않는 우리가 알고 있는 함수란 것은 이러한 것들이 움직이게 만드는 일련의 과정입니다.
공기의 진동폭에 대해 구체화시키는 것. 그것이 함수입니다.
우리가 필요한 엔티티가 무엇인지 명확히 이해하시길 바랍니다.
 
음.... 매우 쉽게 적혀있는 정석의 글을 제가 무척 어렵게 해설했나 고민이 드네요 ㅎㅎ