Search
📻

Struct와 Class / 프로토콜

 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() 메서드의 기본 구현을 추가하여 할인된 가격을 반환하세요.
힌트!

 제출하기