본문 바로가기
TIL

250622 TIL | 기능 구현 팁, switch / enum, 초기화, 패턴 등

by 23g 2025. 6. 22.

 

안녕하세요 오늘의 공부 내용 정리 시작 ~!

개발 마인드셋

  • 여러 기능이 얽혀 있더라도 하나씩 나눠서 구현해보면 결국 풀리게 됨
  • → 처음부터 전체 구조를 다 알 필요는 없음. 구현하며 감을 잡으면 됨
  • 같은 기능이라도 다양한 방식으로 구현해보는 습관이 중요→ 손발이 자유로워짐 = 구현 능력이 높아짐
  • 예: if ↔ guard, switch ↔ if else

Objective-C 함수 제약

  • @objc로 선언된 함수는 파라미터를 직접 전달할 수 없음
  • → 주로 Selector 기반으로 동작 (예: 버튼 액션 연결 등)
@objc func buttonTapped() {
    // 파라미터 없는 함수만 가능
}

코드 스타일 / 표현력

  • Depth(들여쓰기)
    • 권장: 1단계, 최대: 2단계
    • 그 이상은 함수 분리, 로직 분리해서 구조 정리해야 함
  • 조건문 표현
    • &&, , 둘 다 "그리고(and)" 조건 표현 가능
      • if a && b {}
      • guard a, b else { return }
  • switch 잘 쓰면 고수!
    • if 분기문이 많아질수록 switch로 리팩토링 고려
    • 단순한 조건문뿐 아니라 Enum의 연관값까지 활용 가능
    • 예:
    • enum Result { case success(data: String) case failure(error: Error) } switch result { case .success(let data): print(data) case .failure(let error): print(error.localizedDescription) }

Enum의 개념

  • *열거형(enum)**은 연관된 값을 그룹화하는 타입
  • 두 가지 형태가 있음:
    • 원시값(rawValue): 정수, 문자열 등 고정된 값 할당
    • 연관값(associated value): 케이스마다 추가적인 값 저장 가능

Enum의 원시값(Raw Value) vs 연관값(Associated Value)

✅ 원시값 (Raw Value)

  • enum의 각 케이스에 **기본 타입(String, Int 등)**의 값을 지정하는 방식
  • 모든 케이스가 같은 타입의 값을 가져야 함
  • rawValue로 값 접근 가능
enum Weekday: String {
    case monday = "Mon"
    case tuesday = "Tue"
}

let today = Weekday.monday
print(today.rawValue) // "Mon"

✅ 연관값 (Associated Value)

  • 케이스마다 각기 다른 타입의 값을 가질 수 있음
  • 케이스마다 값을 동적으로 저장할 수 있음
  • 패턴 매칭으로 꺼내서 사용함 (switch 많이 사용)
enum Result {
    case success(data: String)
    case failure(code: Int, message: String)
}

let response = Result.failure(code: 404, message: "Not Found")

switch response {
case .success(let data):
    print("성공: \\(data)")
case .failure(let code, let message):
    print("에러 \\(code): \\(message)")
}

📌 정리:

구분 원시값 연관값
용도 케이스마다 고정된 값 케이스마다 동적인 값 저장
타입 전체 enum에 같은 타입 케이스마다 다른 타입 가능
접근 방법 .rawValue switch로 분해

클래스 vs 구조체 초기화

  • 클래스(class)
    • 초기화 메서드 init() 직접 정의 필요
    • 생성 시 모든 저장 프로퍼티 초기화 필수
  • 구조체(struct)
    • 컴파일러가 자동으로 멤버와이즈 이니셜라이저 제공
    • → 따로 init() 정의 안해도 생성자 사용 가능
struct User {
    var name: String
    var age: Int
}
let user = User(name: "Tom", age: 30)

🧭 스토리보드 없이 앱 만들기

  • 혼자 앱을 만들 때는 스토리보드 없이 순수 코드(UI) 로 구현할 수 있어야 함→ View 생성, AutoLayout 제약, 화면 전환 모두 코드로 구현 가능
  • → UIKit 기반 코드 작성 능력 필수

MVC 패턴이란?

  • iOS 기본 설계 패턴인 MVC(Model - View - Controller)
    • Model: 데이터/비즈니스 로직 담당
    • View: 사용자에게 보여지는 UI
    • Controller: Model과 View를 연결, 이벤트 처리 담당
  • 초보 개발자는 보통 View와 Controller에 로직이 몰리는 문제를 겪음
  • → View는 가볍게 유지하고 Model과 Controller의 역할을 분리하는 것이 핵심