이 영역을 누르면 첫 페이지로 이동
Daily Growth 블로그의 첫 페이지로 이동

Daily Growth

페이지 맨 위로 올라가기

Daily Growth

Loving you is the reason I live. That’s why every day is precious, a step toward my dreams and you.

Swift 클로저 : 함수보다 강력한 이름 없는 함수

  • 2025.05.04 07:34
  • IT

Swift를 배우다 보면 “클로저(Closure)”라는 낯선 문법을 만나게 된다. 처음에는 생김새도 낯설고, 함수랑 뭐가 다른지도 헷갈릴 수 있다.
하지만 걱정할 필요 없다. 클로저는 결국 함수와 아주 비슷하며, 익숙해지면 오히려 더 유연한 코드를 짤 수 있도록 도와주는 도구이니까(:

1. 클로저란?

간단히 말해, 클로저는 이름이 없는 함수다.
함수처럼 값을 받고 결과를 반환할 수 있으며, 코드 블록 자체를 변수에 저장하거나 다른 함수에 넘길 수 있다.
Swift에서는 함수도 사실 이름이 붙은 클로저일 뿐이다.

 

2. 클로저 문법

Swift에서 클로저는 다음처럼 생겼다:

{ (매개변수 목록) -> 반환타입 in
    실행 코드
}

예시:

{ (a: Int, b: Int) -> Int in
    return a + b
}

이 클로저는 a와 b라는 두 개의 정수를 받아서, 더한 값을 반환한다.

 

3. 클로저는 왜 특별할까? — 일급 객체(First-Class Citizen)

Swift에서 클로저는 “일급 객체”다. 이건 무슨 뜻일까?

즉, 클로저는 아래와 같은 행동이 모두 가능하다:

  • 변수나 상수에 저장할 수 있다.
  • 함수의 인자로 넘길 수 있다.
  • 함수의 반환값으로 받을 수 있다.

이런 특징 덕분에 클로저는 매우 유연하게 사용된다. 복잡한 로직도 간결하게 정리할 수 있다.

4. 클로저 간단 예제

아래 코드를 보자:

let sum: (Int, Int) -> Int = { (a: Int, b: Int) in
    return a + b
}

let result = sum(3, 5)
print(result) // 8

이게 무슨 뜻일까?

  • sum이라는 상수는 “정수 두 개를 받아서 정수를 반환하는” 클로저 타입이다.
  • -> Int는 이 클로저가 Int를 반환한다는 의미다.
  • 중괄호 {} 안에 실제 동작 코드가 들어있다. return a + b
  • sum(3, 5)를 실행하면 8이 나온다.

정리하자면: sum은 더하기 계산기를 담은 변수인 셈이다!

 

5. 클로저를 함수 인자로 넘기기

클로저는 다른 함수의 전달인자로 넘겨줄 수 있다.

예를 들어:

func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
    return method(a, b)
}

이 함수는 세 개의 인자를 받는다:

  1. a, b: 정수 두 개
  2. method: 두 정수를 계산해주는 클로저

그리고 실제로 이렇게 사용할 수 있다:

let add = { (a: Int, b: Int) in return a + b }
let subtract = { (a: Int, b: Int) in return a - b }
let multiply = { (a: Int, b: Int) in return a * b }

print(calculate(a: 10, b: 5, method: add))      // 15
print(calculate(a: 10, b: 5, method: subtract)) // 5
print(calculate(a: 10, b: 5, method: multiply)) // 50

 

 

6. 클로저를 직접 함수에 작성할 수도 있다

클로저를 굳이 변수로 만들지 않고, 바로 함수 인자로 넣을 수도 있다.

let result = calculate(a: 10, b: 2, method: { (x: Int, y: Int) in
    return x / y
})
print(result) // 5

여기서 { (x: Int, y: Int) in return x / y } 이 부분이 바로 클로저이다.
이 클로저는 x와 y를 받아서 나눈 값을 반환하는 것이다.
calculate 함수 안에서는 이 클로저를 호출해서 계산한다.

이렇게 클로저를 함수 인자로 직접 작성하면, 한 번 쓰고 끝낼 계산 등을 간결하게 표현할 수 있다.

 

7. 비동기 작업과 클로저

클로저는 특히 비동기 작업에 자주 사용된다.
그럼, “비동기”는 또 뭘까?

💡 비동기란?

비동기(asynchronous)는 “지금 당장 결과가 안 나오더라도, 기다리지 않고 다음 일을 먼저 하는 방식”을 말한다.

예: 서버에서 데이터를 받아오는 데 3초가 걸린다고 해보자.
그동안 앱이 멈추면 안 되니까, 데이터를 요청하고 → 다음 코드를 먼저 실행하게 만드는 게 “비동기”다.

print("1. 요청 시작")
요청 보내기 (클로저로 처리)
print("2. 화면 계속 보여주기")

데이터가 도착하면 나중에 클로저가 실행되며 알려준다.

Swift에서는 버튼 클릭, 네트워크 통신, 애니메이션 등 다양한 비동기 작업에서 클로저를 사용해 “작업이 끝나면 뭘 할지”를 정해준다.

 

8. 클로저 요약

 

정의 이름 없는 함수
문법 { (매개변수) -> 반환타입 in 실행코드 }
저장 변수/상수에 저장 가능
전달 함수 인자로 전달 가능
반환 함수에서 클로저를 반환 가능
비동기 네트워크 응답 등 작업 완료 후 실행할 코드 전달 가능

 

클로저는 Swift에서 가장 강력하고 자주 쓰이는 개념 중 하나다.
익숙해지면 코드가 훨씬 더 간결하고 유연해질 것이다✨.

반응형

'IT' 카테고리의 다른 글

Swift 프로퍼티 정리: 처음부터 끝까지 이해하는 계산 속성  (0) 2025.05.05
Swift 클로저 고급편: 단축 인자, 암시적 반환, 후행 클로저, map, filter  (0) 2025.05.04
Model Context Protocol(MCP)? LLM 생태계를 재정의하는 새로운 표준  (0) 2025.05.02
클래스 vs 구조체/열거형, 무엇이 다를까? Swift 값 타입과 참조 타입 정리  (0) 2025.05.02
Swift enum 제대로 이해하기: rawValue부터 메서드까지  (0) 2025.04.30

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Swift 프로퍼티 정리: 처음부터 끝까지 이해하는 계산 속성

    Swift 프로퍼티 정리: 처음부터 끝까지 이해하는 계산 속성

    2025.05.05
  • Swift 클로저 고급편: 단축 인자, 암시적 반환, 후행 클로저, map, filter

    Swift 클로저 고급편: 단축 인자, 암시적 반환, 후행 클로저, map, filter

    2025.05.04
  • Model Context Protocol(MCP)? LLM 생태계를 재정의하는 새로운 표준

    Model Context Protocol(MCP)? LLM 생태계를 재정의하는 새로운 표준

    2025.05.02
  • 클래스 vs 구조체/열거형, 무엇이 다를까? Swift 값 타입과 참조 타입 정리

    클래스 vs 구조체/열거형, 무엇이 다를까? Swift 값 타입과 참조 타입 정리

    2025.05.02
다른 글 더 둘러보기

정보

Daily Growth 블로그의 첫 페이지로 이동

Daily Growth

  • Daily Growth의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 분류 전체보기 (426) N
      • Design History (69)
      • IT (129) N
      • Typography (13)
      • UX • UI Design (10)
      • Money (62)
      • Health (53)
      • Words (6)
      • Reading (19)
      • English (64)

    나의 외부 링크

    • lody.design
    • lody.canada
    • lody.study
    • lody.diary

    정보

    self-improvement의 Daily Growth

    Daily Growth

    self-improvement

    블로그 구독하기

    • 구독하기
    • 네이버 이웃 맺기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. Copyright © self-improvement.

    티스토리툴바