Swift 개발을 하다 보면 배열에 포함된 특정 요소를 삭제해야 하는 상황이 자주 발생합니다. 이 글에서는 filter 메서드를 활용하는 방법과 인덱스를 이용해 remove(at:)로 제거하는 방법, 두 가지 방식을 플레이그라운드 예제와 함께 살펴보겠습니다.
실습용 문자열 배열 만들기
먼저 테스트에 사용할 String 타입의 배열을 하나 생성하겠습니다.
var arrayOfString = ["a","b","c","f"]
이 배열에서 특정 요소를 제거하는 방법은 아래 두 가지입니다.
방법 1 — filter 메서드 사용하기
Swift의 배열은 기본적으로 filter 메서드를 제공합니다. 이 메서드는 클로저로 전달한 조건을 만족하지 않는 요소를 걸러내고, 그 결과를 새로운 배열로 반환합니다. 원본 배열은 변경되지 않으므로 기존 데이터를 유지해야 할 때 유용합니다.
let modifiedArray = arrayOfString.filter { $0 != "f" }
print(modifiedArray)
위 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

방법 2 — 인덱스(firstIndex)를 이용한 remove
두 번째 방법은 삭제하려는 요소의 위치를 찾아 직접 제거하는 방식입니다. 먼저 contains로 해당 요소가 배열에 존재하는지 확인한 뒤, firstIndex(of:)로 위치를 구하고 remove(at:)를 호출하면 됩니다. 이 방법은 원본 배열 자체를 수정한다는 점이 filter와 다릅니다.
if arrayOfString.contains("c") {
let index = arrayOfString.firstIndex(of: "c")
arrayOfString.remove(at: index!)
print(arrayOfString)
}
위 코드를 실행하면 다음 결과가 출력됩니다.

숫자 배열로 다시 실습해 보기
두 방법이 숫자 배열에서도 동일하게 동작하는지, 정수 배열을 통해 한 번 더 확인해 보겠습니다.
var arry = [1,2,6,44]
let modifiedArray = arry.filter { $0 != 6 }
print(modifiedArray)
if arry.contains(1) {
let index = arry.firstIndex(of: 1)
arry.remove(at: index!)
print(arry)
}
위 코드를 실행하면 다음과 같은 출력 결과를 얻습니다.

마무리 및 실전 팁
filter는 조건에 맞지 않는 요소를 한 번에 걸러낼 수 있어 여러 항목을 동시에 제거할 때 적합하며, 원본 배열을 보존합니다. 반면 remove(at:)는 특정 위치의 단일 요소만 제거하면서 원본 배열을 직접 수정합니다.
또한 firstIndex(of:)는 옵셔널 값을 반환하기 때문에 위 예제처럼 강제 언래핑(index!)을 사용하면 요소가 없을 때 크래시가 발생할 수 있습니다. 실제 프로젝트에서는 옵셔널 바인딩(if let)을 함께 사용하는 것이 더 안전합니다.