250417 iOS프로그래밍실무 7주차

2025. 4. 17. 15:36·iOS프로그래밍실무 (3학년 1학기)

열거형(enum)

  • 관련있는 데이터들이 멤버로 구성되어 있는 자료형 객체
    • 원치 않는 값이 잘못 입력되는 것 방지
    • 입력 받을 값이 한정되어 있을 때
    • 특정 값 중 하나만 선택하게 할 때

열거형 멤버별 기능 정의

열거형 멤버에는 메서드도 가능

열거형의 rawValue

String형 값을 갖는 열거형의 rawValue

연관 값(associated value)을 갖는 enum

옵셔널은 연관 값(associated value)을 갖는 enum

구조체 : Memberwise Initializer 자동 생성

기존에 배운 init과 class를 사용한

지금 배우고있는 구조체 - Memberwise Initializer가 자동으로 만들어짐

swift에서 구조체를 사용할 때와 class를 사용할 때의 차이점

구분 구조체 클래스
메모리 영역 주로 스택(Stack)에 저장 (단, 클래스 내부 포함 시 힙 사용) 힙(Heap)에 저장
상속 불가능 가능
타입 캐스팅 불가능 가능 (is/as 연산자 사용)
생성자 기본 생성자 자동 제공 (사용자 정의 생성자 추가 가능) 기본 생성자 없음 (직접 구현 필요)
소멸자 불가능 deinit 사용 가능
ARC 관리 미적용 참조 카운팅(ARC) 적용
스레드 안전성 값 복사 특성으로 인해 안전 참조 공유로 인해 주의 필요
Mutating 메서드 프로퍼티 변경 시 mutating 키워드 필수 필요 없음
표준 라이브러리 예시 String, Int, Array 등 대부분의 기본 타입 NSObject, UIView 등 UIKit/Foundation 클래스
타입 값 타입 (Value Type) - 복사 시 전체 값이 복제됨 참조 타입 (Reference Type) - 복사 시 메모리 주소 공유

 

사용 사례

구조체 클래스
- 간단한 데이터 모델링 (좌표, 사용자 정보)
- 멀티스레드 환경에서 안전성 요구 시
- 상속 불필요 시
- 상속이 필요한 경우
- Objective-C 호환성 필요 시
- 인스턴스 생명주기 제어 필요 시 (deinit 활용)

 

클래스 내에 구조체

class가 struct보다 더 갖는 특징

  • 상속이 가능
  • 타입 캐스팅(is as as? as!)을 통해 실행 시점에 클래스 인스턴스의 타입을 검사하고 해석 가능
  • deinitializer(deinit{})로 사용한 자원을 반환 가능
  • 참조 카운팅을 통해 한 클래스 인스턴스를 여러 곳에서 참조(사용) 가능

구조체는 값 타입(value type) 클래스는 참조 타입(reference type)

Value Type vs Reference Type 비교표

구분 Value Type (값 타입) Reference Type (참조 타입)
저장 방식 변수에 실제 값 저장 (스택 메모리 주로 사용) 변수에 메모리 주소(참조) 저장 (힙 메모리 사용)
할당 시 동작 값 복사 (독립적인 복사본 생성) 참조 복사 (동일 메모리 주소 공유)
변경 영향 복사본 변경 시 원본 영향 없음 복사본 변경 시 원본 함께 변경
메모리 관리 스택 기반 자동 해제 힙 기반 (참조 카운팅/GC 등으로 관리)
스레드 안전성 복사 특성으로 인해 안전 공유 참조로 인해 동시성 문제 발생 가능
주요 예시 Int, Double, Struct (Swift), struct (C#), 기본 원시 타입 Class (Swift/C#), Object, 배열(참조 타입으로 동작하는 경우), 문자열(일부 언어에서 참조 타입)
함수 전달 시 값 복사 전달 (원본 보존) 참조 전달 (원본 수정 가능)
사용 사례 단순 데이터 모델링, 멀티스레드 환경 상속 필요, 대규모 객체 관리

구조체는 값 타입(value type) 클래스는 참조 타입(reference type)

언제 클래스를 쓰고 언제 구조체를 쓰나?

  • 클래스는 참조타입, 구조체는 값 타입
    • 구조체는 간단한 데이터 값들을 한데 묶어서 사용하는 경우
    • 전체 덩어리 크기가 작은 경우, 복사를 통해 전달해도 좋은 경우 구조체
    • 멀티 쓰레드 환경이라면 구조체가 더 안전
    • 구조체는 상속할 필요가 없는 경우
      • 너비, 높이를 표현하는 기하학적 모양을 처리할 경우
      • 시작값, 증분, 길이 등으로 순열을 표현할 경우
      • 3차원 좌표 시스템의 각 좌표

 

참고자료 : 한성현 교수님 수업자료

저작자표시 (새창열림)

'iOS프로그래밍실무 (3학년 1학기)' 카테고리의 다른 글

250508 iOS프로그래밍실무 10주차  (0) 2025.05.08
250501 iOS프로그래밍실무 9주차  (1) 2025.05.07
240410 iOS프로그래밍실무 6주차  (0) 2025.04.10
250403 iOS프로그래밍실무 5주차  (0) 2025.04.03
250327 iOS프로그래밍실무 4주차  (0) 2025.04.02
'iOS프로그래밍실무 (3학년 1학기)' 카테고리의 다른 글
  • 250508 iOS프로그래밍실무 10주차
  • 250501 iOS프로그래밍실무 9주차
  • 240410 iOS프로그래밍실무 6주차
  • 250403 iOS프로그래밍실무 5주차
Z2AE
Z2AE
  • Z2AE
    딩코.log
    Z2AE
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • C++ 프로그래밍 (1학년 2학기) (12)
      • 서버프로그래밍 (1학년 2학기) (0)
      • C# 프로그래밍 (1학년 2학기) (2)
      • 프론트엔드 웹개발 (1학년 2학기) (2)
      • 데이터베이스 (2학년 1학기) (8)
      • 자료구조 (2학년 1학기) (2)
      • JAVA프로그래밍 (2학년 1학기) (7)
      • PHP쇼핑몰실무 (2학년 1학기) (2)
      • 운영체제 (2학년 1학기) (3)
      • 모바일게임개발 (2학년 1학기) (1)
      • iOS프로그래밍 (2학년 2학기) (11)
      • 네트워크보안 (2학년 2학기) (1)
      • iOS프로그래밍실무 (3학년 1학기) (11)
      • 소프트웨어설계 (3학년 1학기) (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Z2AE
250417 iOS프로그래밍실무 7주차
상단으로

티스토리툴바