Swift

클래스, 인스턴스, 객체가 도대체 뭡니까. - swift

나른한코딩 2021. 8. 20. 14:09

 

 

원래는 초기화(initialization)에 대해 정리해보면서 포스팅을 하려고 했습니다 🤔

 

 

 

초기화의 정의부터 살펴보는데

 

 

.

.

"초기화는 클래스/구조체/ 연거형의 인스턴스를 사용하기 위한 준비과정이다.
초기화가 완료된 인스턴스는 사용 후 소명 시점이 오면 소멸한다."

.

.

.

 

 

 

내가 막연하게는 알고 있지만, 인스턴스의 개념에 대해 잘 알고있나..?

라는 생각이 들어

인스턴스에 대해서 먼저 정리해 보려합니다~!

 

 

 

 

인스턴스란,

클래스에서 생성된 객체를 말하는데,

정의된 클래스를 실제로 사용하는 것을 인스턴스라고 보면 됩니다.

(= 실제로 메모리에 할당되어 동작할 수 있는 모양을 갖춘 것!)

 

 

 

 

 

그럼 여기서 또 줄줄이 소세지처럼 헷갈리는 개념들이 나오죠.

 

 

 

 

 

"객체..? 객체는 또 뭐지.. 클래스는 또 뭐지..🥲"

(간단하게 요약해서 소개드리고, 나중에 객체지향 프로그래밍에 대해 정리할 때, 클래스와 구조체를 정리할 때 자세히 다루겠습니다!)

 

 

 

 

 

 

클래스와 객체

클래스(Class) :

  • 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성과 행위를 정의한 것입니다.
  • 객체 지향 프로그램의 기본 사용자 정의 타입이라고 할 수 있습니다.
  • 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인 되어야 합니다.

(*공식문서 : https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html )

 

 

객체(Object) :

  • 클래스의 인스턴스입니다.
  • 객체는 자신 고유의 속성이 있으며 클래스에서 정의한 행위를 할 수 있습니다.
  • 스위프트에서는 '객체'라는 용어보다는 '클래스의 인스턴스'라는 표현을 사용합니다.

 

+ 메서드(Method) :

  • 객체가 클래스에 정의된 행위를 실질적으로 하는 함수 입니다. 메서드를 통해 객체에 명령을 전달할 수 있습니다.
  • 객체 간의 명령 전달 또는 데이터 전달은 메서드를 통해 이루어지고
  • 명령/데이터를 전달하는 행위를 '메서드를 호출한다.'라고 표현합니다.

(*공식문서 : https://docs.swift.org/swift-book/LanguageGuide/Methods.html )

 

 

 

 

 

 

 

 

여기서 짚고가야 하는 점은

객체와 인스턴스는 동의어가 아닙니다!

인스턴스는 구조체의 인스턴스, 열거형의 인스턴스도 있을 수 있기 때문에 

객체는 인스턴스 중에서 클래스의 인스턴스만 가리키는 한정적인 의미입니다.

.

.

 

 

 

클래스, 객체, 인스턴스를 간단한 비유를 통해 설명하자면

 

 

객체를 만들기 위한 틀은 "클래스"

클래스로부터 만들어진 객체를 "인스턴스"

라고 합니다.

 

 

 

그걸 예를 들어 그림으로 그려보자면,

 

swift 클래스와 인스턴스와 객체의 의미

다음과 같습니다!

 

 

 

 

 

 

 

이렇게 비유해서 이해하니까 저는 쉽더라고요ㅎㅎ

위의 그림을 코드로 작성하면 다음과 같겠네요.

// Person 클래스
class Person {
  var name: String
  var age: Int
  
  init(name: String, age: Int) { // 클래스 초기화
    self.name = name
    self.age = age
  }
}

// Person 클래스의 인스턴스
var 철수: Person = Person(name: "철수", age: 17)
var 영희: Person = Person(name: "영희", age: 18)
var 민수: Person = Person(name: "민수", age: 19)

.

.

.

.

++ 추가 TMI

새로운 인스턴스를 사용할 준비를 하기 위해 저장 프로퍼티의 초기값을 설정하는 일을 하는 것이 초기화(init) 과정,

메모리에서 해제되기 직전 클래스 인스턴스와 관련하여 원하는 정리작업을 구현하는 것이 디이니셜라이져(deinit) 입니다.

디이니셜라이저는 클래스의 인스턴스가 메모리에서 소멸되지 바로 직전에 호출됩니다.

디 이니셜라이저는클래스의 인스턴스에서만 구현할 수 있습니다.

.

.

.

.

이상 클래스, 인스턴스, 객체의 개념 정리를 마치겠습니다.

 

 

 

 

 

 

틀린부분이 있거나, 더 좋은 방법이 있다면 댓글로 남겨주세요! 
🌈댓글은 언제나 환영입니다🙏🏻

 

반응형