티스토리 뷰

Swift Language Guide

7. Structures and Classes

지우개. 2020. 11. 2. 16:19

정의 문법

,구조체와 클래스는 코드를 블럭으로 쌓아가는 유연한 구조를 만드는 일반적인 목적입니다. 구조체와 클래스의 기능을 추가하기 위해 변수, 상수, 함수를 만들 때와 동일한 문법을 사용하며 프로퍼티와 메소드를 정의할 수 있습니다. 다른 언어들과는 다르게 스위프트는 커스텀 구조체와 클래스를 만들기 위해 별도의 분리된 인터페이스나 파일들을 만들 필요가 없습니다. 스위프트에선 한 파일에 클래스나 구조체를 정의하면 자동적으로 외부 인터페이스가 외부에서도 사용할 수 있습니다.

 

구조체와 클래스를 비교하면

구조체와 클래스 둘 다 가능한 것들

 

  • 값을 저장할 프로퍼티 정의 가능
  • 기능을 제공할 메소드 정의 가능
  • 서브스크립트 정의 가능(이건 차후에 나올 서브스크립트 챕터에 자세히)
  • 생성자 정의 가능
  • 기본적인 구현을 넘어서 추가적인 기능을 연장시켜줄 수 있음
  • 프로토콜 채택 가능

클래스만 할 수 있는 일들

  • 다른 한가지 클래스를 상속 가능
  • 타입 캐스팅을 통해 런타임에서 클래스의 인스턴스 타입을 해석하고 체크할 수 있음
  • 소멸자 사용 가능
  • Reference counting(이건 처음 보는데 나중에 자세히 알아보자)

문서에서는 가이드라인으로 클래스보다 쉽기 때문에 구조체를 사용하는 것을 좀 더 선호하라고 나와있다. 클래스는 적절하고 필요한 타이밍에 사용 하라고 함. 너가 정의할 custom data 타입들은 대부분 구조체 혹은 열거형이 될 것이라고

 

정의 문법

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

인스턴스 생성

let someResolution = Resolution()
let someVideoMode = VideoMode()
// 가장 간단한 형태의 생성자

구조체의 Memberwise 생성자

let vga = Resolution(width: 640, height: 480)

구조체는 자동적으로 프로퍼티 값을 지정해줄 수 있는 memberwise 생성자를 만들어줌. 

 

구조체와 열거형은 값 타입

값 타입은 값을 변수, 상수 혹은 함수를 통과할 때 값이 복사되는 타입.

모든 구조체와 열거형은 값 타입이기 때문에 애네 인스턴스 및 가지고 있는 프로퍼티는 전부 복사됨

 

let hd = Resolution(width: 1920, height: 1080)
var cinema = hd

cinema.width = 2048

print("cinema is now \(cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"

print("hd is still \(hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"

 

 

 

클래스는 참조 타입

참조 타입은 값을 변수, 상수 혹은 함수를 통과할 때 값이 복사되는 것이 아니라 같은 인스턴스에 대한 참조를 복사함

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

 

 

identical 연산자

같은 참조를 여러개의 상수, 변수가 가지고 있을 수도 있기 대문에 두 개의 상수,변수가 같은 클래스의 인스턴스를 참조하는 지 identical 연산자를 통해 확인 가능 ==는 같은 참조를,  !=는 다른 참조를 가지고 있다는 의미.

identical to (represented by three equals signs, or ===) 가 equal to (represented by two equals signs, or ==) 와 같은 의미가 아니라는 것에 주목(한국어로는 identical이나 equal이나 의미가 거의 같아 원문을 그대로 가져옴) .identicald은 같은 참조를 비교하고, equal을 동일한 값을 가졌는지 비교

 

포인터

c, c++, objective-C 경험이 있다면 메모리 주소를 가리키는 포인터를 알고 있을 텐데 일부 참조 유형의 인스턴스를 나타내는 상수,변수는 C의 포인터와 유사하지만 포인터처럼 직접 메모리 주소를 저장하는 것과는 다르고 *표시도 사용하지 않음. 표준 라이브러리에 포인터를 제공하니 필요하다면 사용 가능하나 왠만해서 사용하지 않을 듯 싶다.

'Swift Language Guide' 카테고리의 다른 글

9. 메소드  (0) 2020.11.06
8. 프로퍼티  (0) 2020.11.03
6. Enumerations  (0) 2020.11.01
5. Closures  (0) 2020.10.31
4. Functions  (0) 2020.10.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함