[내일배움캠프 14일차] 클로저(Closure) 실습 문제

NH·2025년 3월 20일

내일배움캠프

목록 보기
14/62
post-thumbnail

📌 Today I Learned (TIL) - 클로저 실습

오늘은 클로저(Closure) 를 실습하며 클래스를 활용하는 방법을 학습했다.


🔍 클로저(Closure)란?

클로저(Closure) 는 코드에서 전달 및 사용할 수 있는 독립적인 기능 블록으로, 다른 함수나 변수에 저장될 수도 있고, 함수의 매개변수로 전달될 수도 있다.
Swift에서 일급 객체(First-Class Citizen) 이므로 변수, 상수에 저장되거나 함수의 매개변수로 전달 가능하다.

🔹 클로저의 기본 형태

{ (매개변수 목록) -> 반환타입 in
    실행할 코드
}
  • in 키워드 : 매개변수 및 반환타입 선언과 실행 코드 블록을 구분하는 역할

💻 클로저 실습 문제

문제 요구 사항

  1. Test 클래스를 생성
  2. 클로저 변수 생성
    • private 접근제어자 사용
    • 변수명: myClosure
    • 매개변수 및 리턴 타입: Void
  3. 클로저 변수를 설정하는 함수 생성
    • 해당 함수를 사용하여 클로저 변수 설정 시 "MyClosure를 설정"을 출력
  4. 계산 함수 생성
    • 매개변수: Int 타입의 숫자 2개, 연산을 담당하는 클로저
    • 연산 클로저는 Int 2개를 받아 Void를 반환
  5. 계산 함수 실행
    • 덧셈 및 뺄셈 연산 수행
    • 클로저 축약문법 사용하여 호출

📝 내가 작성한 코드

class Test {
    private var myClosure: (() -> Void) = {} // 클로저 변수 생성

    func setMyClosure(_ closure: @escaping (() -> Void)) {
        self.myClosure = closure // 클로저 변수 설정
        myClosure() // 설정한 클로저 실행
    }

    func calculator(_ num1: Int, _ num2: Int, _ operate: (Int, Int) -> Void) {
        operate(num1, num2) // 클로저 실행
    }
}

// 클래스 인스턴스 생성
let test = Test()

// 클로저 설정
test.setMyClosure { print("MyClosure를 설정") }

// 덧셈 연산 (클로저 축약 전)
test.calculator(10, 20, { (num1: Int, num2: Int) -> Void in
    print(num1 + num2)
})

// 덧셈 연산 (클로저 축약 후)
test.calculator(10, 20) { print($0 + $1) }

// 뺄셈 연산
test.calculator(10, 20) { print($0 - $1) }

📋 피드백 및 개선 사항

튜터님께 받은 피드백을 통해 불필요한 코드 정리self 사용 습관을 익힐 수 있었다.

개선 포인트

  1. init이 필요 없음
    • myClosure초기값을 이미 가지고 있기 때문에 굳이 init을 만들 필요 없음
  2. 클래스 프로퍼티를 할당할 때 self를 명시적으로 사용하는 습관
    • self.myClosure = closure처럼 명확하게 작성하면 가독성이 좋아짐
  3. 클로저 실행 코드를 제거
    • myClosure()를 할당과 동시에 실행할 필요 없음

😎 피드백 반영 후 개선된 코드

class Test {
    private var myClosure: (() -> Void) = {} // 클로저 변수 생성

    func setMyClosure(_ closure: @escaping (() -> Void)) {
        self.myClosure = closure // self 사용하여 클로저 설정
    }

    func calculator(_ num1: Int, _ num2: Int, _ operate: (Int, Int) -> Void) {
        operate(num1, num2) // 클로저 실행
    }
}

// 클래스 인스턴스 생성
let test = Test()

// 클로저 설정
test.setMyClosure { print("MyClosure를 설정") }

// 덧셈 연산 (클로저 축약 전)
test.calculator(10, 20) { (num1: Int, num2: Int) in
    print(num1 + num2)
}

// 덧셈 연산 (클로저 축약 후)
test.calculator(10, 20) { print($0 + $1) }

// 뺄셈 연산
test.calculator(10, 20) { print($0 - $1) }

✍️ 배운점과 느낀점

  • 클로저의 기본 개념타입 명시 방법을 배웠다.
  • 하지만 아직 헷갈려서 조금 더 연습이 필요하다.
  • 클로저 축약 문법을 활용하여 코드 가독성을 높이는 방법을 배웠다.
  • 축약하는 법에 익숙하지 않아서 아직 잘 모르겠다.
  • self 사용 습관을 들이며 코드 스타일을 개선하는 중요성을 배웠다.
  • 불필요한 코드 제거를 통해 보다 효율적인 코드 작성하는 법에 대해 배웠다.

오늘의 실습을 통해 내가 클로저에 대해 얼마나 모르는지 알 수 있었다.
그로 인해서 이번 실습 때 생각보다 고생을 좀 했다!
그래도 클로저 활용 능력이 향상된 느낌이라 기분이 좋다!

profile
iOS 개발 블로그

0개의 댓글