Struct와 Class / 프로토콜
개념 바로 알기
1. Struct와 Class
1.
Struct(구조체):
•
값 타입(Value Type)으로, 메모리에서 값을 복사해 사용하므로 독립된 인스턴스를 생성.
•
상속 불가능.
•
주로 데이터를 저장하거나 간단한 로직을 수행할 때 사용.
2.
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!"
Swift
복사
직접 구현해보기
앞서 복습한 Struct와 Class / 프로토콜을 기반으로 직접 구현해볼거에요!
힌트는 가능한 보지 않고 진행해주세요.
1.
Struct 구현하기
•
이름과 나이를 저장하는 User Struct를 작성하고, 두 명의 독립적인 사용자 인스턴스를 생성해주세요.
•
두 인스턴스의 값을 변경한 후, 각 인스턴스가 서로 독립적임을 확인하세요.
2.
Class 사용 예제:
•
이름과 나이를 저장하는 User Class를 작성하고, 두 개의 사용자 참조를 생성해주세요.
•
한 참조의 값을 변경한 후, 두 참조가 동일한 값을 공유하는지 확인하세요.
힌트!
3.
Greetable 프로토콜:
•
greet() 메서드를 포함한 Greetable 프로토콜을 정의합니다.
•
Person Struct와 Robot Class에서 이 프로토콜을 채택하고 구현하세요.
•
Person은 이름을 활용하여 인사를 출력, Robot은 고유 ID를 활용해 인사를 출력합니다.
4.
프로토콜 확장(Extension):
•
Greetable 프로토콜에 기본 구현을 추가하여 greet() 메서드가 기본적으로 "Hello!"를 반환하도록 하세요.
•
기본 구현을 사용하지 않고 고유 인사를 반환하는 Alien Struct를 추가로 구현하세요.
힌트!