본문으로 건너뛰기

데이터 구조의 중요성

새롭게 만들어진 강력한 프로그래밍 언어다. WWDC 2014에서 처음 소개된 이후 빠르게 성장해왔다. 이 책에서는 스위프트를 활용한 다양한 데이터 구조와 알고리즘에 대해 설명한다.

데이터 구조의 중요성

데이터 구조는 프로그래밍에 있어 효율적이며, 확장 가능하고 유지 보수성이 높은 시스템을 만들기 위한 주요 요소 중 하나로, 시스템에서 데이터의 공유, 유지, 정렬, 검색 등 데이터 활용을 위한 데이터의 체계화 방법이다.

어떤 유형의 시스템을 개발하더라도 모든 어플리케이션의 토대는 결국 데이터로 귀결된다. 그렇기에 개발 시 데이터를 체계화 한 데이터 구조에 대해 잘 이해해야 할 필요가 있다.

데이터 구조 + 알고리즘 = 프로그램

데이터의 추상화abstraction 기법은 데이터가 지닌 복잡성을 관리하기 위한 기술이다. 데이터 구조를 디자인할 때 데이터 추상화 기법을 사용하는데, 이는 개발자가 어플리케이션을 만들려고 할 때 내부의 상세한 구현 방식을 몰라도 되도록 하기 위함이다. 내부의 복잡한 구현 방식을 드러내지 않음으로써 개발자는 알고리즘이 제공하는 인터페이스의 활용에 더욱 집중할 수 있으며, 데이터 구조는 프로그램 내부에서 구현하게 된다.

데이터 구조와 알고리즘은 문제를 해결하기 위한 패턴이라 할 수 있으며, 이를 잘 활용하면 매우 어려운 문제를 간단하면서도 세련되게 해결할 수 있다.

우리는 왜 데이터 구조의 구현에 대해 배워야 할까? 데이터 구조에 대한 명확한 이해 없이는 다양한 데이터 타입의 장단점을 알 수 없고, 어떤 상황에서 어떤 데이터 구조를 사용해야 할지 판단할 수 없으며, 결국 이는 프로그램을 구현하려 할 때 문제가 되기 때문이다.

데이터 구조와 알고리즘에 대한 깊고 넓은 지식을 얻게 되면, 해결이 어려운 문제에서 패턴 또는 실마리를 찾을 수 있다. 이와 같은 패턴을 발견하는 데 익숙해지면 일상적인 개발 업무 시 즉각적으로 활용할 수 있는 다양한 해법 또는 어플리케이션을 떠올릴 수 있게 될 것이다.

스위프트 REPL

스위프트 컴파일러는 Read-Eval-Print-Loop, 혹은 줄여서 REPL라고 부르는 커맨드라인 인터페이스에서 제공되는 것이며, 루비나 파이썬 같은 인터프리터 언어를 경험해보았다면 커맨드라인 개발 환경이 익숙할 것이다. 해당 개발 환경에서 스위프트 명령어를 입력하면, 컴파일러는 즉시 코드를 실행하고 결과를 도출한다. 본인의 개발환경 OS가 mac이라면 다음 명령어를 실행해보자.

먼저 아래와 같이 swift를 실행한다.

xcrun swift // swift 실행

실행 결과는 다음과 같다.

Welcome to Swift!

Subcommands:

swift build Build Swift packages
swift package Create and work on packages
swift run Run a program from a package
swift test Run package tests
swift repl Experiment with Swift code interactively

Use `swift --help` for descriptions of available options and flags.

Use `swift help <subcommand>` for more information about a subcommand.


이제 swift 명령어를 통해 repl를 실행한다.

swift repl // repl 환경 실행

실행 결과는 다음과 같다.(실행 버전마다 차이가 있다.) 이제 swift 코드를 실행해볼 수 있다.

Welcome to Apple Swift version 5.9.2 (swiftlang-5.9.2.2.56 clang-1500.1.0.2.5).
Type :help for assistance.
1>

라인 별로 코드가 실행되며, 명령어의 실행 결과는 자동으로 포맷되어 각자의 타입으로 표시되며 활용할 수 있다.

  1> var myName = "coffee"
myName: String = "coffee"
2> print("Hello \(myName)!")
Hello coffee!
3> Int(30000)
$R0: Int = 30000 // 자동으로 변수 생성 및 할당
4> print($R0)
30000