- swift에 대해 공부한 내용을 정리한 글입니다.
- 해당 글은 한빛미디어의 스위프트 프로그래밍 3판을 참고하여 작성했습니다.
구조체란 타입이 다른 데이터를 용도에 맞게 하나로 묶는 방법이다. 즉, 프로퍼티나 메서드를 저장하고 제공하며, 캡슐화하여 표현하는 타입이다. 이때 구조체는 값 타입이다.
여기서 프로퍼티는 변수나 상수, 메서드는 함수로 생각합시다!
구조체는 struct
키워드를 사용하여 정의한다.
struct 구조체 이름 {
프로퍼티와 메서드
}
이때 구조체의 이름은 데이터 타입(Int, String...)처럼 파스칼케이스를 따른다. 소문자로 시작하는 프로퍼티나 메서드는 카멜케이스 방식을 따른다.
struct UserInfo {
var name: String = ""
var age: Int = 0
func introduce() {
print("\(name) \(age)")
}
}
이처럼 용도에 맞게 여러 프로퍼티나 메서드를 묶을 수 있어 편리하다.
인스턴스 생성은 다음과 같이 할 수 있다.
프로퍼티를 선언할 때 값을 초기화 했는데, 이니셜라이저를 사용하여 초기화하는 것도 가능하다.(참고)
var userInfo: UserInfo = UserInfo(name: "Hoojeong", age: 23)
var userInfo = UserInfo(name: "Hoojeong", age: 23)
userInfo.name = "Julia"
userInfo.age = 24
userInfo.introduce()
Julia 24
이때 인스턴스를 let
으로 생성했다면, 프로퍼티 값을 변경할 수 없다.
클래스란 타입이 다른 데이터를 용도에 맞게 하나로 묶는 방법이다. 즉, 프로퍼티나 메서드를 저장하고 제공하며, 캡슐화하여 표현하는 타입이다.
구조체와 완전 동일한 것 같지만, 클래스는 구조체와 달리 참조 타입이다. 구조체와 클래스의 차이에 대한 자세한 내용은 다음 포스팅에서 다루겠다.
클래스는 class
키워드를 사용해 정의한다.
class 클래스 이름 {
프로퍼티와 메서드
}
클래스 명도 구조체와 동일하게 앞 글자를 대문자로 작성하는 파스칼케이스를 따른다.
class Cat {
var name: String = ""
var age: Int = 0
func introduce() {
print("\(name) \(age)")
}
}
class 자식클래스 이름: 부모클래스 이름 {
프로퍼티와 메서드
}
상속에 대한 자세한 개념은 다른 포스팅에서 구체적으로 다루겠다.
인스턴스 생성은 다음과 같이 할 수 있다.
현재는 프로퍼티를 선언할 때 값을 초기화 했는데, 이니셜라이저를 사용하여 초기화하는 것도 가능하다.(참고)
var cat: Cat = Cat()
var cat = Cat()
cat.name = "coco"
cat.age = 1
cat.introduce()
coco 1