상세 컨텐츠

본문 제목

iOS실무_1주차_OT, iOS프로그래밍 개요,Swift 문법 리뷰

2026년도 1학기/iOS프로그래밍

by 멈뭉밈 2026. 3. 9. 15:20

본문

 

https://42matters.com/stats

 

Google Play vs iOS App Store | Store Stats for Mobile Apps

Google Play vs iOS App Store. We compare how many apps they have, the distribution of free vs paid apps, games vs non-gaming apps, and more!

42matters.com

 

2026년 3월 3일 기준 앱 수

 

 

https://www.mobileindex.com/mi-chart/realtime-rank/

 

모바일인덱스 INSIGHT

국내 유일의 DMP 기반 앱 분석 서비스입니다. 앱 이용성 및 심화 분석 데이터, 경쟁앱 교차 분석 데이터 등과 앱 마켓 분석 데이터를 통해 선명한 모바일 시장 분석이 가능합니다.

www.mobileindex.com

 

무료 게임 순위

유료 게임 순위

 

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

 

Documentation

 

docs.swift.org

 

 

한국어 버전

https://bbiguduk.github.io/swift-book-korean/documentation/tsplk/

 

Documentation

 

bbiguduk.github.io

 

 

스위프트 문법 정리 사이트

 

스위프트 버전별 내용(추가 및 수정) 정리

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/revisionhistory

 

Documentation

 

docs.swift.org

 

 

 

 

 

 


 

 

Swift Apple 운영 체제에서 주로 사용되지만, 다양한 플랫폼을 지원하고 있으며, 현대적인 프로그래밍 언어로서 여러 강력한 특징을 갖고 있습니다.

 

 

 

 

 

 

스위프트(Swift) 언어에서 중요한 문법 10개

  1. 변수와 상수 선언 (Variables & Constants)
    • var를 사용하여 변수 선언, let을 사용하여 상수 선언.
    var name = "John"
    let age = 30
    
  2. 데이터 타입 (Data Types)
    • 스위프트는 타입 추론을 지원하며, 명시적으로 타입을 지정할 수 있습니다.
    var name: String = "Alice"
    var age: Int = 25
    
  3. 옵셔널 (Optionals)
    • 값이 없을 수 있음을 나타내는 Optional 타입. ?와 !를 사용.
    var name: String? = "John"
    name = nil // 옵셔널 변수는 nil을 가질 수 있음.
    
  4. 조건문 (If-else)
    • 조건에 따른 흐름 제어.
    if age >= 18 {
        print("Adult")
    } else {
        print("Minor")
    }
    
  5. 반복문 (Loops)
    • for, while, repeat-while 등을 사용하여 반복문 구현.
    for i in 1...5 {
        print(i)
    }
    
  6. 함수 (Functions)
    • 함수를 정의하고 호출하는 방법.
    func greet(name: String) -> String {
        return "Hello, \(name)"
    }
    print(greet(name: "John"))
    
  7. 클래스와 구조체 (Classes & Structs)
    • 객체 지향 프로그래밍을 위한 클래스와 구조체.
    class Person {
        var name: String
        var age: Int
        init(name: String, age: Int) {
            self.name = name
            self.age = age
        }
    }
    
  8. 클로저 (Closures)
    • 일급 객체로 다룰 수 있는 클로저(익명 함수) 선언과 사용.
    let multiply = { (a: Int, b: Int) -> Int in
        return a * b
    }
    print(multiply(2, 3)) // 6
    
  9. 열거형 (Enums)
    • 고정된 값의 집합을 정의할 때 사용.
    enum Direction {
        case north, south, east, west
    }
    var currentDirection = Direction.north
    
  10. 패턴 매칭 (Pattern Matching)
    • switch문을 사용한 복잡한 조건 매칭.
    let number = 5
    switch number {
    case 1:
        print("One")
    case 2...10:
        print("Between 2 and 10")
    default:
        print("Other")
    }
    

이러한 문법들은 스위프트의 기본적인 구조를 이해하는 데 중요한 요소들입니다.

 

 


 

iOS 앱 신입 개발자로 취업 시 많이 질문하는 Swift 문법 관련 질문과 그에 대한 간결한 답변 10개

  1. Q: Swift에서 var와 let의 차이점은 무엇인가요?
    A: var는 값을 변경할 수 있는 변수 선언, let은 값을 변경할 수 없는 상수 선언입니다.
  2. Q: 옵셔널(Optional)란 무엇인가요?
    A: 옵셔널은 값이 있을 수도, 없을 수도 있는 변수를 나타내며, ?를 사용하여 선언합니다.
  3. Q: 옵셔널 바인딩(Optional Binding)이란 무엇인가요?
    A: 옵셔널 바인딩은 옵셔널 값이 nil이 아닌지 확인하고 안전하게 값에 접근하는 방법입니다.
  4. Q: guard문과 if문은 어떻게 다른가요?
    A: guard는 조건이 거짓일 때 즉시 빠져나가며, if는 조건이 참일 때만 실행됩니다.
  5. Q: defer문은 언제 사용하나요?
    A: defer는 코드 블록이 종료되기 전에 실행해야 할 작업을 예약할 때 사용됩니다.
  6. Q: class와 struct의 차이점은 무엇인가요?
    A: class는 참조 타입이며 상속이 가능하고, struct는 값 타입으로 복사됩니다.
  7. Q: optional chaining이란 무엇인가요?
    A: optional chaining은 옵셔널 값이 nil일 수 있는 경우, 메서드나 프로퍼티를 안전하게 호출하는 방법입니다.
  8. Q: Swift에서 func와 method의 차이점은 무엇인가요?
    A: func는 함수, method는 클래스나 구조체의 인스턴스에 속한 함수입니다.
  9. Q: Swift에서 closure와 block의 차이점은 무엇인가요?
    A: Swift의 closure는 함수처럼 동작하지만, 코드 내에서 캡처된 값들을 저장할 수 있습니다.
  10. Q: enum을 언제 사용해야 하나요?
    A: enum은 관련된 값들을 그룹화할 때 사용하며, 각 값에 이름을 부여하여 더 읽기 쉬운 코드를 작성할 수 있습니다.

 


 

 

2026년 대한민국에서 신입 웹 개발자나 백엔드 개발자로 취업을 위해 반드시 알아야 할 질문과 그에 대한 간단한 답변 정리

1. Q: RESTful API란 무엇인가요?

A: RESTful API는 HTTP를 사용해 데이터와 리소스를 주고받으며, 각 요청이 고유한 URL을 통해 처리되는 아키텍처 스타일입니다.

2. Q: HTTP와 HTTPS의 차이점은 무엇인가요?

A: HTTPS는 HTTP에 SSL/TLS 암호화가 추가된 보안 프로토콜로, 데이터를 암호화하여 안전한 통신을 제공합니다.

3. Q: 데이터베이스에서 인덱스란 무엇인가요?

A: 인덱스는 데이터베이스에서 데이터를 빠르게 검색할 수 있도록 도와주는 자료구조입니다.

4. Q: SQL과 NoSQL 데이터베이스의 차이점은 무엇인가요?

A: SQL은 관계형 데이터베이스로 구조가 정해져 있고, NoSQL은 비정형 데이터를 저장하며 확장성에 강한 데이터베이스입니다.

5. Q: MVC 아키텍처란 무엇인가요?

A: MVC는 Model-View-Controller의 약자로, 애플리케이션을 데이터(Model), 사용자 인터페이스(View), 제어 로직(Controller)로 분리하는 디자인 패턴입니다.

6. Q: 비동기 처리(Asynchronous Processing)란 무엇인가요?

A: 비동기 처리는 작업을 기다리지 않고 다른 작업을 실행하면서 결과를 나중에 처리하는 방식으로, 성능을 개선합니다.

7. Q: OAuth 2.0이란 무엇인가요?

A: OAuth 2.0은 외부 애플리케이션이 사용자 데이터를 안전하게 접근할 수 있도록 하는 인증 프로토콜입니다.

8. Q: Git과 GitHub의 차이점은 무엇인가요?

A: Git은 분산형 버전 관리 시스템이고, GitHub는 Git 저장소를 호스팅하는 플랫폼입니다.

9. Q: CORS(Cross-Origin Resource Sharing)란 무엇인가요?

A: CORS는 다른 출처의 리소스를 안전하게 공유하기 위해 브라우저가 요청을 허용할지 여부를 결정하는 보안 메커니즘입니다.

10. Q: JWT(Json Web Token)란 무엇인가요?

A: JWT는 인증 정보를 JSON 형식으로 안전하게 전송할 수 있도록 하는 토큰 기반 인증 방식입니다.

이러한 질문과 답변을 준비해두면, 신입 웹 개발자나 백엔드 개발자로 취업 준비에 많은 도움이 될 것입니다.

 

 

 


 

 

 

 

스위프트 언어

 

 

스위프트에서 옵셔널 값을 언랩(값을 추출)하는 방법

1. 옵셔널 바인딩 (Optional Binding)

옵셔널 값이 nil이 아닌 경우에만 안전하게 값을 추출하는 방법입니다.

var name: String? = "John"

if let unwrappedName = name {
    print("Name is \(unwrappedName)") // 옵셔널 값이 있을 경우 실행
} else {
    print("Name is nil") // 옵셔널 값이 nil일 경우 실행
}

2. 강제 언랩 (Forced Unwrapping)

옵셔널 값이 nil이 아니라고 확신할 때 사용하는 방법입니다. 만약 nil이면 런타임 오류가 발생합니다.

var name: String? = "John"
let unwrappedName = name!  // 옵셔널 값이 nil이 아님을 확신하고 사용
print(unwrappedName)

3. 옵셔널 체이닝 (Optional Chaining)

옵셔널 값이 nil일 수 있는 경우, 메서드나 프로퍼티에 안전하게 접근하는 방법입니다. nil이면 체인된 표현식이 nil을 반환합니다.

class Person {
    var name: String?
}

var person: Person? = Person()
person?.name = "John"

print(person?.name)  // 옵셔널 체이닝을 사용하여 안전하게 값 접근

4. guard 문을 사용한 옵셔널 바인딩

옵셔널 값을 언랩할 때, 조건이 거짓일 경우 즉시 빠져나가는 방식입니다. 보통 함수나 메서드의 초기 조건을 확인할 때 유용합니다.

func greet(name: String?) {
    guard let unwrappedName = name else {
        print("Name is nil")
        return
    }
    print("Hello, \(unwrappedName)")
}

greet(name: "John")  // "Hello, John"
greet(name: nil)     // "Name is nil"

5. Nil-Coalescing Operator (??)

옵셔널이 nil일 경우, 기본값을 제공하는 방법입니다.

var name: String? = nil
let unwrappedName = name ?? "Default Name"  // name이 nil이면 "Default Name"이 사용됨
print(unwrappedName)  // "Default Name"

6. flatMap을 사용한 옵셔널 언랩

flatMap은 옵셔널 값이 있을 때만 처리하며, 여러 개의 옵셔널 값을 함께 처리할 때 유용합니다.

var number: String? = "123"
let numberInt = number.flatMap { Int($0) }
print(numberInt)  // 옵셔널 언랩 후 값이 Int로 변환

7. map을 사용한 옵셔널 값 처리

map은 옵셔널에 포함된 값을 변환할 때 사용합니다.

var name: String? = "John"
let uppercasedName = name.map { $0.uppercased() }
print(uppercasedName)  // "JOHN"

결론

옵셔널을 안전하게 언랩하는 방법은 여러 가지가 있으며, 각각의 방법은 상황에 맞게 적절히 선택해야 합니다.

if let과 guard let은 주로 값이 nil일 가능성이 있을 때 안전하게 사용하는 방식이며, !을 이용한 강제 언랩은 값이 nil이 아님을 확신할 때만 사용해야 합니다.

 

 

 


 

 

2026년 3월 3일자 영화 순위

 

 

 

영화 진흥위원회 오픈API 주소

https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do

 

영화진흥위원회 오픈API

OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.

www.kobis.or.kr

 

 

 

 

API 키를 발급받아 JSON으로 불러오면 아래와 같이 나옵니다.

 

 

보기 좋게 나오게 하려면 pretty print 체크합니다.

 

 

 

 

JSON 

 

https://codebeautify.org/jsonviewer

 

Best JSON Viewer and JSON Beautifier Online

Online JSON Viewer, JSON Beautifier and Formatter to beautify and tree view of JSON data - It works as JSON Pretty Print to pretty print JSON data.

codebeautify.org

 

 


 

 

 

1. Optional이란 무엇인가요?

Optional은 값이 있을 수도 있고(nil), 없을 수도 있는 타입입니다.
Swift는 nil로 인한 런타임 크래시를 줄이기 위해 Optional을 사용합니다.

var name: String? = "Lee"
name = nil

Optional 타입은 사용하기 전에 반드시 언래핑해야 합니다.


2. Optional을 안전하게 언래핑하는 방법은 무엇이 있나요?

  1. if let 바인딩
  2. guard let 바인딩
  3. nil-coalescing 연산자 (??)
  4. optional chaining (?.)
  5. 강제 언래핑 (!, 권장하지 않음)
if let name = name {
    print(name)
}

let value = optionalValue ?? "default"

3. guard let과 if let의 차이는 무엇인가요?

if let

  • 특정 조건 분기에서 사용
  • 바인딩된 값은 해당 블록 내부에서만 사용 가능

guard let

  • 필수 조건 검증에 사용
  • 실패 시 반드시 함수 종료(return, break 등)
  • 바인딩된 값은 이후 전체 스코프에서 사용 가능
guard let name = name else { return }
print(name)

guard는 early exit 패턴에 적합합니다.


4. struct와 class의 차이는 무엇인가요?

구분structclass

타입 값 타입 참조 타입
상속 불가 가능
메모리 Stack Heap
복사 값 복사 참조 복사
deinit 없음 있음

Swift에서는 특별한 이유가 없다면 struct 사용을 권장합니다.


5. Value Type과 Reference Type의 차이는 무엇인가요?

Value Type

  • 데이터가 복사됨
  • 서로 독립적
  • 예: struct, enum, 기본 타입

Reference Type

  • 메모리 주소를 공유
  • 하나를 변경하면 참조하는 모든 곳에 영향
  • 예: class
var a = MyStruct()
var b = a   // 값 복사

6. ARC는 무엇이며 어떻게 동작하나요?

ARC(Automatic Reference Counting)는 객체의 참조 횟수를 자동으로 관리하여 메모리를 해제하는 시스템입니다.

  • 객체 생성 시 참조 카운트 1
  • 참조가 추가되면 +1
  • 참조가 해제되면 -1
  • 참조 카운트가 0이 되면 메모리 해제

강한 참조 순환이 발생하면 메모리 누수가 생길 수 있습니다.


7. weak과 unowned의 차이는 무엇인가요?

구분weakunowned

Optional 여부 Optional Non-optional
nil 가능성 있음 없음
안전성 더 안전 잘못 사용 시 크래시

weak

  • 참조 대상이 해제되면 자동으로 nil
  • 주로 delegate에 사용

unowned

  • 참조 대상이 항상 존재한다고 확신할 때 사용
  • 해제된 객체 접근 시 크래시 발생

8. closure에서 캡처 리스트가 필요한 이유는 무엇인가요?

클로저가 외부 객체를 강하게 참조하면 강한 참조 순환이 발생할 수 있습니다.

이를 방지하기 위해 캡처 리스트를 사용합니다.

{ [weak self] in
    self?.doSomething()
}

9. escaping closure와 non-escaping closure의 차이는 무엇인가요?

non-escaping (기본)

  • 함수 실행 중에만 사용
  • 함수 종료 전에 반드시 실행됨

escaping

  • 함수가 종료된 이후에도 실행 가능
  • @escaping 키워드 필요
  • 비동기 작업에서 사용
func fetch(completion: @escaping () -> Void)

10. protocol이란 무엇인가요?

프로토콜은 특정 기능이나 속성의 구현을 강제하는 설계 규약입니다.

protocol Drivable {
    func drive()
}

다형성을 지원하며, 의존성을 줄이고 테스트가 용이해집니다.


11. delegate 패턴은 왜 사용하나요?

Delegate 패턴은 객체 간 1:1 이벤트 전달 패턴입니다.

  • 역할 분리
  • 느슨한 결합
  • UIKit에서 널리 사용

보통 weak 참조로 선언하여 강한 참조 순환을 방지합니다.


12. async/await의 장점은 무엇인가요?

  • 코드 가독성 향상
  • 콜백 기반 비동기 처리의 복잡성 감소
  • 에러 처리가 직관적
let data = try await fetchData()

동기 코드처럼 작성할 수 있습니다.


13. actor란 무엇이며 어떤 역할을 하나요?

actor는 동시성 환경에서 데이터 경쟁을 방지하기 위한 타입입니다.

  • 내부 상태는 한 번에 하나의 작업만 접근 가능
  • 자동으로 스레드 안전 보장
actor Counter {
    var value = 0
}

멀티스레드 환경에서 안전하게 상태를 관리할 수 있습니다.


14. computed property와 stored property의 차이는 무엇인가요?

stored property

  • 값을 저장
  • 메모리 공간을 차지함
var name: String

computed property

  • 계산 결과를 반환
  • 별도의 저장 공간 없음
var fullName: String {
    firstName + lastName
}

15. Swift의 enum이 강력한 이유는 무엇인가요?

  • 연관값(Associated Value) 지원
  • Raw Value 지원
  • 메서드 및 프로퍼티 정의 가능
  • switch 문에서 모든 케이스 처리 강제
enum NetworkResult {
    case success(Data)
    case failure(Error)
}

Swift의 enum은 단순 상수가 아니라 하나의 완전한 타입으로 동작합니다.

관련글 더보기