머리말


100문 100답 List
100문 100답 List 1~10
100문 100답 List 11~20
100문 100답 List 21~30
100문 100답 List 31~40
100문 100답 List 41~50
100문 100답 List 51~60
100문 100답 List 61~70
100문 100답 List 81~90
100문 100답 List 完

시작.

71. Code Signing과 Provisioning Profile의 역할은 무엇인가요?


Code Signing

Code Signing은 iOS 앱의 보안을 강화하기 위한 중요한 기능입니다.
Conde Signing은 개발자가 만든 앱을 디지털 서명하여 앱의 무결성을 검증하고, 앱을 만든 개발자를 확인하는 역할을 합니다.

Code Signing을 통해 다음과 같은 이점을 얻을 수 있습니다.

  • 앱의 무결성 검증 : Code Signing을 통해 앱이 개발자의 의도대로 변경되지 않았는지 확인할 수 있습니다.
  • 앱의 출처 확인 : Code Signing을 통해 앱을 만든 개발자를 확인할 수 있습니다.
  • 앱의 위조 방지 : Code Signing을 통해 앱이 악의적으로 위조되지 않았는지 확인할 수 있습니다.

Provisioning Profile

Provisioning Profile은 Code Signing을 위한 인증서와 기타 정보를 포함하는 파일입니다.
Provisioning Profile은 개발자가 앱을 iOS 기기에 설치하거나 App Store에 제출할 때 필요합니다.

Provisioning Profile에는 다음과 같은 정보가 포함됩니다.

  • 개발자 인증서 : 앱을 서명하는 데 사용되는 인증서입니다.
  • App ID : 앱을 식별하는 고유한 ID 입니다.
  • 기기 식별자 : 앱을 설치할 수 있는 기기를 식별하는 ID 입니다.
  • 배포 대상 : 앱을 배포할 수 있는 대상입니다.

요약

  • Code Signing : 앱의 무결성과 출처를 확인하여 보안을 강화하는 기능
  • Provisioning Profile : Code Signing을 위한 인증서와 기타 정보를 포함하는 파일로, 앱을 설치 또는 배포할 때 배포

72. 앱의 로깅 전략에 대해 설명하세요.


앱의 로깅 전략은 앱의 성능, 안정성 보안을 모니터링하고 문제를 해결하기 위한 필수적인 요소입니다.

로깅 전략은 다음과 같은 요소를 고려하여 수립해야합니다.

  • 로깅의 목적
    • 로깅을 통해 무엇을 얻고자 하는지 명확히 해야합니다.
    • 예를 들어, 성능을 모니터링하기 위해 로깅을 한다면, CPU 사용량, 메모리 사용량, 네트워크 사용량 등의 정보를 기록해야 합니다.
  • 로깅의 범위
    • 로깅을 해야 할 내용을 결정해야 합니다.
    • 모든 내용을 로깅하면 로그 파일이 너무 커지고 관리하기 어려워지므로, 필요한 내용만 로깅해야 합니다.
  • 로깅의 레벨
    • 로그의 중요도를 구분하는 레벨을 설정해야 합니다.
    • 일반적으롷 ERROR, WARN, INFO, DEBUG, TRACE 등의 레벨을 사용합니다.
  • 로깅의 저장 방법
    • 로그를 어떻게 저장할지 결정해야 합니다.
    • 파일, 데이터베이스, 클라우드 서비스 등을 사용할 수 있습니다.

앱의 로깅 전략을 수립할 때 고려해야 할 몇 가지 구체적인 사항

  • ERROR 로그 : 시스템 오류, 예외 발생, 중요한 정보의 손실 등과 같은 심각한 문제.
  • WARN 로그 : 예외 발생과 같은 문제는 아니지만, 정상적인 동작에 영향을 미칠 수 있는 정보.
  • INFO 로그 : 앱의 일반적인 동작.
  • DEBUG 로그 : 개발자가 디버깅을 위해 사용하는 정보.
  • TRACE 로그 : 디버깅을 위해 가장 세부적인 정보.

로깅을 통해 이런 문제들을 해결할 수 있습니다.

  • 성능 문제 : CPU 사용량, 메모리 사용량, 네트워크 사용량 등의 정보를 통해 성능 문제를 파악할 수 있습니다.
  • 안정성 문제 : 예외 발생, 충돌 등의 정보를 통해 안전성 문제를 파악할 수 있습니다.
  • 보안 문제 : 보안 침해, 이상 로그 등의 정보를 통해 보안 문제를 파악할 수 있습니다.

73. Swift 패키지 매니저(Swift Package Manager)는 무엇인가요?


SwiftPM 은 Swift로 작성된 라이브러리와 앱을 배포하고 사용하는 데 사용되는 도구입니다.
Xcode 11에 처음 도입되었으며 CocoaPods와 Carthage와 같은 타사 도구를 대체하기 위한 Apple의 공식 도구입니다.

기능

  • 종속성 관리
    • SwiftPM을 사용하면 앱 또는 라이브러리에 필요한 종속성을 쉽게 관리할 수 있습니다.
    • 종속성은 다른 개발자가 만든 라이브러리 또는 앱입니다.
    • SwiftPM은 종속성을 자동으로 다운로드 하고 빌드하므로, 개발자는 종속성을 관리하는 데 시간을 할애할 필요가 없습니다.
  • 빌드
    • SwiftPM을 사용하면 앱 또는 라이브러리를 쉽게 빌드할 수 있습니다.
    • SwiftPM은 앱 또는 라이브러리에 필요한 모든 종속성을 자동으로 포함하여 빌드 프로세스를 단순화힙니다.
  • 테스트
    • SwiftPM을 사용하면 앱 또는 라이브러리를 쉽게 테스트할 수 있습니다.
    • SwiftPM은 앱 또는 라이브러리에 필요한 모든 종속성을 자돟으로 포함하여 테스트 프로세스를 단순화합니다.

이점

  • 간편한 사용 : SwiftPM은 사용하기 쉽고 직관적인 도구입니다.
  • 효율성 : SwiftPM은 종속성 관리, 빌드, 테스트를 자동화하여 개발자의 생산성을 높입니다.
  • 보안 : SwiftPM은 종속성의 무결성을 확인하여 보안을 강화합니다.

74. HTTP와 HTTPS의 차이점을 설명하세요.


HTTP

HTTP는 HyperText Transfer Protocol의 약자로, 웹에서 텍스트, 이미지, 동영상 등의 리소스를 전송하는 데 사용되는 프로토콜 입니다.
HTTP는 텍스트 기반의 프로토콜이기 때문에, 데이턱 네트워크를 통해 전송되는 동안 중간에 제3자가 데이터를 가로챌 수 있습니다.

HTTPS

HTTPS는 HTTP에 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security)를 사용하여 암호화를 추가한 프로토콜입니다.
SSL?TLS는 데이터를 암호화하여 중간에 제3자가 데이터를 가로채더라도 데이터를 읽을 수 없도록 합니다.

차이점

특성 HTTP HTTPS
암호화 없음 있음
데이터 보호 데이터가 네트워크를 통해 전송되는 동안 중간에 제3자가 데이터를 가로챌 수 있음 데이터가 네트워크를 통해 전송되는 동안 중간에 제3자가 데이터를 가로채더라도 데이터를 읽을 수 없음
보안 낮음 높음
사용 예 웹사이트, 웹 서비스, 이메일, FTP 은행, 결제, 의료, 정부 기관

75. Xcode의 Source Control을 사용한 경험이 있나요?


Source Control

Xcod의 Source Control은 Git을 기반으로 하는 버전 관리 시스템으로, 소스 코드의 변경 사항을 추적하고, 협업하고, 버전을 관리할 수 있습니다.

장점

  • 소스코드의 변경 사항을 추적하기 쉽습니다.
  • 이전 버전으로 되돌리기가 쉽습니다.
  • 여러 개발자가 함께 작업하기 좋습니다.
  • 버전을 관리하기 쉽습니다.

유용한 기능

  • Branch : 새로운 기능을 개발하거나, 버그를 수정하기 위해 새로운 브랜치를 생성할 수 있습니다.
  • Commit : 소스 코드의 변경 사항을 커밋하여 기록할 수 있습니다.
  • Merge : 두 개의 브랜치를 병합할 수 있습니다.
  • Pull Request : 다른 개발자가 작성한 코드를 검토하고, 병합할 수 있습니다.

76. Swift의 함수와 메서드의 차이점은 무엇입니까?


함수

함수는 특정 작업을 수행하기 위해 사용되는 코드 블록입니다.
함수는 전역 범위 또는 함수 범위에서 선언할 수 있습니다.
전역 범위에서 선언된 함수는 어디에서나 호출할 수 있지만, 함수 범위에서 선언된 함수는 해당 함수 내에서만 호출할 수 있습니다.

다음은 함수의 예입니다.

func add (a: Int, b: Int) -> Int {
  return a + b 
}
print(add(1, 2)) // 3

메서드

메서드는 클래스, 구조체,열거형의 멤버로서 선언되는 함수입니다.
메서드는 해당 멤버를 소유하는 개체의 인스턴스를 통해 호출할 수 있습니다.

다음은 메서드의 예입니다.

class Person {
  var name: String

  init(name: String) {
    self.name = name
  }

  func sayHello() {
    print("Hello, I'm \(name).")
  }
}

let person = Person(name: "Choi")
person.sayHello() // Hello, I'm Choi.

차이점

특성 함수 메서드
선언 위치 전역 범위 또는 함수 범위 클래스, 구조체, 열거형의 멤버
호출 방법 어디에서나 호출 가능 해당 멤버를 소유하는 개체의 인스턴스를 통해 호출
반환 타입 선택사항 선택사항
매개변수 선택사항 선택사항

77. iOS에서 Notification Center가 무엇이며 어떻게 사용하나요?


iOS에서 Notification Center는 앱에서 발생하는 이벤트를 다른 앱에 알리는 데 사용되는 시스템 서비스입니다.
Notification Center를 사용하면 앱 간에 정보를 공휴하고, 사용자에게 알림을 보내고, 다른 앱의 상태를 모니터링 할 수 있습니다.

Notification Center는 앱이 이벤트를 발생시키고 다른 앱이 그 이벤트를 수신하는 방식으로 작동합니다.
앱이 이벤트를 발생시키려면 NotificationCenter.default를 사용하여 post 메서드를 호출합니다.
이 메서드는 이벤트의 이름, 데이터, 대상 앱을 지정합니다.

다른 앱이 이벤트를 수신하려면 NotificationCenter.default를 사용하여 addObserver 메서드를 호출합니다.
이 메서드는 이벤트의 이름, selector, object를 지정합니다.
selector는 이벤트가 발생했을 때 호출되는 함수입니다.
object는 이벤트를 발생시킨 앱입니다.

Notification 사용 방법

  • 이벤트를 발생시키는 방법
let notification = Notification(name: .myNotificationName, object: nil, 
                                userInfo: ["data": "Hello, World"])
NotificationCenter.default.post(notification)
  • 이벤트를 수신하는 방법
class MyViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    // 이벤트 수신 등록
    NotificationCenter.detault.addObserver(self, selector: #selector(myNotificationReceived), name: .myNotificationName, object: nil)
  }

  @objc func myNotificationReceived(notification: Notification) {
    // 이벤트 처리
    print(notification.userInfo) // ["data": "Hello, World"]
  }
}
  1. Cocoa Touch와 Cocoa의 차이점은 무엇인가요?

Cocoa Touch

Cocoa Touch는 iOS 앱 개발에 사용되는 프레임워크입니다.
Cocoa Touch는 iOS의 기본 기능을 제공하는 클래스와 API를 제공합니다.
여기에는 뷰, 컨트롤, 터치 입력, 멀티미디어, 네트워킹 등이 포함됩니다.

Cocoa

Cocoa는 macOS 앱 개발에 사용되는 프레임워크입니다.
Cocoa는 macOS의 기본 기능을 제공하는 클래스와 API를 재공합니다.
여기에는 창, 메뉴, 컨트롤, 파일시스템, 네트워킹 등이 포함됩니다.

차이점

특성 Cocoa Cocoa Touch
대상 플랫폼 macOS iOS
제공하는 기능 macOS의 기본 기능 iOS의 기본 기능
사용 예 macOS 앱 개발 iOS 앱 개발

79. iOS에서 Gesture Recognizer가 무엇이고 어떻게 사용하나요?

iOS에서 Gesture Recognizer는 사용자가 뷰에 대한 터치 입력을 인식하는 데 사용되는 클래스입니다.
Gesture Recognizer는 다양한 종류의 제스터를 인식할 수 있습니다.
예를 들어, 탭, 스와이프, 핀치, 줌, 드래그 등을 인식할 수 있습니다.

Gesture Recognizer 추가하는 방법

  1. Gesture Recognizer 클래스의 인스턴스를 생성합니다.
  2. Gesture Recognizer를 뷰에 추가합니다.
  3. Gesture Recognizer가 인식한 제스처를 처리하는 코드를 작성합니다.

예시

다음 코드는 탭 제스쳐를 인식하는 Gesture Recognizer를 추가하는 코드입니다.

// Gesture Recognizer 클래스의 인스턴스를 생성합니다.
let tapRecognizer = UITapGestureRecongnizer(target: self, #selector(tapGestureRecognize))

// Gesture Recognizer를 뷰에 추가합니다.
view.addGestureRecognizer(tapRecognizer)

tapGestureDidRecognize 메서드는 탭 제스처가 인식되었을 때 호출됩니다.
이 메서드에서 제스처를 처리하는 코드를 작성합니다.

@objc func tapGestureDidRecognize(_ sender: UITapGestureRecognizer) {
  // 제스처를 처리합니다.
}

일반적인 Gesture Recognizer 클래스

  • UITapGestureRecognizer : 탭 제스처를 인식합니다.
  • UISwipeGestureRecognizer : 스와이프 제스처를 인식합니다.
  • UIPinchGestureRecognizer : 핀치 제스처를 인식합니다.
  • UIPanGestureRecognizer : 드래그 제스처를 인식합니다.

80. Auto Layout의 Intrinsic Content Size가 어떻게 동작하는지 설명하세요.


Auto Layout에서 Intrinsic Content Size는 뷰의 기본 크기를 지정하는 데 사용됩니다.
뷰의 Intrinsic Content Size는 뷰의 컨텐츠에 의해 결정됩니다.

Intrinsic Content Size는 Auto Layout에서 뷰의 크기를 결정하는 데 사용됩니다.
뷰의 Intrinsic Content Size를 지정하면 Auto Layout이 뷰의 크기를 자동으로 계산할 수 있습니다.

Intrinsic Content Size 지정하는 방법

  • 프로퍼티 : 뷰의 intrinsicContentSize 프로퍼티를 사용하여 Intrinsic Content Size를 지정할 수 있습니다.

  • 메서드 : 뷰의 intrinsicContentSizeTahtFits(_:) 메서드를 사용하여 뷰의 Intrinsic Content Size를 지정할 수 있습니다.
    이 메서드는 뷰의 콘텐츠에 대한 제약 조건을 전달합니다.

Intrinsic Content Size를 사용하는 몇 가지 예

  • 텍스트 뷰 : 텍스트 뷰의 Intrinsic Content Size는 텍스트의 길이와 글꼴 크기에 따라 결정됩니다.
    텍스트 뷰의 Intrinsic Content Size를 지정하면 Auto Layout이 텍스트 뷰의 크기를 자동으로 계산할 수 있습니다.

  • 이미지 뷰 : 이미지 뷰의 Intrinsic Content Size는 이미지의 크기에 따라 결정됩니다.
    이미지 뷰의 Intrinsic Content Size를 지정하면 Auto Layout이 이미지 뷰의 크기를 자동으로 계산할 수 있습니다.

  • 버튼 : 버튼의 Intrinsic Content Size는 버튼의 타이틀 크기와 마진에 따라 결정됩니다.
    버튼의 Intrinsic Content Size를 지정하면 Auto Layout이 버튼의 크기를 자동으로 계산할 수 있습니다.









다음에 계속


100문 100답 List에서 71~80번까지의 질문에 대한 답변입니다.
틀린 답변이 있거나 더 좋은 답변이 있다면 댓글 남겨주시면 적극 반영하겠습니다.
다들 화이팅 입니다.

100문 100답 List 1~10
100문 100답 List 11~20
100문 100답 List 21~30
100문 100답 List 31~40
100문 100답 List 41~50
100문 100답 List 51~60
100문 100답 List 61~70
100문 100답 List 81~90
100문 100답 List 完

이상.