반응형
1. Struct와 Class
- Struct(구조체):
- 값 타입(Value Type)으로, 메모리에서 값을 복사해 사용하므로 독립된 인스턴스를 생성.
- 상속 불가능.
- 주로 데이터를 저장하거나 간단한 로직을 수행할 때 사용.
- Class(클래스):
- 참조 타입(Reference Type)으로, 메모리에서 동일한 인스턴스를 여러 곳에서 참조.
- 상속 가능.
- 객체지향 프로그래밍의 주요 개념으로 사용.
🛠 주요 차이점
특징 Struct Class
메모리 구조 | Stack | Heap |
타입 | 값 타입(Value Type) | 참조 타입(Reference Type) |
상속 | 불가능 | 가능 |
성능 | 메모리 복사가 빨라 성능 우수 | 메모리 참조로 성능 낮음 |
2. 프로토콜
- *프로토콜(Protocol)**은 특정 기능을 정의한 청사진입니다.
- Struct, Class, Enum에서 프로토콜을 채택(Adopt)하고 구현(Implement)할 수 있습니다.
- 용도
- 코드를 재사용 가능하고 유연하게 설계.
- 프로토콜 기반의 설계 방식(Protocol-Oriented Programming)을 가능하게 합니다.
🛠 프로토콜 문법 예제
protocol Greetable {
func greet() -> String
}
struct Person: Greetable {
var name: String
func greet() -> String {
return "Hello, \\(name)!"
}
}
let person = Person(name: "Alice")
print(person.greet()) // "Hello, Alice!"
💡 직접 구현해보기
1. Struct 구현하기
- 이름과 나이를 저장하는 User Struct를 작성하고, 두 명의 독립적인 사용자 인스턴스를 생성해주세요.
- 두 인스턴스의 값을 변경한 후, 각 인스턴스가 서로 독립적임을 확인하세요.
import UIKit
struct User {
var name: String
var age: Int
}
var user1 = User(name: "Won", age: 27)
var user2 = User(name: "sik", age: 27)
print(user1)
print(user2)
user1.name = "Yang"
user2.age = 10
print(user1)
print(user2)
2. Class 사용
- 이름과 나이를 저장하는 User Class를 작성하고, 두 개의 사용자 참조를 생성해주세요.
- 한 참조의 값을 변경한 후, 두 참조가 동일한 값을 공유하는지 확인하세요.
struct User {
var name: String
var age: Int
}
var user1 = User(name: "Won", age: 27)
var user2 = user1 // 값 복사 (새로운 인스턴스 생성)
user2.name = "Sik"
user2.age = 30
print("User1: \(user1.name), \(user1.age)") // Won, 27
print("User2: \(user2.name), \(user2.age)") // Sik, 30
3. Greetable 프로토콜
- greet() 메서드를 포함한 Greetable 프로토콜을 정의합니다.
- Person Struct와 Robot Class에서 이 프로토콜을 채택하고 구현하세요.
- Person은 이름을 활용하여 인사를 출력, Robot은 고유 ID를 활용해 인사를 출력합니다.
import UIKit
protocol Greetable {
func greet() -> String
}
struct Person: Greetable {
var name: String
func greet() -> String {
return "안녕하세요 ! 내배캠 iOS 마스터 6기 \(name)입니다."
}
}
class Robot: Greetable {
var id: String
init(id: String) {
self.id = id
}
func greet() -> String {
return "안녕하세요 ! 로봇\(id) 입니다."
}
}
let person = Person(name: "양원식")
let robot = Robot(id: "ID-1222")
person.greet()
robot.greet()
4. 프로토콜 확장(Extension)
- Greetable 프로토콜에 기본 구현을 추가하여 greet() 메서드가 기본적으로 "Hello!"를 반환하도록 하세요.
- 기본 구현을 사용하지 않고 고유 인사를 반환하는 Alien Struct를 추가로 구현하세요.
import UIKit
protocol Greetable {
func greet() -> String
}
extension Greetable {
func greet() -> String {
return "Hello!"
}
}
struct Person: Greetable {
var name: String
func greet() -> String {
return "안녕하세요 ! 내배캠 iOS 마스터 6기 \(name)입니다."
}
}
struct Alien: Greetable {
}
class Robot: Greetable {
var id: String
init(id: String) {
self.id = id
}
func greet() -> String {
return "안녕하세요 ! 로봇\(id) 입니다."
}
}
let person = Person(name: "양원식")
let robot = Robot(id: "ID-1222")
let alien = Alien()
alien.greet()
person.greet()
robot.greet()
💬 과제 진행 중 오류
과제 진행 중 아래와 같은 오류가 있어 해결하였습니다.
[ Xcode ] Unable to boot simulator
Xcode Playground를 build하는 중 해당 오류가 발생하였습니다. 해당 오류에 대해 구글링을 해보고 가장 간단한 방법으로 해결해봤습니다.💡 해결 방법 왼쪽 상단부의 애플 아이콘을 클릭 후 이 Mac
sheep1sik.tistory.com
반응형
'내배캠 iOS 마스터 6기' 카테고리의 다른 글
[ 사전캠프 6일차 ] 비동기 프로그래밍/ 제네릭 (0) | 2025.02.10 |
---|---|
[ 사전캠프 4일차 ] 클로저/ 객체지향 프로그래밍 (0) | 2025.02.06 |
[ 사전캠프 2일차 ] 자료구조/ 메모리 구조 및 ARC (0) | 2025.02.04 |