Swift 기초문법

Swift: 클래스 (class)

zoonee 2022. 3. 17. 13:32

 

클래스 : class 클래스이름 { 프로퍼티와 메서드 }

 

  • 클래스는 참조타입이다. 참조 타입이란, 변수나 상수에 값을 할당하거나 함수에 인자로 전달될 때 그 값이 복사되지 않고 참조된다는 의미이다.
  • Call by reference : 할당 또는 파라미터 전달 시에 객체를 가리키고 있는 메모리의 주소값이 복사 된다.
  • Heap Mermory 영역에 할당된다. 따라서 속도가 느리다.
  • 런타임에 직접 allocate 하며 reference counting을 통해 deallocate가 필요하다.
  • 상속이 가능하다.
  • 런타임에 타입캐스팅을 통해 클래스 인스턴스에 따라 여러 동작이 가능하다.
  • deinitializer가 존재한다.

 

→ 위 코드는 강아지의 정보를 구성하는 클래스 이다. 우선 class키워드를 Dog이라고 이름을 지어주었다. 그리고 그 안에 코드블록을 열어 두개의 프로퍼티를 생성하였다. name이라는 이름을 가진 변수에는 String타입을 주었고, "" 를 작성하여 빈문자열로 초기화 하였고, 다른 하는 age라는 이름을 가진 변수에 Int타입을 주고, 값을 0으로 초기화하였다. 

 

그리고, 구조체와 똑같이 classmethod를 정의할 수 있는데, 강아지 이름하고 나이를 출력할 수 있는 introduce method를 정의해보자. class에서는 생성자를 정의해줘야 한다. 인스턴스를 생성하고, 초기화 하고자 할때 기본적인 생성자를 사용한다. 생성자를 따로 정의를 안해줘도, 다음과 같은 형태로 ( init() { } )생성자가 기본적으로 생성된다. 지금 보자면 프로퍼티를 선언할 때 값을 초기화 해주었는데 생성자를 통해서도 값을 초기화 할 수 있다. Dog class의 인스턴스를 생성해보자.

 

dog라는 변수를 선언후 정의한 class Dog를 주고 소괄호로 ()열고 닫아주면 Dog class의 인스턴스가 생성된다. 클래스안에 있는 프로퍼티의 값을 접근하는 방법도 구조체와 같다. 인스턴스 이름과 프로퍼티 이름을 .(점)으로 연결시켜주면 된다. 그러면 dog.name의 프로퍼티 값을 "CoCo"를 주어 초기화시켜주었고, dog.age의 프로퍼티 값도 3이라는 값을 주어 초기화 하였다. 그러면 이 둘을 접근해서 값이 잘 변경되었는지 확인해보자. 확인해보면 값이 잘 변경되었고, 이런식으로 클래스도 프로퍼티의 값을 변경할 수 있다.

 

dog와 class의 정의된 메서드 호출도 인스턴스 이름과 메서드 이름을 .(점)으로 연결시켜 호출하면 된다. -> dog.introduce() 를 점으로 연결하여 인스턴스 이름과 호출할 함수 이름을 점으로 연결시켜주면 된다. 실행하면 dog class 안에 있는 introduce 메서드가 호출되고, 강아지 이름과 나이가 출력되는걸 확인 할 수 있다.

'Swift 기초문법' 카테고리의 다른 글

Swift: 초기화 구문 (init, deinit)  (0) 2022.03.17
Swift: 클래스와 구조체의 차이  (0) 2022.03.17
Swift: 구조체(struct)  (0) 2022.03.17
Swift: 옵셔널(optional)  (0) 2022.03.17
ios 패스트캠퍼스 11  (0) 2022.03.16