[내일배움캠프] 251229 TIL - 배열, 딕셔너리, 컬렉션 뷰

Bambu·2025년 12월 29일

내배캠 TIL

목록 보기
8/52

1. 피그마(Figma)

팀 프로젝트 UI 구상을 위해 피그마를 처음 사용해보았다.

어떻게 하는지는 전혀 모르고 UI만 그려보았는데 버튼을 눌렀을 때 어떤 화면으로 전환이 된다거나, 코드와 연계할 수 있다거나하는 기능이 많아 익숙해지면 다양하게 활용 가능할 것 같다.

캠프에서 제공되는 강의에 피그마 관련도 있어 프로젝트 틈틈히 수강할 예정이다.

2. iOS 개발 종합반 3주차 수강

1) 배열, 딕셔너리 심화와 데이터 모델 정의

가. 배열 심화

📚 요소 추가하기
: += 연산자
배열에 하나 이상의 요소 추가 시 사용 가능

var numbers = [1, 2, 3]
numbers += [4, 5]
print(numbers) // [1, 2, 3, 4, 5]

📚 정렬하기
: sorted(by:) 혹은 sort(by:)를 사용

let numbers = [3, 1, 4, 1, 5, 9]
let descendingNumbers = numbers.sorted(by: >) // 내림차순
print(descendingNumbers) // [9, 5, 4, 3, 1, 1]

let ascendingNumbers = numbers.sorted(by: <) // 오름차순
print(ascendingNumbers) // [1, 1, 3, 4, 5, 9]
func sorted(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> [Self.Element]
  • areInIncreasingOrder
    첫 번째 아규먼트가 두 번째보다 앞에 와야한다면 '참'을 반환 - 해당 매개변수는 어느 아규먼트가 앞서야하는지를 정하는 분류 조건

  • 반환값
    areInIncreasingOrder이 '참'인 요소를 순서대로 담은 배열

나. 딕셔너리 심화

📚 기본값 제공
: 키가 존재하지 않을 경우 기본값 설정 가능

var studentScores = ["Alice": 90, "Bob": 85, "Charlie": 88]

let davidScore = studentScores["David", default: 0]
print(davidScore) // 0

print(studentScores) // ["Alice": 90, "Bob": 85, "Charlie": 88]

-> 기본값 제공은 존재하지 않는 키 조회 시 nil값이 나오지 않게 할 뿐, 기존 딕셔너리를 변경시키지 않음!

📚 기존 값 수정
: 이미 존재하는 키에 새로운 값 할당 시 값이 변경

studentScores["Alice"] = 95
print(studentScores) // ["Alice": 95, "Bob": 85, "Charlie": 88]

updateValue(_:forKey:)
: 값이 존재하면 기존 값을 반환하고 값을 변경하고, 없으면 nil을 반환하고 값을 변경

let oldValue = studentScores.updateValue(89, forKey: "Bob")
print(studentScores) // ["Alice": 95, "Bob": 89, "Charlie": 88]
// : "Bob"의 값이 85 -> 89로 변경

print(oldValue) // Optional(85)
// : "Bob"의 기존 값인 85를 반환 (옵셔널 타입이므로 옵셔널로 반환)

다. 데이터 모델링

📚 데이터 모델의 중요성

  • 데이터의 일관성 유지
    : 데이터를 구조화하여 중복을 최소화하고, 정합성 유지 가능
    정합성: 데이터·시스템·설명 등이 서로 모순 없이 일관되게 일치하는 상태
  • 효율적인 데이터 관리

📚 MVC에서 데이터 모델의 역할

  • 데이터 저장 : 데이터를 구조화하여 저장
  • 데이터 처리: 데이터를 가공하거나 비즈니스 로직 적용
  • 데이터 변경 감지 : 값 변경 시 컨트롤러에 알림
  • 외부 데이터 관리 : API, 데이터베이스와 통신하여 데이터를 가져오거나 저장

2) 테이블 뷰로 데이터 목록 만들기(기초, 커스텀 셀)

테이블 뷰 데이터 동적 업데이트

📚 데이터 추가하기

@objc func addItem() {
	let newItem = "새 항목 \(items.count + 1)"
    items.append(newItem) // items(데이터) 추가
    
    let newIndexPath = IndexPath(row: items.count - 1, section: 0)
    tableView.insertRows(at: [newIndexPath], with: .automatic) // 테이블뷰 UI에 데이터가 추가됨을 알림
}

items의 수와 indexPath의 수가 일치해야 함! - items.append 전에 tbleView.insertRows(at:)을 하면 해당 열에 데이터가 없으므로 크래시 발생

📚 데이터 삭제하기

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        items.remove(at: indexPath.row) // items 배열에서 먼저 삭제
        tableView.deleteRows(at: [indexPath], with: .automatic) // 테이블뷰 UI 삭제
    }
}

📚 데이터 수정하기

func updateItem(at index: Int, with newValue: String) {
    items[index] = newValue
    let indexPath = IndexPath(row: index, section: 0)
    tableView.reloadRows(at: [indexPath], with: .automatic)
}

⇒ 위 3가지 부분 갱신(insert, delete, reloadRows)가 reloadData()(전체 갱신)보다 성능 면에서 유리

💡reloadData() 사용 시점

  • 배열 값 변경 시
  • 외부에서 데이터를 받아온 후 (eg. 서버에서 응답을 받은 후)
  • 필터링, 정렬, 전체 재구성이 일어났을 때
  • 여러 셀을 한꺼번에 갱신할 때

3. 회고

본 캠프 첫 날이라 팀원들과 프로젝트를 구상하고 이야기 나눈다고 크게 학습을 했다고 할 만한건 없었다. 아직 생성밖에 안하긴 했지만 처음으로 github을 활용해 팀 프로젝트를 할 수 있음에 신기했다. 앞으로의 과정동안 합심하여 무사히 수료할 수 있기를!

profile
안녕하세요, iOS 개발을 공부하고 있는 Bambu입니다. (프로필: Swifticons)

0개의 댓글