반응형
안녕하세요 공공돌🧸 입니다.
구조체에 대해 정리 해봤습니다.
1. 구조체
1. 구조체란?
- 스위프트 대부분 타입은 구조체로 이루어져 있습니다.
- 구조체는 값(value) 타입입니다.
- 타입이름은 대문자 카멜케이스를 사용하여 정의합니다.
2. 구조체 문법
- 구조체 정의 : "struct" 키워드 사용
struct 이름 {
/* 구현부 */
}
- 구조체 프로퍼티 및 메서드 구현
struct Sample {
// 가변 프로퍼티(값 변경 가능)
var mutableProperty: Int = 100
// 불변 프로퍼티(값 변경 불가능)
let immutableProperty: Int = 100
// 타입 프로퍼티(static 키워드 사용 : 타입 자체가 사용하는 프로퍼티)
static var typeProperty: Int = 100
// 인스턴스 메서드(인스턴스가 사용하는 메서드)
func instanceMethod() {
print("instance method")
}
// 타입 메서드(static 키워드 사용 : 타입 자체가 사용하는 메서드)
static func typeMethod() {
print("type method")
}
}
- 구조체 사용
// 가변 인스턴스 생성
var mutable: Sample = Sample()
mutable.mutableProperty = 200
// 불변 프로퍼티는 인스턴스 생성 후 수정할 수 없습니다
// 컴파일 오류 발생
//mutable.immutableProperty = 200
// 불변 인스턴스
let immutable: Sample = Sample()
// 불변 인스턴스는 아무리 가변 프로퍼티라도
// 인스턴스 생성 후에 수정할 수 없습니다
// 컴파일 오류 발생
//immutable.mutableProperty = 200
//immutable.immutableProperty = 200
// 타입 프로퍼티 및 메서드
Sample.typeProperty = 300
Sample.typeMethod() // type method
// 인스턴스에서는 타입 프로퍼티나 타입 메서드를
// 사용할 수 없습니다
// 컴파일 오류 발생
//mutable.typeProperty = 400
//mutable.typeMethod()
3. 학생 구조체 만들어보기
struct Student {
// 가변 프로퍼티
var name: String = "unknown"
// 키워드도 `로 묶어주면 이름으로 사용할 수 있습니다
var `class`: String = "Swift"
// 타입 메서드
static func selfIntroduce() {
print("학생타입입니다")
}
// 인스턴스 메서드
// self는 인스턴스 자신을 지칭하며, 몇몇 경우를 제외하고 사용은 선택사항입니다
func selfIntroduce() {
print("저는 \(self.class)반 \(name)입니다")
}
}
// 타입 메서드 사용
Student.selfIntroduce() // 학생타입입니다
// 가변 인스턴스 생성
var yagom: Student = Student()
yagom.name = "GGDol"
yagom.class = "스위프트"
yagom.selfIntroduce() // 저는 스위프트반 GGDol입니다
// 불변 인스턴스 생성
let jina: Student = Student()
// 불변 인스턴스이므로 프로퍼티 값 변경 불가
// 컴파일 오류 발생
//jina.name = "Bin"
jina.selfIntroduce() // 저는 Swift반 unknown입니다
4. 생각해보기
▶ 내가 알고있는 언어의 구조체와 스위프트의 구조체와 어떤점이 다를까요?
저의 경우 C언어와 비교를 해보겠습니다.
C언어 구조체
멤버 변수 선언
C 언어에서 구조체는 일반적으로 멤버 변수의 선언만을 가지고 있습니다.
메서드(함수)를 구조체 내부에 정의할 수 없습니다.
struct Point {
int x;
int y;
};
포인터 연산
C 언어의 구조체는 포인터 연산이 가능하며, 멤버 변수에 직접 접근할 수 있습니다.
struct Point p;
p.x = 10;
p.y = 20;
struct Point *ptr = &p;
printf("%d", ptr->x); // 10
Switf 구조체
멤버 변수 및 메서드 선언
Swift의 구조체는 멤버 변수 뿐만 아니라 메서드(함수) 또한 포함할 수 있습니다.
struct Point {
var x: Int
var y: Int
func printCoordinates() {
print("x: \(x), y: \(y)")
}
}
값 타입
Swift의 구조체는 값 타입(Value Type)입니다.
이는 구조체 인스턴스가 전달될 때 복사가 이루어진다는 것을 의미합니다.
▶ 구조체는 어떤 상황에 사용할 수 있을까요?
구조체는 다음과 같은 상황에서 사용될 수 있습니다
- 간단한 데이터 모델링: 구조체는 연관된 데이터를 묶어 간단한 데이터 모델을 만드는 데 사용됩니다. 예를 들어, 점 좌표나 사용자 정보 등을 표현할 수 있습니다.
//구조체 선언
struct Point {
var x: Int
var y: Int
}
// 구조체 인스턴스 생성 및 사용
let point = Point(x: 10, y: 20)
print("Point coordinates: x = \(point.x), y = \(point.y)")
- 값 타입 필요한 경우: 값 타입이 필요한 상황에서 구조체가 유용합니다. 값이 복사되기 때문에 데이터의 무결성을 유지할 수 있습니다.
// 구조체 선언
struct Temperature {
var celsius: Float
var fahrenheit: Float
// 추가적인 기능이 있다면 메서드로 구현 가능
func printTemperature() {
print("Current Temperature: \(celsius) Celsius, \(fahrenheit) Fahrenheit")
}
}
// 구조체 인스턴스 생성 및 사용
let currentTemp = Temperature(celsius: 25.0, fahrenheit: 77.0)
currentTemp.printTemperature()
- 캡슐화된 기능: Swift에서는 구조체에 메서드를 추가할 수 있으므로, 특정 데이터와 해당 데이터를 조작하는 함수를 함께 그룹화할 수 있습니다.
// 구조체 선언
struct User {
var username: String
var age: Int
// 메서드로 캡슐화된 기능 추가
func greet() {
print("Hello, \(username)! You are \(age) years old.")
}
}
// 구조체 인스턴스 생성 및 사용
let user = User(username: "John", age: 30)
user.greet()
공부하는 공돌이, 공공돌입니다🐻
@sheep1sik
출처 : 야곰 iOS 프로그래밍을 위한 스위프트 기초
반응형
'iOS > Swift 기초' 카테고리의 다른 글
[ Swift 기초 ] 열거형 (2) | 2024.01.11 |
---|---|
[ Swift 기초 ] 클래스 (1) | 2024.01.10 |
[ Swift 기초 ] 옵셔널 추출 (2) | 2024.01.08 |
[ Swift 기초 ] 옵셔널 (1) | 2024.01.07 |
[ Swift 기초 ] 반복문 (2) | 2024.01.06 |