-
[사전캠프 TIL 1일차] Struct / Class / ProtocoliOS💖 2025. 2. 3. 19:50
학습 키워드
Struct
Class
Protocol
🗂️ POP (Protocol Oriented Programming)
Struct vs. Class
특징 Struct (구조체) Class (클래스) 메모리 구조 Stack Heap 타입 값 타입 (Value type) 참조 타입 (Reference type) 상속 불가능 가능 성능 메모리 복사 빠름 -> 성능 ⬆️ 메모리 참조 -> 성능 ⬇️ 공통점 Protocol 채택 & 구현 가능 메모리 구조에 대해서는 이전에 학습하지 못했던 것 같다.
앞으로 메모리 구조에 대해 더 공부해야될 것 같다.
CS 공부가 시급..
손정리


Struct & Class 같이 보면 좋은 포스트
내가 과거에 정리했던 포스트
1. https://hortenssiaa.tistory.com/17?category=1120065
(Swift) Structures VS. Classes
Choose Structures by Default!Use structures by default.Use classes when you need Objective-C interoperability.Use classes when you need to control the identity of the data you’re modeling.Use structures along with protocols to adopt behavior by sharing i
hortenssiaa.tistory.com
Protocol
- Protocol 은, 기능에 대한 정의만 제공!!
- ➡️ 실제 구현 제공 X
- ➡️ Protocol 채택하여야만 기능 구현 가능!
- 채택 (Adopt) & 구현 (Implement) 가능 타입
- Struct
- Class
- Enum
- ⭐️⭐️ extension 을 통해, 역할에 대한 실제 구현 (= 메소드 구현) 가능함 ⭐️⭐️
- 용도
- 코드 재사용 가능
- ➡️ 유연한 설계
- POP 가능
- Protocol-Oriented Programming, 프로토콜 기반의 설계 방식
- 코드 재사용 가능
- 예제 코드)
protocol Greetable { func greet() -> String } struct Person: Greetable { var name: String func greet() -> String { return "Hello, \\(name)!" } } let person = Person(name: "Mimi") print(person.greet()) // "Hello, Mimi!"직접 구현해보는 코드
1. Struct 구현하기
- 이름과 나이를 저장하는 User Struct를 작성하고, 두 명의 독립적인 사용자 인스턴스를 생성해주세요.
- 두 인스턴스의 값을 변경한 후, 각 인스턴스가 서로 독립적임을 확인하세요.
struct User { var name: String var age: Int } var sangyeon = User(name: "Sangyeon", age: 26) var mimi = User(name: "Mimi", age: 29) print(sangyeon.age) // 26 print(mimi.age) // 29 sangyeon.age = 13 mimi.age = 21 print(sangyeon.age) // 13 print(mimi.age) // 212. Class 구현하기
- 이름과 나이를 저장하는 User Class를 작성하고, 두 개의 사용자 참조를 생성해주세요.
- 한 참조의 값을 변경한 후, 두 참조가 동일한 값을 공유하는지 확인하세요.
class User { init(name: String, age: Int) { self.name = name self.age = age } var name: String var age: Int } var sangyeon = User(name: "User Name", age: 100) var mimi = sangyeon print("[sangyeon] \(sangyeon.name), \(sangyeon.age)") // [sangyeon] User Name, 100 print("[mimi] \(mimi.name), \(mimi.age)") // [mimi] User Name, 100 sangyeon.age = 50 print("[sangyeon] \(sangyeon.name), \(sangyeon.age)") // [sangyeon] User Name, 50 print("[mimi] \(mimi.name), \(mimi.age)") // [mimi] User Name, 50 mimi.name = "Mimi" print("[sangyeon] \(sangyeon.name), \(sangyeon.age)") // [sangyeon] Mimi, 50 print("[mimi] \(mimi.name), \(mimi.age)") // [mimi] Mimi, 503. Greetable 프로토콜
- greet() 메서드를 포함한 Greetable 프로토콜을 정의합니다.
- Person Struct와 Robot Class에서 이 프로토콜을 채택하고 구현하세요.
- Person은 이름을 활용하여 인사를 출력, Robot은 고유 ID를 활용해 인사를 출력합니다.
import Foundation protocol Greetable { func greet() } struct Person: Greetable { func greet() { print("Hello, This is Struct Person") } } class Robot: Greetable { func greet() { print("Hello, This is Robot no.\(UUID())") } } var person = Person() person.greet() // Hello, This is Struct Person var robot = Robot() robot.greet() // Hello, This is Robot no.4E57B4B1-6229-49FD-B8D7-57A053BD310E4. 프로토콜 확장(Extension)
- Greetable 프로토콜에 기본 구현을 추가하여 greet() 메서드가 기본적으로 "Hello!"를 반환하도록 하세요.
- 기본 구현을 사용하지 않고 고유 인사를 반환하는 Alien Struct를 추가로 구현하세요.
protocol Greetable { func greet() -> String } struct Person: Greetable { } var person = Person() print(person.greet()) // Hello! extension Greetable { func greet() -> String { return "Hello!" } } struct Alien: Greetable { func greet() -> String { return "Hello, from Alienumhahaha" } } var a = Alien() print(a.greet()) // Hello, from Alienumhahaha손정리

Protocol 같이 보면 좋은 포스트
내가 과거에 정리했던 포스트
1. https://hortenssiaa.tistory.com/18
(Swift) POP (Protocol Oriented Programming)
protocol , extension , protocol extension 을 통해 POP (Protocol Oriented Programming)이 가능함 1. protocol : 어떤 역할에 대한 정의 제공실제 구현 제공 Xprotocol Payable { func calculateWages() -> Int}protocol Trainable { func trai
hortenssiaa.tistory.com
회고
오랜만에 문법 복습을 한다.
사전학습이라서 뭔가 별거 없을 것 같았는데, 알차게 구성되어있어서 넘 좋다!
오늘은 OT라 정신없이 하루가 후딱지나갔지만,
남은 4일간, 앞으로 문법 때문에 막히는 일 없게 복습을 잘 해보자.
'iOS💖' 카테고리의 다른 글
[사전캠프 TIL 3일차] ARC / 클로저 / OOP (1) 2025.02.05 [사전캠프 TIL 2일차] 자료구조 / 메모리 구조 (2) 2025.02.04 [Swift] Network connect 두 가지 방법 (0) 2024.10.22 (Swift) closure @escaping (1) 2024.10.16 (Swift) the concept of capturing (capturing 개념) (2) 2024.10.16 - Protocol 은, 기능에 대한 정의만 제공!!