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 구현하기
•
id, name, price, category 속성을 가진 Product 구조체를 만드세요.
•
두 개의 Product 인스턴스를 생성하고, 하나의 가격을 변경한 후 다른 인스턴스에 영향이 없는지 확인하세요.
2.
Class 사용 예제:
•
Struct와 Class 비교해보기
◦
id, name, price, category 속성을 가진 Product Class를 작성하고, 두 개의 프로덕트 참조를 생성해주세요.
◦
한 참조의 값을 변경한 후, 두 참조가 동일한 값을 공유하는지 확인하세요.
힌트!
•
ShoppingCart 클래스 만들기
◦
Product를 Struct로 구현후, [Product] 타입의items 배열과 Double 타입의 totalPrice 계산 프로퍼티를 가진 ShoppingCart 클래스를 만드세요.
◦
addItem(_:), removeItem(at:) 메서드를 구현하세요.
◦
동일한 ShoppingCart 인스턴스를 두 개의 변수에 할당하고, 한쪽에서 아이템을 추가했을 때 다른 쪽에도 반영되는지 확인하세요
힌트!
3.
Discountable 프로토콜:
•
Double 타입의 originalPrice 변수와 discountedPrice(rate: Double) 메서드를 포함한 Discountable 프로토콜을 정의합니다.
•
Discountable 프로토콜을 채택하여 다양한 할인 정책 구현해보세요.
◦
PercentageDiscount 구조체: 퍼센트 할인 (예: 20% 할인)
◦
VIPDiscount 클래스: VIP 등급별 차등 할인 (Gold: 15%, Silver: 10%, Bronze: 5%)
4.
프로토콜 확장(Extension):
•
Discountable 프로토콜에 finalPrice() 메서드의 기본 구현을 추가하여 할인된 가격을 반환하세요.
힌트!