[내일배움캠프] 251216 TIL

Bambu·2025년 12월 16일

내배캠 TIL

목록 보기
1/52

1. Step 5 - 함수의 선언과 사용 방법 이해하기

과제 1: 기본적인 함수 선언

✅ 문제: "Hello, Swift!"를 출력하는 함수를 선언하고 호출하세요.

func hello() {
	print("Hello, Swift!")
}

hello() // Hello, Swift! 출력

과제 2: 매개변수를 받는 함수 만들기

✅ 문제: 이름을 입력하면 "안녕하세요, [이름]님!"을 출력하는 함수를 작성하세요.

  • 함수 이름: greet
  • 매개변수: name(문자열)
  • 반환값: 없음(Void)
func greet(name: String) {
	print("안녕하세요, \(name)님!")
}

greet(name: "Bambu") // 안녕하세요, Bambu님! 출력

2. iOS 개발 종합반 1주차

1) 앱 생명주기

  • App Launch → Foreground & Active State → (Background State ↔︎ Returning to Foreground)
    ⇒ (): 상황에 따른 반복
상태설명
Not Running앱이 실행되지 않은 상태
Inactive실행 중이지만 사용자 입력을 받지 않는 상태
Active실행 중이며 사용자 입력을 받을 수 있는 상태
Background백그라운드에서 실행되는 상태
Suspended백그라운드에 있지만 실행이 멈춘 상태

2) UIKit(스토리보드)와 Swiftui 차이

  • 스토리보드 : 코드 기반, 스토리보드(UI) 기반 모두 가능
    → 장점: 세세한 부분까지 컨트롤 가능
    → 단점: 보드가 많아질 경우 로딩 시간 길어짐

  • Swiftui : 코드 기반
    → 장점: 여러 기능 제공으로 UI 구현이 간편
    → 단점: 세세한 부분까지 설정하기 어려움

3. API Design Guidelines

기본 원칙

  • 용도의 명확성
    : 메소드나 프로퍼티는 반복되어 호출되므로 명확하고 간결하게 이름짓는 것이 중요
  • 간결함보다는 명확성을 중점으로
    : '간결함'은 Swift의 목적이 아닌, Swift가 제공하는 기능(강력한 타입 시스템과 생략)의 부가적인 요소일 뿐임
    → 간결한 코드를 만드는 데 집착하지 말 것
  • 선언부에 주석 작성하기
    : 주석을 작성함으로써 얻는 인사이트는 훗날 도움이 된다!

이름짓기

1) 명확한 용도를 나타내기

  • 읽는 사람으로 하여금 모든 단어에 모호함이 없도록할 것
  • 불필요한 단어는 생략할 것 - 이름으로 사용된 단어는 모두 중요한 정보를 포함하고 있어야 함
  • 역할에 따른 이름을 지을 것 - 타입 이름이 아닌 해당 속성의 역할에 관련된 이름 짓기
  • 약한 타입 정보를 보완할 것 - 매개변수의 역할을 명확히 할 것
func add(_ observer: NSObject, for keyPath: String) // 선언 시점에는 파라미터 역할 명확
grid.add(self, for: graphics) // 호출 시 for이 의미하는 바가 모호함
func addObserver(_ observer: NSObject, forKeyPath path: String)
grid.addObserver(self, forKeyPath: graphics) // 매개변수 이름을 forKeyPath로 하면서 해당 매개변수가 keyPath로 쓰일 것을 알 수 있음

2) 유창한 사용을 위해 노력하기

  • 메소드와 함수 이름을 영어 문법에 맞게 이름짓기
  • 공장 메소드(factory methods)는 "make"로 시작하기

    공장 메소드(factory methods)
    객체 지향 프로그래밍에서 공장 메소드 패턴은 클래스를 특정하지 않고 객체를 만드는 패턴이다.
    공장 메소드 자체는 추상화하여 인터페이스에 선언되고, 서브클래스에 의해 객체의 구체적인 클래스 타입이 결정된다.
    참고: [Design Pattern] Factory Method

  • 생성자와 공장 메소드의 호출 시 첫 번째 아규먼트는 기본 이름과 이어지는 구문으로 작성 X
// 옳은 예시
let foreground = Color(red: 32, green: 64, blue: 128)
let newPart = factory.makeWidget(gears: 42, spindles: 14)
// 잘못된 예시
let foreground = Color(havingRGBValuesRed: 32, green: 64, and Blue: 128)
let newPart = factory.makeWidget(havingGearCount: 42, andSpindleCount: 14)
// - 아규먼트 이름들이 기본 이름(Color, .makeWidget)과 이어지고 있음
  • 함수와 메소드는 부작용(side-effect)에 따라 이름짓기
    • side-effect가 없는 경우에는 명사형으로 짓기
      x.distance(to: y)
    • side-effect가 있는 경우 동사형으로 짓기
      print(x), x.sort()
  • Boolean 메소드와 프로퍼티는 리시버(receiver)에 관한 주장문으로 작성
    x.isEmpty, line1.intersects(line2)
  • 무엇인지 설명하는 프로토콜은 명사형으로 작성 - Collection
  • 가능성에 대해 설명하는 프로토콜은 관련 접미사 사용 - able, ible, ing
    Equatable, ProgressReporting
  • 타입, 프로퍼티, 변수, 상수는 명사로 작성

3) 올바른 용어 사용하기

  • 모호한 용어 사용 피하기 - 일반적으로 널리 사용되는 의미의 단어 사용
  • 전문 용어 사용 시 확립된 의미를 지키기 - 전문 용어 용도에 맞게 사용
  • 약어 사용 피하기 - 통상적으로 사용되는 것 외에 축약어를 사용하지 말 것, 특히 전문 용어에서
  • 선례 따르기 - 이미 널리 쓰이고 있는 것을 굳이 바꿔 쓰지 말기

컨벤션

1) 일반적인 컨벤션

  • 복잡도가 O(1)이 아닌 계산 속성은 문서화하기 - 속성 접근 시 계산이 유의미한 영향을 줄 수 있음을 사람들에게 경고할 것
  • 자유 함수보다는 메소드와 속성을 사용하기

    자유 함수(Free Function
    클래스나 구조체 밖에 독립적으로 정의된 함수

  • 케이스 컨벤션 따르기
    → 타입, 프로토콜 명명시 : 대문자로 시작(UpperCamelCase)
    → 그 외 : 소문자로 시작(lowerCamelCase)
  • 메소드는 기본 이름 공유 가능 - 같은 의미를 갖거나 지역 함수로 쓰일 때

2) 아규먼트 레이블

  • 첫 번째 아규먼트가 전치사구의 일부일 때, 아규먼트 레이블을 줄 것 - 레이블은 전치사로 시작
    x.removeBoxes(havingLength: 12)
    → 두 개 이상의 아규먼트가 해당할 때는 예외 발생
// 틀린 예시
a.move(toX: b, y: c)
a.fade(fromRed: b, green: c, blue: d)
// 올바른 예시 - 함수 이름에 전치사를 포함
a.moveTo(x: b, y: c)
a.fadeFrom(red: b, green: c, blue: d)
  • 첫 번째 아규먼트가 문법적으로 완벽할 때, 라벨을 생략 - x.addSubview(y)

  • 나머지 모든 아규먼트에 라벨 지정

참고: API Design Guidelines

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

0개의 댓글