[Java] 객체와 클래스 그리고 인스턴스
Intro
이 글에서는 자바의 객체와 클래스 그리고 인스턴스에 대해서 다룹니다.
객체란 무엇인가?
객체의 사전적 정의: 물리적으로 혹은 추상적으로 존재하며 식별 가능한 대상.
붕어빵틀이 클래스이고 붕어빵이 객체라는 비유가 존재하지만, 엄밀히 생각해보면 붕어빵 틀이 붕어빵이 될 수 있는 건 아니다. 자바에서 클래스와 객체의 복잡한 관계(특히 다형성, 상속, 런타임 클래스 정보 등)를 이해하려면 더 구체적이고 포괄적인 비유가 필요하다.
클래스와 객체 사이의 관계는 인간이라는 개념과 우리 개인 사이의 관계로 얘기할 수 있지 않을까?
인간이란 개념 속에서 어느 정도 인간의 성질이 담겨 있고, 우리 개개인에게도 그러한 성질이 내재되어 있지만 각기 모습이 다른 것처럼 말이다.
객체는 자바 프로그래밍에서 기본이 되는 요소이고, 속성과 메서드를 통해 객체의 성질과 기능을 정의한다.
클래스란?
클래스: 객체를 담아 놓은 꾸러미(일종의 설계도와 비슷하다.)
객체를 생성하기 이전의 설계도라고 볼 수 있다. 실제 세계의 사물이나 개념을 추상화하여 구현한 것.
클래스 구성 요소
필드(변수) : 클래스의 속성을 표현
메소드 : 클래스의 기능 및 동작을 표현
클래스 구현 코드 예시
class Class01 {
int data01 = 1;
int data02 = 2;
public void print(){
System.out.println("Hello!");
}
}
인스턴스란?
인스턴스는 클래스로 인해서 생성된 객체가 메모리상에 올라간 상태를 의미한다.
즉 주소를 기준으로 다른 객체와 구별되는 상태라고 말할 수 있다.
new를 통해 생성된 인스턴스는 힙(heap) 메모리에 공간을 할당해 저장된다.
인스턴스 주소 확인 코드
class Main {
int data01 = 1;
int data02 = 2;
public void print(){
System.out.println("Hello!");
}
public static void main (String[] args) {
Main m1 = new Main(); // m1인스턴스 생성
Main m2 = new Main(); // m2인스턴스 생성
System.out.println(m1); // m1주소 출력
System.out.println(m2); // m2 주소 출력
}
}
결과 출력
Main@1dbd16a6
Main@7ad041f3
댓글남기기