[iOS] iOS 프로그래밍 실무 1주차 정리

2025. 3. 6. 16:42·Study/iOS

 

 

 

 

 

앱 개발 기술 정리


1. Native 앱 개발

  • 안드로이드 (Android)
    • 사용 언어: Java, Kotlin
  • iOS
    • 사용 언어: Swift, Objective-C

2. Cross Platform (크로스 플랫폼)

  • 한 번 개발하여 여러 운영체제(Android, iOS)에서 실행 가능
  • React Native
  • Flutter (Dart 사용)

3. Hybrid 앱 개발

  • 웹 기술을 활용한 앱 개발 방식
  • WebView 기반 웹사이트 앱
  • 사용 기술: HTML, CSS, JavaScript
  • Apache Cordova

4. 기타 기술 및 트렌드

  • Stack Overflow 트렌드: Flutter의 인기가 React Native보다 빠르게 증가하는 추세
  • Firebase: 실시간 데이터베이스 서비스 제공
  • ReactiveX: 비동기 프로그래밍을 위한 API 제공

앱 개발 기술 비교 표

개발 방식대상 플랫폼사용 기술

Native Android Java, Kotlin
Native iOS Swift, Objective-C
Cross Platform Multi-platform React Native
Cross Platform Multi-platform Flutter (Dart)
Hybrid Web-based WebView
Hybrid Web-based HTML+CSS+JS
Hybrid Web-based Apache Cordova

 


 

 

 

프로그래밍 언어 트렌드 분석 – 어떤 언어가 뜨고, 어떤 언어가 지고 있을까?


Source: https://insights.stackoverflow.com/trends?tags=flutter%2Creact-native



프로그래밍 언어의 인기는 계속 변화합니다. 개발자 커뮤니티인 Stack Overflow의 질문 비율 변화를 분석한 그래프를 통해, 최근 몇 년간 어떤 언어가 부상하고, 어떤 언어가 쇠퇴하고 있는지 알아보겠습니다.

🔥 급상승한 프로그래밍 언어
✅ Python – 데이터 과학, AI, 웹 개발 분야에서 강세를 보이며 2010년대 중반 이후 급격히 성장
✅ JavaScript – 웹 개발의 필수 언어로 지속적인 인기를 유지
✅ Swift – iOS 개발에서 Objective-C를 빠르게 대체하며 점유율 상승

📉 감소하는 프로그래밍 언어
❌ Java, C# – 한때 강세였으나 최근 점진적으로 감소하는 추세
❌ Objective-C – Swift 등장 이후 iOS 개발에서 점차 사라지는 중
❌ PHP – 웹 개발 언어로서의 점유율이 낮아지는 경향

🔍 결론
📊 Python과 JavaScript가 가장 강력한 언어로 자리 잡고 있으며, Swift는 iOS 개발에서 필수 언어로 정착 중입니다. 반면, Java, C#, PHP 등은 점점 줄어드는 추세를 보이고 있습니다. 프로그래밍 언어를 배울 때 이러한 트렌드를 참고하면 더욱 경쟁력 있는 개발자가 될 수 있습니다. 🚀


 

 

 

MVC, MVP, MVVM 차이


iOS 개발에서 앱의 코드 구조를 정리하는 방법에는 MVC, MVP, MVVM이라는 패턴이 있어요. 이 패턴들은 코드를 깔끔하게 유지하고, 유지보수를 쉽게 하도록 도와주는 역할을 합니다.


🎭 1. MVC (Model-View-Controller) – 가장 기본적인 구조

🛠 역할

  • Model: 데이터 (예: 사용자 정보, 게임 점수)
  • View: 화면 UI (버튼, 이미지, 글씨 등)
  • Controller: 사용자의 입력을 받아서 Model과 View를 연결

📌 비유: 레스토랑

  • Model: 요리 재료 (데이터)
  • View: 요리가 완성된 접시 (사용자가 보는 화면)
  • Controller: 요리사 (주문을 받아서 요리를 만들고 손님에게 전달)

🛑 문제점:

  • Controller가 너무 많은 일을 해서 코드가 복잡해짐
  • 앱이 커질수록 유지보수가 어려워짐

🦸 2. MVP (Model-View-Presenter) – Controller를 Presenter로 변경

🛠 역할

  • Model: 데이터 저장
  • View: 화면 UI
  • Presenter: Controller 대신 View와 Model을 중간에서 조율

📌 비유: 레스토랑 (MVP 버전)

  • Model: 요리 재료
  • View: 손님이 받는 완성된 요리
  • Presenter: 웨이터 (손님의 주문을 주방에 전달하고, 요리가 나오면 손님에게 전달)

🛠 장점:

  • Controller보다 Presenter가 더 깔끔하게 역할을 분리
  • View는 Presenter가 시킨 것만 하기 때문에 코드가 정리됨

🛑 문제점:

  • Presenter 코드가 길어질 수도 있음

🤖 3. MVVM (Model-View-ViewModel) – 최신 방식, SwiftUI에서 많이 사용됨

🛠 역할

  • Model: 데이터
  • View: 화면 UI
  • ViewModel: Model에서 데이터를 받아서 가공한 후 View에 전달

📌 비유: 레스토랑 (MVVM 버전)

  • Model: 요리 재료
  • View: 손님이 받는 완성된 요리
  • ViewModel: 요리사가 알아서 맛있게 요리를 만들고, 메뉴판을 업데이트해서 손님이 주문하면 바로 가져다줌

🛠 장점:

  • View와 Model이 완전히 분리됨 → 유지보수 편리
  • SwiftUI와 잘 맞음 (데이터 변화가 UI에 자동 반영됨)

🛑 문제점:

  • 처음 배우면 조금 어려울 수 있음

📢 요약 정리 (가장 큰 차이점)

패턴 핵심 개념 특징
MVC Controller가 Model과 View를 연결 가장 기본적이지만 Controller가 복잡해짐
MVP Presenter가 Model과 View를 조율 View가 Presenter에게 의존적
MVVM ViewModel이 데이터 변화를 자동 반영 최신 방식, SwiftUI에 최적화

📊 MVC, MVP, MVVM 비교 (장단점 분석)

패턴 장점 단점
MVC 가장 기본적인 방식, 이해하기 쉬움 Controller가 너무 많은 일을 해서 코드가 복잡해짐
MVP View와 로직을 분리하여 코드가 정리됨 Presenter가 너무 커질 수 있음 (무거워짐)
MVVM 최신 방식, SwiftUI와 호환성이 뛰어남 초반 학습이 어렵고, 복잡한 앱에서는 관리가 어려울 수도 있음

📌 한 줄 정리

  • MVC: 가장 기본적인 방식 (Controller가 핵심)
  • MVP: Controller 대신 Presenter를 사용하여 더 깔끔하게
  • MVVM: 최신 방식, SwiftUI에서 활용, ViewModel이 중간에서 데이터 변화를 관리

이제 어떤 패턴을 써야 할지 이해하기 쉬울 거예요!
SwiftUI를 사용한다면 MVVM이 가장 추천되는 방식입니다. 😊


 

 

 

Swift의 Nil-Coalescing 연산자 (??)란?


?? 연산자는 옵셔널 값이 nil이면 기본값을 반환하고, nil이 아니면 옵셔널 값을 그대로 사용하는 연산자입니다.


✅ 기본 문법

let value: String? = nil
let result = value ?? "기본값"
print(result) // "기본값"
  • value가 nil이므로 "기본값"이 출력됨.
let value: String? = "Hello"
let result = value ?? "기본값"
print(result) // "Hello"
  • value에 값이 있으므로 "Hello"가 출력됨.

🛠 활용 예시

✅ 딕셔너리에서 기본값 제공

let scores = ["Alice": 90, "Bob": 85]
let score = scores["Charlie"] ?? 0
print(score) // 0 (Charlie가 없으므로 기본값 0)

✅ 함수의 옵셔널 반환값 처리

func getUserName() -> String? {
    return nil
}

let userName = getUserName() ?? "Guest"
print(userName) // "Guest"

🚀 정리

  • ?? 연산자는 옵셔널이 nil일 때 기본값을 제공하는 간단하고 유용한 기능!
  • if let보다 간결하게 옵셔널을 처리할 수 있음! 🎯
  • https://bbiguduk.gitbook.io/swift

 

 

 

📌 Swift로 특정 이름을 10번 출력하는 코드


🛠 기본 for문 사용

let name = "John"

for _ in 1...10 {
    print(name)
}

🛠 while문 사용

let name = "John"
var count = 0

while count < 10 {
    print(name)
    count += 1
}

🛠 고차 함수 repeatElement 활용

let name = "John"

for item in repeatElement(name, count: 10) {
    print(item)
}

 

 

 

📌 간단한 앱 만들기 – 3가지 방법 (Storyboard, UIView(UIKit), SwiftUI)


iOS에서는 Storyboard, UIView(UIKit 코드 기반), SwiftUI 3가지 방법으로 앱을 개발할 수 있습니다. 각각의 방식으로 "Hello, World!" 버튼을 눌렀을 때 텍스트가 변경되는 간단한 앱을 만들어보겠습니다.


✅ 1. Storyboard 사용 (GUI 기반)

Storyboard는 Xcode의 시각적인 편집기를 활용하여 UI를 만들 수 있는 방식입니다. 초보자가 쉽게 접근할 수 있습니다.

📌 1️⃣ 프로젝트 생성

  1. Xcode 실행 → "Create a new Xcode project"
  2. App 선택 → "Next"
  3. Interface: Storyboard / Language: Swift 선택 후 프로젝트 생성

📌 2️⃣ UI 만들기

  1. Main.storyboard 파일을 열고, Label과 Button을 추가합니다.
  2. Label 속성 변경: 기본 텍스트를 "Hello, World!" 로 설정
  3. Button 속성 변경: 버튼의 제목을 "변경하기"로 설정
  4. Control + 드래그(⌃ + Drag)하여 ViewController.swift에 연결
    • Label → IBOutlet (이름: helloLabel)
    • Button → IBAction (이름: changeText)

📌 3️⃣ 코드 추가 (ViewController.swift)

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var helloLabel: UILabel!

    @IBAction func changeText(_ sender: UIButton) {
        helloLabel.text = "안녕하세요, iOS!"
    }
}

📌 4️⃣ 실행 및 테스트

  • Command(⌘) + R 키를 눌러 앱 실행
  • 버튼을 누르면 Label의 텍스트가 변경됩니다.

✅ 2. UIView (UIKit 코드 기반) 사용

UIKit을 사용하면 스토리보드를 사용하지 않고 코드만으로 UI를 구성할 수 있습니다. 유지보수가 편하고 커스텀 UI를 만들기 쉽습니다.

📌 1️⃣ 프로젝트 생성

  1. Xcode 실행 → "Create a new Xcode project"
  2. App 선택 → "Next"
  3. Interface: Storyboard (사용 안 함) / Language: Swift 선택 후 프로젝트 생성
  4. SceneDelegate.swift에서 window 설정 추가
     
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    window = UIWindow(windowScene: windowScene)
    window?.rootViewController = ViewController()
    window?.makeKeyAndVisible()
}

📌 2️⃣ 코드 작성 (ViewController.swift)

import UIKit

class ViewController: UIViewController {
    let helloLabel = UILabel()
    let changeButton = UIButton(type: .system)

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white

        // Label 설정
        helloLabel.text = "Hello, World!"
        helloLabel.font = UIFont.systemFont(ofSize: 24)
        helloLabel.textAlignment = .center
        helloLabel.frame = CGRect(x: 50, y: 200, width: 300, height: 50)
        view.addSubview(helloLabel)

        // Button 설정
        changeButton.setTitle("변경하기", for: .normal)
        changeButton.frame = CGRect(x: 100, y: 300, width: 200, height: 50)
        changeButton.addTarget(self, action: #selector(changeText), for: .touchUpInside)
        view.addSubview(changeButton)
    }

    @objc func changeText() {
        helloLabel.text = "안녕하세요, iOS!"
    }
}

📌 3️⃣ 실행 및 테스트

  • Command(⌘) + R 키를 눌러 앱 실행
  • 버튼을 누르면 Label의 텍스트가 변경됩니다.

✅ 3. SwiftUI 사용 (최신 방식)

SwiftUI는 코드만으로 UI를 선언적으로 작성하는 방식입니다. UI가 코드와 동기화되어 변경 사항이 즉시 반영됩니다.

📌 1️⃣ 프로젝트 생성

  1. Xcode 실행 → "Create a new Xcode project"
  2. App 선택 → "Next"
  3. Interface: SwiftUI / Language: Swift 선택 후 프로젝트 생성

📌 2️⃣ ContentView.swift 코드 작성

import SwiftUI

struct ContentView: View {
    @State private var text = "Hello, World!"

    var body: some View {
        VStack {
            Text(text)
                .font(.largeTitle)
                .padding()

            Button("변경하기") {
                text = "안녕하세요, iOS!"
            }
            .padding()
            .background(Color.blue)
            .foregroundColor(.white)
            .cornerRadius(10)
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

📌 3️⃣ 실행 및 테스트

  • Command(⌘) + R 키를 눌러 앱 실행
  • 버튼을 누르면 Label의 텍스트가 변경됩니다.

🚀 3가지 방법 비교 (장단점 분석)

방법 장점 단점
Storyboard GUI 기반으로 쉽게 UI 구성 가능, 초보자 친화적 큰 프로젝트에서 관리가 어려움, 코드 재사용성이 낮음
UIView (UIKit 코드 기반) 커스텀 UI 제작이 자유롭고, 유지보수 용이 코드 작성량이 많아짐, UI 변경 시 번거로울 수 있음
SwiftUI 코드가 간결하고 실시간 미리보기 가능, 최신 기술 iOS 13 이상만 지원, 복잡한 UI에서는 UIKit과 혼용 필요

🎯 어떤 방식을 선택할까?

  • 초보자 → Storyboard부터 시작하여 기본 개념 익히기
  • 커스텀 UI가 많거나 유지보수 중요 → UIView (UIKit 코드 기반) 활용
  • 최신 방식, SwiftUI를 배우고 싶다면? → SwiftUI 추천

SwiftUI는 최신 방식이라 앞으로 점점 더 많이 사용될 예정이므로, UIKit과 함께 SwiftUI도 익혀두는 것이 유리합니다.


 

 

과제


1. Swift로 자기 이름 10번 출력 후 스크린샷

 

 

 

2. 네이버에서 영화 순위 검색 및 관객 수 확인

 

 

 

3. 영화진흥위원회 API를 이용하여 2025년 3월 XX일(202503XX) 박스오피스 데이터 가져오기

 

  • API 링크에 접속합니다.
  • URL에서 targetDt=202503XX 부분을 원하는 날짜로 변경합니다.
    예: targetDt=20250301 (2025년 3월 1일 데이터)
  • 브라우저에서 해당 URL을 열면 JSON 형식의 박스오피스 데이터가 표시됩니다.
  • 해당 내용을 스크린샷 찍거나 JSON 파일로 저장합니다.

 

 

4. JSON 데이터를 Beautify (가독성 있게 정리) 후 스크린샷

JSON Beautify 작업

  1. 아래 JSON Beautifier 사이트에 접속합니다.
    Code Beautify - JSON Viewer
  2. 3번에서 얻은 JSON 데이터를 복사하여 붙여넣기 합니다.
  3. "Beautify" 버튼을 클릭하여 데이터 정리합니다.
  4. 정리된 JSON 데이터를 스크린샷 찍어서 저장합니다.

 


 

저작자표시 비영리 변경금지 (새창열림)

'Study > iOS' 카테고리의 다른 글

[iOS] iOS 프로그래밍 실무 3주차 정리  (0) 2025.03.20
[iOS] iOS 프로그래밍 실무 2주차 정리  (1) 2025.03.15
[iOS] iOS 프로그래밍 기초 14주차 정리  (26) 2024.12.05
[iOS] iOS 프로그래밍 기초 13주차 정리  (2) 2024.11.28
[iOS] iOS 프로그래밍 기초 11주차 정리  (7) 2024.11.22
'Study/iOS' 카테고리의 다른 글
  • [iOS] iOS 프로그래밍 실무 3주차 정리
  • [iOS] iOS 프로그래밍 실무 2주차 정리
  • [iOS] iOS 프로그래밍 기초 14주차 정리
  • [iOS] iOS 프로그래밍 기초 13주차 정리
LUCIFER77
LUCIFER77
"타락천사 루시퍼와 함께하는 개발 공부 여정" "Journey Through Development with the Fallen Angel Lucifer"
  • LUCIFER77
    Lucifer's Dev Journey
    LUCIFER77
  • 전체
    오늘
    어제
    • ALL (35)
      • Front-end (1)
        • HTML(Mark-up Language) (0)
        • CSS(Style Sheet) (1)
        • React (0)
        • Angular (0)
        • TypeScript (0)
      • Back-end (0)
        • Python (0)
        • C# (0)
        • Kotlin (0)
        • PHP (0)
        • Node.js (0)
        • Spring (0)
        • Ruby (0)
        • Go (0)
        • Groovy (0)
      • Full-stack (0)
        • Java (0)
        • JavaScript (0)
      • DataBase (0)
      • Data Analysis (1)
        • R (0)
        • Python (0)
      • Game Development (0)
        • Unity (0)
        • Unreal Engine (0)
        • Game Development Basics (0)
      • CS(Computer Science) (2)
        • Data Structures (0)
        • Algorithms (0)
        • Computer Architecture (1)
        • Operating Systems (0)
        • Networks (1)
        • Database (0)
        • Artificial Intelligence (0)
        • Information Security & Cr.. (0)
      • VCS(Version Control Syste.. (2)
        • Git & GitHub (2)
      • Retrospective (0)
      • Study (24)
        • Coding test (0)
        • Certificate (0)
        • iOS (24)
      • ETC (5)
  • 인기 글

  • 태그

    DeveloperTools
    iosprogramming
    오블완
    티스토리챌린지
    Git
    codeeditor
    ios
    macshortcuts
    programming
    iosdevelopment
    Shortcuts
    MAC
    SwiftUI
    mobileapp
    mobileappdevelopment
    appdevelopment
    Swift
    XCode
    texteditor
    apple
  • hELLO· Designed By정상우.
LUCIFER77
[iOS] iOS 프로그래밍 실무 1주차 정리
상단으로

티스토리툴바