콘텐츠로 건너뛰기
Home » [Cocoa] 키밸류 코딩 – 집합 연산

[Cocoa] 키밸류 코딩 – 집합 연산

Key-Value 코딩에서 특정한 프로퍼티를 가리키는 키패스의 요소 중에 배열이나 집합(NSSet)과 같은 컬렉션 컨테이너가 있다면, 해당 집합에 대한 개수, 합계, 평균등의 집합 연산을 수행한 결과를 얻도록 하는 키패스 연산자가 있다. 잘 활용하면 코딩의 양을 많이 줄일 수 있다.

키패스는 키 이름을 “.“을 사용해서 연결하는데, 집합 형태의 객체를 가리키는 이름 뒤에 @ 으로 시작하는 연산 종류를 언급하고 다시 뒤에 계산할 속성을 지정할 수 있다. 예를 들어서 “students.@avg.mathScore“와 같이 표기하면 students 라는 배열의 각 요소들에 대해서 mathScore 속성을 취한 후 이를 평균한 값을 얻게 된다. 원소의 개수를 세는 .@count 는 우항 연산자가 없다. “students.@count“는 집합 students의 원소의 개수를 지칭한다.

# @avg
NSNumber *transactionAverage = [transactions valueForKeyPath:@"@avg.amount"];

# @count
NSNumber *numberOfTransactions = [transactions valueForKeyPath:@"@count"];

# @sum
NSNumber *totalAmount = [transactions valueForKeyPath:@"@sum.amount"];

# @max / @min
NSNumber *maximumAmount = [transactions valueForKeyPath:@"@max.amount"];

# @distinctUnionOfObjects / Arrays / Sets
NSArray *payees = [transactions valueForKeyPath:@"@distinctUnionOfObject.payee"];