모바일 앱개발(Kotlin-PHP-Mysql)

클래스 - 객체 - 인스턴트 : 확실히 알고 넘어가자! (feat.붕어빵)

무너박사 2024. 10. 21. 00:20

Java 이미지

 

안녕하세요!  오늘은 모바일 앱해킹을 하다가 문득 객체와 인스턴스의 차이점이 궁금해져서 찾아본 내용을 정리해서 전달해 드릴까 합니다! 그 내용은 바로 클래스(Class) , 객체(Object) , 인스턴스(instance)에 대한 이야기입니다. 클래스와 객체의 관계는 알겠는데 객체와 인스턴스의 관계는 뭔가 애매모호한 느낌이 있어서 그걸 확실히 정리하고자 작성하였습니다!

 

괜히 설명이 길어지면 헷갈리실 테니 최대한 짧고 간결하게 작성하겠습니다!


<클래스 , 객체, 인스턴스의 정의>

-클래스(Class)

개념 : 객체를 만들어 내기 위한 설계도, Class 안에는 필요한 속성(변수)&메서드(함수)들이 들어있습니다.

 

비유 : 붕어빵 만들기 레시피입니다. "붕어빵을 만드는 방법으론 붕어빵 틀에다가 넣어줄 '앙금' , '밀가루 반죽'이 필요하다"라고 쓰여있습니다.


객체(Object)

개념 : 클래스에 선언된 모양 그대로 생성된 실체입니다. 메모리에는 아직 올라가지 않은 상태입니다. 즉 스택이나 힙에 올라가지 않은 상태라 이 자체로는 CPU에서 접근할 수 없는 상태라는 뜻입니다.

 

비유 : 붕어빵 틀입니다. 붕어빵 틀 만으로는 붕어빵이라고 할 수가 없죠! 하지만 여기에 밀가루 반죽과 앙금을 넣어줌으로써 붕어빵이 탄생할 것입니다. 틀 만으로는 붕어빵을 먹을 수 없는 상태입니다.

 

제가 그린 하찮은 붕어빵 틀..


인스턴스(instance)

개념 : 객체에 메모리가 할당되어 실제로 사용할 수 있는 구체적인 실체가 된 상태입니다. 엄밀히 말하자면 인스턴트 객체 관계를 가지게 됩니다! 객체가 더 포괄적인 개념인 것이죠. 그렇다고 객체 = 인스턴스라는 말은 아닙니다.

 

이제 붕어빵 틀에 반죽을 붓고 구워준 상태입니다. 이제 어느 앙금을 넣냐에 따라 '팥붕' 인지 '슈붕'인지 '초코붕' 인지 '말차붕'인지가 정해질 수 있는 겁니다. 설령 앙금을 아무것도 안 넣어 주었다 하더라도 구워진 붕어빵을 먹을 수 있는 상태입니다.

제가 그린 붕어빵 ^~^

 


<코드로 이해하기>

/* 클래스 */
public class FishBread {
  ...
}
/* 객체와 인스턴스 */
public class Main {
  public static void main(String[] args) {
    FishBread 팥붕,슈붕,초코붕,말차붕; // <= 객체 (아직 메모리에 안올라간 상태!)

    // 인스턴스화
    팥붕 = new FishBread(); // 팥붕은 FishBread 클래스의 '인스턴스'(객체를 메모리에 할당)
    슈붕 = new FishBread(); // 슈붕은 FishBread 클래스의 '인스턴스'(객체를 메모리에 할당)
    말차붕 = new FishBread();//말차붕은 FishBread 클래스의 '인스턴스'(객체를 메모리에 할당)
  }
}

 


 

긴 글 읽어주셔서 감사합니다!