Swift에서 날짜(Date) 객체를 생성하려면 DateComponents()를 활용하는 것이 일반적입니다. 날짜 객체를 만드는 방법은 크게 두 가지가 있으며, 이 글에서는 시뮬레이터 대신 Playground를 사용해 코드를 간편하게 테스트해 보겠습니다.
날짜를 생성하려면 DateComponents와 Calendar를 함께 사용합니다. 먼저 DateComponents를 생성하는 두 가지 방법부터 살펴보겠습니다.
방법 1: 기본 이니셜라이저 사용하기
첫 번째 방법은 DateComponents의 기본 이니셜라이저(default initializer)를 사용해 날짜 구성 요소를 한 번에 지정하는 방식입니다.
var date = DateComponents.init(
calendar: <#T##Calendar?#>,
timeZone: <#T##TimeZone?#>,
era: <#T##Int?#>,
year: <#T##Int?#>,
month: <#T##Int?#>,
day: <#T##Int?#>,
hour: <#T##Int?#>,
minute: <#T##Int?#>,
second: <#T##Int?#>,
nanosecond: <#T##Int?#>,
weekday: <#T##Int?#>, weekdayOrdinal: <#T##Int?#>, quarter: <#T##Int?#>,
weekOfMonth: <#T##Int?#>, weekOfYear: <#T##Int?#>, yearForWeekOfYear: <#T##Int?#>)
이 방식은 캘린더 유형, 시간대(timeZone), 연도, 월, 일 등 날짜 생성에 필요한 거의 모든 정보를 파라미터로 전달합니다. 각 파라미터는 옵셔널(Optional)로 선언되어 있기 때문에, 필요한 값만 선택적으로 지정하고 나머지는 생략할 수도 있습니다.
방법 2: 프로퍼티 할당 방식 사용하기
두 번째 방법은 DateComponents 인스턴스를 먼저 생성한 뒤, 필요한 속성에 값을 하나씩 할당하는 방식입니다.
var date = DateComponents() date.day = 5 date.month = 6 date.year = 1993
코드가 간결하고 가독성이 뛰어나기 때문에 실제 개발 현장에서는 이 방식이 더 널리 사용됩니다. 위 예제에서는 1993년 6월 5일로 날짜 구성 요소를 설정했습니다.
DateComponents를 Date 객체로 변환하기
위 두 가지 방법 중 하나로 DateComponents를 생성했다면, 이제 이를 실제 Date 객체로 변환해야 합니다. 변환은 현재 캘린더(Calendar.current)의 date(from:) 메서드를 통해 수행합니다.
let cal = Calendar.current
let newDate = cal.date(from: date)
print("the date is", newDate!)
위 코드를 실행하면 아래와 같이 지정한 날짜가 출력됩니다.

추가 팁: 옵셔널 바인딩으로 더 안전하게 처리하기
cal.date(from:) 메서드는 유효하지 않은 날짜 구성 요소가 전달될 가능성이 있어 옵셔널 Date를 반환합니다. 위 예제에서는 강제 언래핑(!)을 사용했지만, 실제 앱 개발에서는 옵셔널 바인딩(if let)을 사용하는 것이 훨씬 안전합니다.
if let newDate = cal.date(from: date) {
print("the date is", newDate)
} else {
print("날짜 생성에 실패했습니다.")
}
이처럼 DateComponents와 Calendar를 조합하면 특정 연·월·일은 물론 시간대나 시·분·초까지 세밀하게 제어하는 날짜 객체를 손쉽게 만들 수 있습니다.