구글 안티그래비티 완전 분석 — 모델·요금제·CLI 총정리

🚀 구글 안티그래비티(Antigravity) 완전 분석 구글이 2025년 11월 Gemini 3와 함께 공개한 에이전트 퍼스트(agent-first) IDE 안티그래비티는 Claude·GPT·Gemini를 한 도구에서 골라 쓰는 멀티모델 코딩 환경이다. 이 글에서는 ① 지원 모델과 요금제별 사용량의 실체, ② 실사용자 평가, ③ 구글의 방향성, ④ Claude Code와의 비교·연계, ⑤ CLI( agy )로 직접 쓰는 법까지 다섯 갈래를 차례로 정리한다. 자료 간 충돌이 있는 지점은 한쪽으로 단정하지 않고 양쪽을 모두 살려 표기했다. 📅 기준 시점: 2026년 6월 · 프리뷰 단계 정보로 수치는 변동 가능 1. 안티그래비티란 무엇인가 — 기초 정리 안티그래비티는 2025년 7월 구글이 24억 달러 규모 라이선스 계약 으로 영입한 전 Windsurf 팀이 설계를 주도했다. VSCode를 포크한 위에 자율 에이전트 오케스트레이션 계층을 얹은 구조다. 2026년 5월 Google I/O에서 발표된 안티그래비티 2.0 은 데스크탑 앱과 함께 공식 CLI agy 를 처음 공개하며 기존 Gemini CLI의 공식 후계자 자리를 확정했다. 핵심 정체성은 단순 코드 자동완성이 아니라 병렬 에이전트 오케스트레이션 이다. 여러 에이전트가 동시에 — 하나는 API, 하나는 테스트, 또 하나는 프론트엔드 — 작업을 나눠 진행하고, 각 에이전트는 계획·테스트 결과·스크린샷·영상을 담은 Artifact 를 남긴다. "사람이 한 줄씩 승인"하는 방식이 아니라 "에이전트들이 일을 마치고 사람이 사후 검수"하는 모델이다. flowchart TD A([사용자 작업 지시]) --> B[에이전트 A API 구현] A --> C[에이전트 B 테스트 작성] A --> D[에이전트 C UI 생성] B --> E[Artifact 계획·결과·영상] C --> E D --> E...

[Swift] Chapter01.Tour - 2

Functions and Closures

함수를 선언하기 위해서 func 을 사용한다. func의 뒤에 적히는 함수의 호출명과 괄호안에는 전달인자(argument)를 통해서 함수를 호출한다. 함수의 반환 유형에서 매개변수의 이름과 유형을 구분하려면 -> 을 사용한다.

func greet(person: String, day: String) -> String {
    return "Hello \(person), today is \(day)."
}
greet(person: "Bob", day: "Tuesday")


기본적으로 function은 매개변수의 이름을 전달인자의 label로 사용한다. 하지만 매개변수 앞에 사용자 지정 전달인자의 label을 작성하거나, _를 사용해서 사용자 지정 label을 사용하지 않을 수 있다.

func greet(_ person: String, on day: String) -> String {
    return "Hello \(person), today is \(day)."
}
greet("John", on: "Wednesday")


함수에서 여러 값을 반환하는 등의 동작을 하려면 튜플(tuple)을 사용한다. 튜플의 요소는 이름이나 번호로 참조 할 수 있다.

Tuple
여러 개의 값을 하나의 복합으로 묶을 수 있는 type. 각각의 값은 서로 다른 type일 수도 있고, 이름을 붙일 수도 있다.

let person = ("Tommy", 30)
print(person.0) // "Tommy"
print(person.1) // 30

let person = (name: "Tommy", age: 30)
print(person.name) // "Tommy"
print(person.age) // 30
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
    var min = scores[0]
    var max = scores[0]
    var sum = 0

    for score in scores {
        if score > max {
            max = score
        } else if score < min {
            min = score
        }
        sum += score
    }

    return (min, max, sum)
}
let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9])
print(statistics.sum)
// Prints "120"
print(statistics.2)
// Prints "120"


함수는 중칩될 수 있고, 중첩된 함수는 외부 함수에서 선언된 변수에 access 할 수 있다. 중첩된 함수를 사용하면 길거나 복잡한 코드를 간결하게 줄일 수 있다.

func returnFifteen() -> Int {
    var y = 10
    func add() {
        y += 5
    }
    add()
    return y
}
returnFifteen()


함수는 first-class type이다. 즉, 함수의 반환(return) 할때 다른 함수를 반환할 수 있다.

func makeIncrementer() -> ((Int) -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}
var increment = makeIncrementer()
increment(7)


함수는 다른 함수를 arguments로 받을 수 있다.

func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}
func lessThanTen(number: Int) -> Bool {
    return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition: lessThanTen)


함수는 closer의 형태중 하나다. 클로저는 나중에 실행 할 수 있는 코드 블록을 의미하는데, 클로저 내부의 코드는 클로저가 만들어졌던 범위 안의 변수나 함수에 접근이 가능하다. 클로저를 사용할때는 이름 없이 중괄호 {}로 코드를 감싸면 클로저를 만들 수 있다. in 키워드를 사용해서 매개변수와 반환 타입을 본문과 구분 할 수 있다.

numbers.map({ (number: Int) -> Int in
    let result = 3 * number
    return result
})
func makeIncrementer(by amount: Int) -> () -> Int {
    var total = 0
    let incrementer: () -> Int = {
        total += amount
        return total
    }
    return incrementer
}

let incrementByTwo = makeIncrementer(by: 2)
print(incrementByTwo()) // 2
print(incrementByTwo()) // 4
let greeting = {
    print("Hello!")
}
greeting() // 실행


클로저를 간결하게 작성하기 위한 옵션이있다. 클로저의 유형을 다 알고있는 경우 매개변수의 유형, 반환 유형 또는 둘 다를 생략 할 수 있다. 단일 statement의 클로저는 암시적으로 단일 statement 값을 반환한다.

아래의 예시에서 number in 3 * number 는, number in return 3 * number를 생략한 것이다.
let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)
// Prints "[60, 57, 21, 36]


이름대신 매개변수를 번호로 참조 할 수 있는데, 매우 짧은 클로저에 유용하다. 함수의 마지막 인수로 전달된 클로저는 괄호 바로 뒤에 나타날 수 있다. 클로저가 함수의 유일한 인자인 경우 괄호를 생략할 수 있다.

let sortedNumbers = numbers.sorted { $0 > $1 }
print(sortedNumbers)
// Prints "[20, 19, 12, 7]

 

댓글

이 블로그의 인기 게시물

Vim 9.2 릴리즈 총정리: 더 빠르고 강력해진 텍스트 편집의 제왕

폐쇄망 SoC 설계자를 위한 가볍고 빠른 Vim 최적화 가이드

에이전트 시대를 위한 터미널 cmux 가이드: 설치부터 AI 활용까지