iOS

[iOS] 2025.02.21 Struct와 Class / 프로토콜

ioskkt 2025. 2. 21. 15:00

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의 인스턴스 변수로 선언하여 재사용 가능성을 높임.