클래스 객체 인스턴스

한천희·2020년 2월 20일
0

iOS & Swift

목록 보기
3/6

클래스, 객체, 인스턴스

클래스 - 인스턴스를 만들기 위한 틀, 속성과 행동을 갖는다.
인스턴스 - 클래스의 속성을 실체화한 것. 클래스를 토대로 만들어진 객체, 속성을 갖는다. 행동은 클래스에 있다.
객체 - 실체, 관련된 것들의 모음.

처음에 메모리에 클래스 객체가 만들어진다. 인스턴스 객체들이 클래스 객체를 토대로 만들어진다. 클래스 객체라고는 잘 말하지 않고 클래스라고 부른다.

상속 관계나 프로퍼티 갯수 등 클래스의 정보를 메타클래스라고 하며 메모리의 heap 영역에 올라간다. 인스턴스는 이것을 기준으로 만들어진다.
메모리의 코드 영역에는 클래스에 정의한 메소드들이 올라간다. 메타클래스와 클래스 객체가 메모리의 어느 영역에 올라가는지는 더 깊이 파고들어야 한다.

모든 인스턴스들에서 공통적으로 사용하는 static 프로퍼티는 클래스에서 만들어진다. 인스턴스 프로퍼티의 값들이 heap 영역에 있는 인스턴스 객체에 할당된다. (초록색 사각형)

클래스를 만들 때 코드를 선언하는데, 이 코드는 모든 인스턴스들간에 공통으로 접근하는 내용이라 보라색으로 표시된 클래스 객체로(또는 클래스라고 말함. 클래스 객체도 메모리에 따로 올라간다.) 메모리에 할당된다.

new NSPen() 부분이 인스턴스로 생성되어 heap 영역에 할당되고 myPen 은 해당 heap 영역을 가리키는 변수로 스택 영역에 생성된다.(myPen이 전역변수이면 스택이 아닌 데이터 영역에 올라간다.) 객체는 인스턴스 객체(초록색 사각형), 클래스 객체(보라색 사각형)를 모두 통칭해서 말한다.
또 인스턴스들을 합쳐서 객체라고 표현하기도 한다.

0개의 댓글