Struct와 Class
1. Struct(구조체)
- 값 타입(Value Type)으로, 메모리에서 값을 복사해 사용하므로 독립된 인스턴스를 생성.
- 상속 불가능.
- 주로 데이터를 저장하거나 간단한 로직을 수행할 때 사용.
2. Class(클래스)
- 참조 타입(Reference Type)으로, 메모리에서 동일한 인스턴스를 여러 곳에서 참조.
- 상속 가능.
- 객체지향 프로그래밍의 주요 개념으로 사용.
* init이란? Swift에서 Class(클래스)나 Struct(구조체)의 인스턴스를 생성할 때 호출되는 초기화 메서드(initializer)임.
* 인스턴스란? Class나 Struct를 사용하여 만들어 낸 실제 객체를 의미. Class나 Struct는 설계도라고 이해하면 편함.
* Struct(구조체)를 정의하면 자동으로 모든 속성을 초기화하는 init을 만들어줌.
* self는 현재 인스턴스를 참조하는 키워드. init에서 매개변수와 인스턴스 변수가 같을 때 사용.
프로토콜
- 프로토콜(Protocol)은 특정 기능을 정의한 청사진.
- Struct, Class, Enum(열거형) 에서 프로토콜을 채택(Adopt)하고 구현(Implement)할 수 있음.
- 용도
- 코드를 재사용 가능하고 유연하게 설계.
- 프로토콜 기반의 설계방식(Protocol-Oriented Programming)을 가능하게 함.
실습
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를 추가로 구현하기.
Person과 Robot의 경우 프로토콜을 채택하지만 직접 구현한 사례이며, Alien의 경우 프로토콜의 기본 구현을 채택함.
* ViewController Class 내부에 선언했기 때문에, iOS 앱에서 ViewController가 로드될 때, 정상적으로 실행됨.
* ViewController의 인스턴스 변수로 선언하여 재사용 가능성을 높임.
'iOS' 카테고리의 다른 글
[iOS] 2025.02.25 클로저 / 객체지향 프로그래밍 (0) | 2025.02.25 |
---|---|
[iOS] 2025.02.24 자료구조 / 메모리 구조 및 ARC (0) | 2025.02.24 |
[iOS] 2025.02.12 프로젝트 : "간단한 가위바위보 게임 만들기" (0) | 2025.02.12 |
[iOS] 2025.02.11 함수의 사용 방법 이해하기 (0) | 2025.02.11 |
[iOS] 2025.02.10 함수의 선언과 사용 방법 이해하기 (0) | 2025.02.10 |