본문 바로가기
iOS프로그래밍 실무

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

by heeaeeeee 2025. 3. 6.

앱 개발 기술

 

Swift, Objective-C, Storyboard 차이점

Swift와 Objective-C는 앱을 만드는 언어이고, Storyboard는 앱의 화면을 디자인하는 도구랍니다. 이 세 가지를 잘 활용하면 멋진 iOS 앱을 만들 수 있어요

 

Swift, Objective-C, Storyboard 장단점 표로 정리

항목 장점 단점
Swift - 안전하고 빠른 코드 작성 가능 - 비교적 새로운 언어로 학습 곡선이 높을 수 있음
- 간결하고 직관적인 문법 - Objective-C와 완전한 호환성 부족
- 자동 메모리 관리(ARC) - 언어 안정성이 아직 개선 중
- 높은 성능  
- Apple의 지원 및 오픈소스  
Objective-C - 안정성과 성숙도가 높음 - 복잡한 문법
- 레거시 iOS 앱과의 호환성 - Swift에 비해 현대적 기능 부족
- 광범위한 라이브러리 지원 - 개발 속도가 상대적으로 느림
Storyboard - 시각적 편의성 - 대규모 프로젝트에서 관리 어려움
- 코드량 감소 - 버전 관리 시 충돌 발생 가능성
- 화면 플로우 파악 용이 - 재사용성 및 유지보수 어려움

 

Nil-Coalescing 연산자

let defaultName = "Guest"
var username: String? = nil

let displayName = username ?? defaultName
print(displayName) // "Guest" 출력

username = "John"
let newDisplayName = username ?? defaultName
print(newDisplayName) // "John" 출력

 

 

 

The Swift Programming Language (한국어) | Swift

Last updated 5 months ago

bbiguduk.gitbook.io

 

swift로 김희애 10번 출력하는 소스

for _ in 1...10 {
    print("김희애")
}

 

함수형 언어의 특징

// 순수 함수: 입력값이 같으면 항상 같은 결과를 반환하고, 외부 상태를 변경하지 않음
func square(_ number: Int) -> Int {
    return number * number
}

// 고차 함수: 다른 함수를 인자로 받거나 반환하는 함수
let numbers = [1, 2, 3, 4, 5, 6]

// filter: 조건에 맞는 요소만 걸러냄 (짝수만 필터링)
let evenNumbers = numbers.filter { $0 % 2 == 0 }

// map: 각 요소를 변환 (짝수를 제곱)
let squaredNumbers = evenNumbers.map(square)

// reduce: 배열의 요소를 결합 (제곱된 숫자의 합 계산)
let sumOfSquares = squaredNumbers.reduce(0, +)

print(sumOfSquares) // 출력 결과: 56

 


내가 iOS 초보 개발자야 앱을 개발하려고 해 간단한 앱을 만드는 방법을 Storyboard, Ui View, Swift Ui 3가지 방법으로 모두 알려줘

 

Storyboard, Ui View, Swift Ui 3가지 방법의 장단점

방법 장점 단점
Storyboard - 시각적으로 UI 구성 가능 - 대규모 프로젝트에서 관리 어려움
- 초보자에게 친숙함 - 버전 관리 시 충돌 발생 가능성 높음
- 빠른 프로토타이핑 - 코드 재사용성 낮음
UIKit (UIView) - 세밀한 UI 제어 가능 - 코드가 복잡해질 수 있음
- 성숙도와 안정성 높음 - UI 변경 시 즉각적인 피드백 어려움
- 광범위한 기능 지원 - 상대적으로 긴 학습 곡선
SwiftUI - 간결하고 직관적인 코드 - iOS 13 이상에서만 사용 가능
- 실시간 프리뷰 기능 - 일부 고급 기능 구현에 제약 있음
- 크로스 플랫폼 지원 - 상대적으로 커뮤니티와 자료가 적음

 

 

2

https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=68e44ef8eda13c39ec3b21bb3ce5e0d5&targetDt=20250305

{
  "boxOfficeResult": {
    "boxofficeType": "일별 박스오피스",
    "showRange": "20250305~20250305",
    "dailyBoxOfficeList": [
      {
        "rnum": "1",
        "rank": "1",
        "rankInten": "0",
        "rankOldAndNew": "OLD",
        "movieCd": "20244821",
        "movieNm": "미키 17",
        "openDt": "2025-02-28",
        "salesAmt": "775125720",
        "salesShare": "61.7",
        "salesInten": "-17794720",
        "salesChange": "-2.2",
        "salesAcc": "14517956260",
        "audiCnt": "80037",
        "audiInten": "-2445",
        "audiChange": "-3",
        "audiAcc": "1465506",
        "scrnCnt": "1815",
        "showCnt": "6531"
      },
      {
        "rnum": "2",
        "rank": "2",
        "rankInten": "16",
        "rankOldAndNew": "OLD",
        "movieCd": "20249251",
        "movieNm": "콘클라베",
        "openDt": "2025-03-05",
        "salesAmt": "94182880",
        "salesShare": "7.5",
        "salesInten": "90636880",
        "salesChange": "2556",
        "salesAcc": "138151480",
        "audiCnt": "10796",
        "audiInten": "10402",
        "audiChange": "2640.1",
        "audiAcc": "15409",
        "scrnCnt": "566",
        "showCnt": "1081"
      },
      {
        "rnum": "3",
        "rank": "3",
        "rankInten": "-1",
        "rankOldAndNew": "OLD",
        "movieCd": "20240614",
        "movieNm": "퇴마록",
        "openDt": "2025-02-21",
        "salesAmt": "84353660",
        "salesShare": "6.7",
        "salesInten": "9867280",
        "salesChange": "13.2",
        "salesAcc": "3043377240",
        "audiCnt": "8905",
        "audiInten": "914",
        "audiChange": "11.4",
        "audiAcc": "318301",
        "scrnCnt": "794",
        "showCnt": "1530"
      },
      {
        "rnum": "4",
        "rank": "4",
        "rankInten": "-1",
        "rankOldAndNew": "OLD",
        "movieCd": "20242404",
        "movieNm": "캡틴 아메리카: 브레이브 뉴 월드",
        "openDt": "2025-02-12",
        "salesAmt": "43123980",
        "salesShare": "3.4",
        "salesInten": "-23243080",
        "salesChange": "-35",
        "salesAcc": "15811113026",
        "audiCnt": "4605",
        "audiInten": "-2607",
        "audiChange": "-36.1",
        "audiAcc": "1595994",
        "scrnCnt": "543",
        "showCnt": "1101"
      },
      {
        "rnum": "5",
        "rank": "5",
        "rankInten": "-1",
        "rankOldAndNew": "OLD",
        "movieCd": "20252719",
        "movieNm": "힘내라 대한민국",
        "openDt": "2025-02-27",
        "salesAmt": "34703200",
        "salesShare": "2.8",
        "salesInten": "-6101800",
        "salesChange": "-15",
        "salesAcc": "388282040",
        "audiCnt": "3915",
        "audiInten": "-699",
        "audiChange": "-15.1",
        "audiAcc": "41533",
        "scrnCnt": "114",
        "showCnt": "210"
      },
      {
        "rnum": "6",
        "rank": "6",
        "rankInten": "-1",
        "rankOldAndNew": "OLD",
        "movieCd": "20234689",
        "movieNm": "괜찮아 괜찮아 괜찮아! ",
        "openDt": "2025-02-26",
        "salesAmt": "24158200",
        "salesShare": "1.9",
        "salesInten": "-13196900",
        "salesChange": "-35.3",
        "salesAcc": "652925600",
        "audiCnt": "2778",
        "audiInten": "-1548",
        "audiChange": "-35.8",
        "audiAcc": "74251",
        "scrnCnt": "392",
        "showCnt": "561"
      },
      {
        "rnum": "7",
        "rank": "7",
        "rankInten": "0",
        "rankOldAndNew": "NEW",
        "movieCd": "20241389",
        "movieNm": "보더랜드",
        "openDt": "2025-03-05",
        "salesAmt": "15550600",
        "salesShare": "1.2",
        "salesInten": "15550600",
        "salesChange": "100",
        "salesAcc": "15550600",
        "audiCnt": "2371",
        "audiInten": "2371",
        "audiChange": "100",
        "audiAcc": "2371",
        "scrnCnt": "209",
        "showCnt": "388"
      },
      {
        "rnum": "8",
        "rank": "8",
        "rankInten": "0",
        "rankOldAndNew": "OLD",
        "movieCd": "20252058",
        "movieNm": "첫 번째 키스",
        "openDt": "2025-02-26",
        "salesAmt": "11696800",
        "salesShare": "0.9",
        "salesInten": "-601620",
        "salesChange": "-4.9",
        "salesAcc": "285966400",
        "audiCnt": "1889",
        "audiInten": "175",
        "audiChange": "10.2",
        "audiAcc": "36395",
        "scrnCnt": "154",
        "showCnt": "254"
      },
      {
        "rnum": "9",
        "rank": "9",
        "rankInten": "0",
        "rankOldAndNew": "OLD",
        "movieCd": "20244762",
        "movieNm": "서브스턴스",
        "openDt": "2024-12-11",
        "salesAmt": "17822500",
        "salesShare": "1.4",
        "salesInten": "1541400",
        "salesChange": "9.5",
        "salesAcc": "5263171980",
        "audiCnt": "1810",
        "audiInten": "135",
        "audiChange": "8.1",
        "audiAcc": "540423",
        "scrnCnt": "182",
        "showCnt": "225"
      },
      {
        "rnum": "10",
        "rank": "10",
        "rankInten": "0",
        "rankOldAndNew": "OLD",
        "movieCd": "20241093",
        "movieNm": "그 시절, 우리가 좋아했던 소녀",
        "openDt": "2025-02-21",
        "salesAmt": "15780300",
        "salesShare": "1.3",
        "salesInten": "1170000",
        "salesChange": "8",
        "salesAcc": "1314952900",
        "audiCnt": "1807",
        "audiInten": "212",
        "audiChange": "13.3",
        "audiAcc": "148074",
        "scrnCnt": "229",
        "showCnt": "308"
      }
    ]
  }
}

 

3

 

 

iOS 강의 자료 참고했습니다