오늘 적어볼 내용을 Swift 언어에 대한 특징들을 끄적여보겠습니다.
안정성(Type Safe한 언어)
문자열 배열에 다른 타입 숫자, 불리언 타입의 값을 저장할 수 없습니다.
안정성을 위해 체크를 해야합니다.
표현성(Expressive)
스위프트는 표현성을 고려한 언어입니다.
다중 패러다임 지향 언어
클래스(class)와 구조체(struct)를 사용하여 데이터를 객체라는 단위로 묶어 객체들 간의 상호작용으로 프로그래밍 하는 방식class Animal {
var name: String
init(name: String) {
self.name = name
}
func speak() {
print("\(name) makes a noise.")
}
}
class Dog: Animal {
override func speak() {
print("\(name) barks.")
}
}
let dog = Dog(name: "Fido")
dog.speak() // "Fido barks." 위 코드는 OOP의 개념을 활용하여 클래스와 상속을 표현 했습니다class Animal {
var name: String
init(name: String) {
self.name = name
}
func speak() {
print("\(name) makes a noise.")
}
} 순차:클래스 정의
“Animal” 이라고 클래스를 정의했습니다.
속성 정의
"name" 이라고 문자열 타입의 속성을 정의했습니다, 문자열을 저장할 수 있습니다.
초기화 메서드(Initializer)
"init(name: String)" 메서드는 클래스이 초기화 메서드로, 객체가 생성될 때 호출됩니다, "name" 메서드를 속성을 초기화합니다
메서드 정의
`"speak()"` 메서드는 `“\(name) makes a noise.”` 라고 출력합니다.
class Dog: Animal {
override func speak() {
print("\(name) barks.")
}
}
클래스 상속
Dog 클래스는 Animal 클래스의 모든 속성과 메서드를 물려 받는다는 의미 입니다.
메서드 오버라이딩
`Dog` 클래스는 `speak()` 메서드를 오버라이드하여 재정의합니다.
이 메서드는 `“\(name) barks."` 라고 출력합니다
Override란 서브클래스가 슈퍼클래스로 부터 상속 받은 메서드를 재정의 하는 것
let numbers = [1, 2, 3, 4, 5]
let doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // [2, 4, 6, 8, 10]numbers 는 [1, 2, 3, 4, 5] 라는 정수 배열입니다.
let 키워드는 이 배열이 상수(immutable)임을 의미합니다. 즉, numbers 배열 자체는 변경할 수 없습니다.
let doubledNumbers = numbers.map { $0 * 2 }
map 함수는 배열의 각 요소에 동일한 변환을 적용하여 새로운 배열을 변환합니다.
{ $0 * 0 } 는 클로저입니다. map 함수는 이 클로저를 배열의 각 요소에 적용합니다.
numbers.map { $0 * 0 } 의 결과는 [2, 4, 6, 8, 10] 입니다. 각 요소가 2배로 변환된 새로운 배열입니다.
$0은 배열의 각 요소를 나타내느 것입니다. 1이 될 수도 있고 2가 될 수도 있습니다.
프로토콜이란 작업, 클래스를 수행하기 위해 클래스, 구조체 또는 열거형에 구현하는 요구사항의 정의
protocol Describable {
var description: String { get }
}
struct Car: Describable {
var model: String
var description: String {
return "Car model: \(model)"
}
}
let car = Car(model: "Tesla")
print(car.description) // "Car model: Tesla"프로토콜 정의
protocol Describable {
var description: String { get }
}
Describable 프로토콜은 하나의 속성description 을 정의합니다.
이속성은 읽기 전용(computed property)이며, 문자열을 반환합니다.
구조체 정의
struct Car: Describable {
var model: String
var description: String {
return "Car model: \(model)"
}
Car 구조체는 Describable 프로토콜을 채택합니다.
model 속성은 자동차 모델을 나타내는 문자열을 저장합니다.
description 속성은 프로토콜에서 요구한 대로 구현되어 있습니다. 이는 자동차 모델을 나타내는 문자열을 반환합니다.