iOS Swift Struct

운영 체제: macOS Monterey 12.3.1
사용 버전: Xcode 13.3.1, SwiftUI

iOS Swift Struct를 알아보겠습니다.


Struct는 기본 뼈대를 만든다고 생각하면 됩니다.
구체적으로 명시하는 것보다는 추상적으로 만드는 편입니다. 예를 들어 노트북이라고 하면 MacBook, LG, Samsung, DELL 이렇게 만드는 게 아닌 '화면이 있고 키보드가 있고 접을 수 있는 그런 컴퓨터' 이런 식으로 만듭니다.

노트북으로 만들어 봅시다.

struct를 만들기 위해서는 앞에 struct를 붙여주고 대문자로 시작합니다.





불러올 때는 함수처럼 괄호를 사용합니다







다 만들었습니다.


근데 struct 안에 아무것도 없네요.


struct 내부의 변수를 property 속성이라고 부릅니다. 속성을 넣어봅시다.

노트북에는 브랜드, 화면 개수, 키보드 개수, 사용자 이름, 비밀번호 것들이 필요할 것 같네요. 속성으로 만듭시다.


브랜드와 화면 개수, 스크린 개수, 키보드 개수는 변경할 일이 없어서 let으로 만들었고, userName과 password는 변경할 일이 생길 것 같아 var로 만들었습니다.







'.'을 통해 각 속성에 접근할 수 있습니다.

swift struct의 특이한 점은 struct를 let 변수로 만들 시에는 아무리 struct 내부에 var로 선언이 되어 있어도 변경이 안됩니다.










자동으로 변경되는 속성을 만들 수도 있습니다.

10 번째 줄에 있는 totalNumberOfScreenAndKeyboard는 numberOfScreen과 NumberOfKeyboard가 더해진 값이 저장됩니다.










값이 설정될 때 특정한 행동을 하게 만들고 싶다면, 다음과 같이 사용합니다.

10 번째 줄에 get과 set을 설정합니다. totalNumberOfScreenAndKeyboard에 값을 넣으면 set이 불러와집니다. set에는 newValue라는 변수로 우리가 대입하는 값이 들어갑니다. 값이 불러와질 뿐, 자기 자신의 값은 get에서 정해지기 때문에 현재 코드에서는 totalNumberOfScreenAndKeyboard의 값은 변하지 않습니다.







노트북을 켜는 함수도 만들어 봅시다. struct 내부의 함수를 method 메서드라고 부릅니다.

10 번째 줄에 함수를 만들었습니다.









비밀번호를 변경하는 함수를 만들어 봅시다.

10 번째 줄의 전원을 켜는 함수와 동일하게 14 번째 줄에 적었는데, 오류가 나옵니다.

이유는 내부 변수를 수정하기 위해서는 14 번째 줄에 mutating 선언이 필요합니다.








자 이제 변경이 됩니다.









그런데, 문제가 있습니다.

24, 25 번째 줄을 보면, 아무나 유저 이름과 비밀번호를 변경할 수 있습니다.







보호합시다. struct 내부에서만 보호하려면 private 단어를 변수 앞에 적어줍니다.

7, 8 번째 줄에 private를 적었습니다.







그러자 문제가 발생합니다. struct를 생성하지 못합니다. init이 private에 접근하지 못하기 때문인데요. init을 우리가 만들어 줘야 합니다.

10 ~ 16 번째 줄에 init을 만들어 주었습니다.








그러면 이제, 밖에서 마음대로 변경할 수 없게 됩니다.








그런데, private는 밖에서 print를 하지 못합니다. 우리가 유저 이름까지 밖에서 보이지 못하게 해야 할까요?

보는 건 가능하게 만드는 것은 private(set)이라는 명칭을 사용합니다.

7 번째 줄에 추가했습니다.









외부에서 입력하는 것은 불가능하지만, 30 번째 줄처럼 보는 것은 가능합니다.








변수가 변경되는 것을 감지하는 방법을 알아봅시다.

willSet과 didSet을 사용할 수 있습니다.

willSet은 바뀔 때 발동하고, didSet은 바뀐 후에 발동합니다.









마지막으로 static을 알아보겠습니다.

static은 모든 struct에서 같은 값을 가지고 접근 가능한 변수와 함수를 말합니다.

7, 9 번째 줄에 static을 붙였습니다.

static 변수에 접근하기 위해서는 10, 11 번처럼 struct 이름을 적거나 대문자로 시작하는 Self를 적습니다.












static이 아닌 함수나 변수에서 static을 수정할 수 있습니다. yourLaptop과 myLaptop에서 static 변수를 수정하는 것을 확인할 수 있습니다. 9, 13, 26, 28 번째 줄.









그 반대의 경우 static에서는 일반 struct 변수와 함수에 접근할 수 없습니다.



끝.


카테고리: iOS

댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

C++ OpenCV 모폴로지 침식, 팽창

KiCad 시작하기 2 (PCB 만들기)