[TIL] 프로그래밍 심화 주차 과제 트러블슈팅

박주하·2025년 6월 9일

1. isMultiple(of:) 메서드 활용


🔍 문제

// Level3.swift
func a(_ array: [Int]) -> [Int] {
    return array.enumerated()
                .filter { $0.offset % 2 == 0 }
                .map { $0.element }
}

💡 해결

func a(_ array: [Int]) -> [Int] {
    return array.enumerated()
                .filter { $0.offset.isMultiple(of: 2) }
                .map { $0.element }
}
  • .isMultiple(of:n): Swift 표준 라이브러리에서 제공하는 메서드로, 숫자가 n의 배수인지 판단하는 Bool 반환 함수
  • $0.offset % 2 == 0을 대체하여 활용함
  • 가독성 향상 및 타입 안정성을 제공함

2. 불필요한 생성자 매개변수 제거


🔍 문제

// Level6.swift
class ElectricCar: Car {
    init(brand: String, model: String, year: String, engine: Engine) {
    	super.init(brand: brand, model: model, year: year, engine: .ElectricEngine)
	}
}
  • ElectricCar 클래스에서 engine 파라미터를 전달받지만, 내부적으로 고정됨

💡 해결

class ElectricCar: Car {
    // 항상 전기 엔진으로 초기화
    init(brand: String, model: String, year: String) {
        super.init(brand: brand, model: model, year: year, engine: .ElectricEngine)
    }
}
  • engine 파라미터를 제거하여, .ElectricEngine을 명시적으로 고정함

3. 값이 바뀌지 않을 때 didSet 실행 최소화


🔍 문제

// Level4.swift
var name: String {
    didSet {                    
        print("""
            name 변경 알림
            변경 이전 값: \(oldValue)
            변경 이후 값: \(name)
            """)
    }
}
  • name 값이 동일하게 설정될 경우에도 didSet이 호출됨

💡 해결

var name: String {
    didSet {                    
        if oldValue != name {	// name 값 변경 시 메시지 출력
            print("""
                name 변경 알림
                변경 이전 값: \(oldValue)
                변경 이후 값: \(name)
                """)
        }
    }
}
  • name 값 변경 감지 조건을 추가하여, 불필요한 didSet 출력 방지
  • 변경 이전값과 이후값이 같으면 출력되지 않음

4. 함수 타입 배열 실행 이슈


🔍 문제

// main.swift
for (index, function) in [level1(), level2(), level3()].enumerated() {
    print("<필수 문제 \(index + 1)>")
    function
    print("--------------------")
}
  • level1()과 level2()는 배열을 만들 때 이미 실행되며, 배열에는 그 실행 결과인 Void가 들어감
  • function이 이미 실행 결과 값이라서 다시 실행되지 않음

💡 해결

for (index, function) in [level1, level2, level3].enumerated() {
    print("<필수 문제 \(index + 1)>")
    function()
    print("--------------------")
}
  • () 없이 배열에 담아두고, 나중에 function()으로 실행해야 함

📂 전체 코드
https://github.com/Pjh01/AdvancedAssignment

0개의 댓글