이 영역을 누르면 첫 페이지로 이동
Daily Growth 블로그의 첫 페이지로 이동

Daily Growth

페이지 맨 위로 올라가기

Daily Growth

Loving you is the reason I live. That’s why every day is precious, a step toward my dreams and you.

앱 시닝 vs 슬라이싱: iOS 앱 최적화 개념 / 에셋 카탈로그, IBOutlet

  • 2025.05.25 21:49
  • IT

앱 시닝

iOS 앱 개발을 시작하면서 Xcode 프로젝트를 열어보면 처음 마주하는 개념들이 있다. 그중에서도 에셋 카탈로그, IBOutlet, 그리고 앱의 설치 용량 최적화와 관련된 앱 시닝(App Thinning)과 슬라이싱(Slicing)은 반드시 알아야 할 중요한 내용이다. 

 

🎨 에셋 카탈로그란?

Xcode에서 프로젝트를 생성하면 자동으로 Assets.xcassets라는 폴더가 생성된다.
이 폴더는 이미지, 앱 아이콘, 데이터 파일 등 앱에서 사용하는 리소스를 체계적으로 관리하는 공간이며, 이를 에셋 카탈로그(Asset Catalog)라고 부른다.

에셋 카탈로그의 역할

  • 이미지, 아이콘, 런치 이미지 등의 리소스를 정리해 저장
  • 디바이스의 해상도나 환경에 따라 적절한 리소스를 자동으로 선택
  • 앱 최적화 기술(슬라이싱)과 자연스럽게 연결됨

구성 요소

  • Groups: 에셋을 그룹화하여 관리
  • Assets: 이미지, 아이콘 등 실제 리소스 묶음
  • Asset name: 코드에서 사용할 이름 (예: UIImage(named: "playIcon"))
  • Attributes: 디바이스, 스케일, 사이즈 클래스 등 다양한 조건

 대표 타입

타입 확장자 설명
App Icon .appiconset 앱 아이콘
Image Set .imageset 일반 이미지 리소스
Data Set .dataset JSON, PDF 등 기타 데이터 파일
Launch Image .launchimage 앱 실행 시 첫 화면 이미지 (iOS 7 이하)

 

🧩 앱 시닝(App Thinning)과 슬라이싱(Slicing)

앱을 실제 기기에 설치할 때, 전체 리소스를 모두 넣는다면 용량이 너무 커지고 효율적이지 않다. 그래서 등장한 개념이 앱 시닝(App Thinning)이다.

앱 시닝(App Thinning)이란?

앱을 각 디바이스에 맞게 최적화하여 설치하는 기술이다.
목표는 설치 용량 감소, 다운로드 속도 향상, 사용자 경험 개선이다.

앱 시닝은 세 가지 주요 기술로 구성된다:

  1. 슬라이싱(Slicing)
  2. 비트코드(Bitcode)
  3. 주문형 리소스(On-Demand Resources)

 슬라이싱(Slicing)이란?

앱에서 사용하는 이미지나 리소스를 디바이스에 맞게 잘라서 제공하는 기술이다.
예를 들어 iPhone SE에 앱을 설치할 경우, iPad용 대형 이미지나 불필요한 리소스는 설치되지 않는다.
이 조각들을 슬라이스(slice)라고 부르며, 에셋 카탈로그에서 관리하는 리소스는 자동으로 슬라이싱된다.

구분 앱 시닝 슬라이싱
개념 설치 최적화를 위한 전략 전체 리소스 조각화를 통한 최적화
관계 상위 개념 하위 개념
대상 전체 앱 이미지, 코드, 리소스

 

🔌 IBOutlet이란? 그리고 weak은 왜 쓰는 걸까?

Xcode에서 스토리보드(Interface Builder)를 통해 UI 요소(버튼, 레이블 등)를 만들고 코드에서 접근하려면 연결이 필요하다.
이때 사용하는 것이 바로 @IBOutlet이다.

@IBOutlet weak var playPauseButton: UIButton!

IBOutlet의 의미

  • IBOutlet은 Interface Builder(스토리보드)의 객체를 코드와 연결하는 역할
  • 버튼, 이미지 뷰, 텍스트 필드 등 거의 모든 UI 요소에 사용 가능

weak을 꼭 써야 하나?

결론부터 말하자면 아니오, 꼭 쓸 필요는 없다.
다만 ARC(자동 참조 카운트)와 순환 참조 방지를 위해 일반적으로 weak을 붙이는 것이 권장된다.

✅ 왜 weak을 쓰는가?

  • 스토리보드에서 생성된 객체는 시스템(Xcode 런타임)이 소유하고 있다 (strong 참조)
  • 코드에서 또 strong으로 소유하면 순환 참조가 생길 수 있다
  • 이를 방지하기 위해 대부분 weak으로 선언한다

예시 비교

// 일반적으로 사용되는 방식
@IBOutlet weak var titleLabel: UILabel!

// 작동은 하지만 순환 참조 위험이 있는 방식
@IBOutlet var titleLabel: UILabel!

요약: @IBOutlet var도 작동하지만, 메모리 누수와 유지보수를 고려해 weak 사용이 표준이다.

 


개념 요약 설명
에셋 카탈로그 이미지와 리소스를 효율적으로 관리하고, 디바이스에 맞춰 자동 선택됨
앱 시닝 디바이스에 맞는 리소스만 설치되도록 앱을 최적화하는 전략
슬라이싱 시닝의 한 요소로, 디바이스별 리소스를 잘라내는 기술
IBOutlet 스토리보드 객체를 코드에 연결하는 방법
weak 메모리 누수 방지를 위한 약한 참조 키워드 (IBOutlet에 자주 사용)

 

반응형

'IT' 카테고리의 다른 글

Swift UI 컨트롤: 버튼, 레이블, 슬라이더의 모든 것  (0) 2025.05.25
Swift 핵심 개념 정리 : 제네릭, 프로토콜, ARC와 강한 순환 참조  (0) 2025.05.23
Swift 고차 함수 쉽게 배우기: map, filter, reduce 실전 예제  (0) 2025.05.22
Swift 오류처리 : 자판기 예제로 배우는 throw, throws, try, do-catch, switch-case, defer  (0) 2025.05.21
Swift 익스텐션 활용법: 연산 프로퍼티, 메서드, 서브스크립트 추가하기  (0) 2025.05.14

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Swift UI 컨트롤: 버튼, 레이블, 슬라이더의 모든 것

    Swift UI 컨트롤: 버튼, 레이블, 슬라이더의 모든 것

    2025.05.25
  • Swift 핵심 개념 정리 : 제네릭, 프로토콜, ARC와 강한 순환 참조

    Swift 핵심 개념 정리 : 제네릭, 프로토콜, ARC와 강한 순환 참조

    2025.05.23
  • Swift 고차 함수 쉽게 배우기: map, filter, reduce 실전 예제

    Swift 고차 함수 쉽게 배우기: map, filter, reduce 실전 예제

    2025.05.22
  • Swift 오류처리 : 자판기 예제로 배우는 throw, throws, try, do-catch, switch-case, defer

    Swift 오류처리 : 자판기 예제로 배우는 throw, throws, try, do-catch, switch-case, defer

    2025.05.21
다른 글 더 둘러보기

정보

Daily Growth 블로그의 첫 페이지로 이동

Daily Growth

  • Daily Growth의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 분류 전체보기 (432) N
      • Design History (69)
      • IT (134) N
      • Typography (13)
      • UX • UI Design (10)
      • Money (62)
      • Health (53)
      • Words (6)
      • Reading (20)
      • English (64)

    나의 외부 링크

    • lody.design
    • lody.canada
    • lody.study
    • lody.diary

    정보

    self-improvement의 Daily Growth

    Daily Growth

    self-improvement

    블로그 구독하기

    • 구독하기
    • 네이버 이웃 맺기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. Copyright © self-improvement.

    티스토리툴바