안녕하세요! 오늘은 모바일 앱해킹을 하다가 문득 객체와 인스턴스의 차이점이 궁금해져서 찾아본 내용을 정리해서 전달해 드릴까 합니다! 그 내용은 바로 클래스(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 클래스의 '인스턴스'(객체를 메모리에 할당)
}
}
긴 글 읽어주셔서 감사합니다!
'모바일 앱개발(Kotlin-PHP-Mysql)' 카테고리의 다른 글
[Android Studio] PHP 서버와 통신시 세션ID 활용하는 방법 -Kotlin (0) | 2024.10.17 |
---|---|
[Android Studio] 게시글 CRUD(생성,읽기,수정,삭제)기능 구현 -Kotlin (0) | 2024.10.15 |
[Android Studio] 게시글 읽기 페이지 구현(CRUD->R) - Kotlin (1) | 2024.10.13 |
[Android Studio] 게시판 기능 구현 + 리사이클 뷰 생성 (Kotlin) (0) | 2024.10.11 |
[Android Studio] 무선 디버깅 연결이 안될때 수동으로 연결하는법. (0) | 2024.10.07 |