Publishing Date:2020-09-15
Struct
일반적으로 프로그래밍 언어에서 데이터를 묶어서 표현하고자 할 때 주로 사용된다. 즉, 하나의 사용자 데이터 타입을 만들어준다.
- 언어별 구조체 사용 예제 추가할 것
스위프트에서는 특히 구조체와 클래스의 문법이 흡사하다. 다른 점은 구조체가 값 타입(value type), 클래스가 참조 타입(reference type)이라는 것이다.
또한 스위프트에서는 구조체를 사용할 때 제약 사항이 적다. 하나의 소스 파일에 여러 개의 구조체와 클래스가 동시에 정의되고 구현될 수 있으며, 구조체 안에 구조체, 클래스 안에 클래스가 존재할 수 있다.
구조체 정의
// 정의
struct StructName{
//properties
let number : Int
var name : String
//methods
...
}
- 구조체를 정의할 때는 커스텀 데이터 타입을 생성해주는 것이므로 대문자 카멜 케이스 사용
- 구조체 내부 변수, 함수들은 소문자 카멜 케이스 사용
// 기본 생성 이니셜라이저로 구조체 생성
var createdStruct : StructName = StructName(number: Int, name: String)
구조체와 클래스의 차이
- 값 타입, 참조 타입
- 값 타입
값 자체를 복사해서 전달 따라서 값 타입의 데이터를 전달할 경우 메모리에 새 인스턴스가 생성됨. 생성된 새 인스턴스에 해당 값이 복사되어 들어감 - 참조 타입
포인터와 유사한 개념. 값을 복사하는 것이 아니라 참조(주소)가 전달됨
따라서 새 인스턴스가 생성되지 않고 기존의 인스턴스 주소를 전달 - 식별 연산자(
===
)
식별 연산자로 클래스의 인스턴스끼리 참조가 같은지 확인할 수 있다.
- 값 타입
-
구조체는 상속 불가
- 디이니셜라이저는 클래스의 인스턴스에만 활용 가능
- 참조 횟수 계산은 클래스의 인스턴스에만 적용됨
- 타입캐스팅은 클래스의 인스턴스에만 허용됨
3,4,5는 클래스의 특징에서 정리하는 것이 나을 것 같아 1번, 2번만 먼저 정리하고자 한다. 클래스 정리는 여기로
구조체와 클래스의 공통점
- 내부에 프로퍼티와 메소드 존재
- 이니셜라이저 존재
extension
가능- 특정 프로토콜 채택 가능
- 서브스크립트 정의 가능
Comments