구조체 : struct 구조체 이름 { 프로퍼티와 메서드 }
- 구조체는 값 타입(Value Type) 이다. 값 타입이란 함수에서 상수나 변수로 전달될 때 그 값이 복사되서 전달된다.
- Call by value: 할당 또는 피라미터 전달시 value copy가 일어난다.
- 값 타입이기 때문에 멀티 스레드 환경에서 공유 변수로 인한 문제를 일으킬 확률이 적다.
- Stack Memory 영역에 할당되므로 속도가 빠르다.
- Scope based lifetime: 컴파일 타임에 컴파일러가 언제 메모리를 할당/해제할지 정확히 알고 있다.
- Data loclity: CPU 캐쉬 히트율이 높다.
- 상속이 불가능하다.
- AnyObject로 타입캐스팅이 불가하다.
→ 유저의 정보를 구성하는 정보의 구조체에 대해 알아보자. 구조체는 struct라는 키워드로 시작된다. 우선 User라는 네이밍으로 정의하였다. 참고로 보통 변수나 상수, 함수의 이름은 소문자로 시작하는 카밀표기법을 따르지만 구조체와 클래스의 이름은 대문자로 시작하는 파스칼표기법을 따른다. 이어서 유저라는 구조체에 나이를 저장할 수 있기 nickname이라는 변수를 선언하고 string타입을 갖는 프로퍼티를 선언하였다. 그리고 age라는 이름을 가진 Int타입을 가진 프로퍼티도 선언해 주었다. 그러면 nickname과 age라는 이름의 프로퍼티를 갖는 User struct가 정의 된다. 그러면 정의한 구조체는 어떻게 사용되는지 알아보자.
구조체를 사용하려면 인스턴스를 생성해줘야 한다. 인스턴스를 생선한다는건 클래스와 구조체를 실제로 사용하기 위해 메모리에 생성하는걸 말하고, 한마디로 메모리에 생성된 클래스의 구조실체라고 생각하면 된다.
이제는 User구조체에 인스턴스를 생성해보았다. user라는 이름의 변수를 선언하였고, 값으로 정의하였던 구조체의 이름을 입력하면 struct에서 정의한 nickname과 age에 프로퍼티에 값을 넣을수 있는 매개변수가 나온다. 써게스트로 자동완성이 되면 nickname과 age에 값을 넣으면 유저구조체에 인스턴스가 생성이 된다. 그럼 유저구조체 안에 있는 프로퍼티에 접근하고 싶다면 어떻게 하면 될까? 인스턴스와 프로퍼티의 이름을 .(점)으로 연결해주면된다. user.nickname 이런식으로 작성해주면 된다. 그러면 처음 실행해보면 처음 초기화한 값이였던 "Gunter"가 출력되는걸 볼 수 있고, 이 프로퍼티의 값을 변경하려면 user.nickname을 한번 더 작성하여 해당프로퍼티의 값에 예시로 "albert"라는 문자열을 대입하여 값을 주었고, 확인을 위해 user.nickname을 실행시켜보면 값이 변경된걸 확인 할 수 있따.
구조체 안에는 메서드도 정의가 가능한데,
유저구조체 안에 닉네임과 나이를 출력하는 inpormation method를 한번 정의해보면 information이라는 함수를 선언해주고, 코드블록안에 print함수로 구조체에 저장되어있는데 "\(nickname) \(age)" 를 출력하게 코드를 작성하고,
user.information()
구조체 안에 있는 메서드를 호출하려면 프로퍼티값이 접근하는 것을 마찬가지로 인스턴스의 이름과 함수의 이름을 .(점)으로 연결하여서 작성해주고 실행해주면 된다.
'Swift 기초문법' 카테고리의 다른 글
Swift: 클래스와 구조체의 차이 (0) | 2022.03.17 |
---|---|
Swift: 클래스 (class) (0) | 2022.03.17 |
Swift: 옵셔널(optional) (0) | 2022.03.17 |
ios 패스트캠퍼스 11 (0) | 2022.03.16 |
Swift: 반복문(for-in, forEach, while, repeat-while) (0) | 2022.03.16 |