Swift๋ก ์ฝ๋ฉ ํ ์คํธ ์ค๋น, ์ธํ ํ๊ธฐ
Swift ์ ๋ ฅํ๊ธฐ
Swift๋ก ์ฝํ ๋ฅผ ์ค๋นํ๋ ค๊ณ ํ๋! ์ด๋ป๊ฒ ์ ๋ ฅ์ ๋ฐ์์ ์ฒ๋ฆฌํ์ง...?
Swift๋ก ์ ๋ ฅ์ ๋ฐ๊ธฐ ์ํด์ project ์์ฑ์, playground, app์ด ์๋ ์๋ก์ด ํฌํ๋ฆฟ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค!
์ฝํ ๋ฅผ ์ํ ํ๋ก์ ํธ ์์ฑ๋ฒ, Swift์์ ์ ์ถ๋ ฅ๋ฐ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค! ๐ป
1. ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
๋จผ์ , playground๋ sandbox์ด๊ธฐ ๋๋ฌธ์ commandline input์ ์ ๊ทผํ ์ ์์ต๋๋ค!
(*์๋๋ฐ์ค(sandbox) : ์ธ๋ถ๋ก๋ถํฐ ๋ค์ด์จ ํ๋ก๊ทธ๋จ์ด ๋ณดํธ๋ ์์ญ์์ ๋์ํด ์์คํ ์ด ๋ถ์ ํ๊ฒ ์กฐ์๋๋ ๊ฒ์ ๋ง๋ ๋ณด์ ํํ)
๋ฐ๋ผ์, project๋ฅผ ์์ฑ ์ ํ ํ๋ฆฟ์ Command Line Tool๋ก ์ ํํ์ฌ ์์ฑํฉ๋๋ค!
xcode File > New > proj > command tool
Language๋ Swift๋ก ํด์ฃผ์๊ณ ~ Next!!
์ง์~ ๋ค์๊ณผ ๊ฐ์ด main.swift ํ์ผ์ด ํฌํจ๋ ํ๋ก์ ํธ๊ฐ ์์ฑ๋ฉ๋๋ค!
์ด๊ณณ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ฐ์ตํ๋ฉด ๋ฉ๋๋ค~๐๐ป
2. ์ ๋ ฅ ๋ฐ๊ธฐ
์ฝํ ์์๋ ๋ณดํต ์ ๋ ฅ๋ฐ์ ๊ฐ๋ค์ ์ฒ๋ฆฌํ๋ ๋ฌธ์ ๋ค์ด ๋ง๊ณ , ์ ๋ ฅ๋ฐ๋ ๊ฐ๋ค์ด ๋ค์ํ๊ธฐ ๋๋ฌธ์!
LeadLine, Split, Components, map์ ์ฌ์ฉํ Swift์์ ์ ๋ ฅ๋ฐ๋ ๋ฒ๋ค์ ์๊ฐํ ๊ฒ์~๐ป
1) ๊ธฐ๋ณธ ์ ๋ ฅ๋ฐ๊ธฐ
๋จผ์ , Swift์์ ์ ๋ ฅ์ readLine() ๋ฉ์๋๋ฅผ ํตํด ์ ๋ ฅ๋ฐ์ต๋๋ค.
func readLine(strippingNewline: Bool = true) -> String?
๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ ๊ฐ์ด ์ต์ ๋์ด๊ธฐ ๋๋ฌธ์, ์์ ํ๊ฒ ์ต์ ๋ ๋ฐ์ธ๋ฉ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ฑฐ๋,
var input = readLine()
if let input = input{
print("input : \(input)")
}
๊ฐ์ ์ถ์ถํด์ค๋๋ค.
//Reading a String
var input = readLine()!
print("input : \(input)")
์ ์ฝ๋๋ก ํ ์คํธํด๋ณด๋ฉด,
๊ตณ!๐๐ป
readLine์ ์ถ๋ ฅ ๊ฐ์ String ํ์ ์ผ๋ก Intํ์ผ๋ก ๋ฐ๊ณ ์ ํ ๋๋,
๋ค์๊ณผ ๊ฐ์ด ํ ๋ณํํด์ฃผ๋ฉด ๋ฉ๋๋ค.
//Reading an Int
var inputInt = Int(readLine()!)!
//Reading a Double
var inputInt = Double(readLine()!)!
readLine์ ์ฌ์ฉํ๋ฉด ์ ๋ ฅ๊ฐ์ ์ ๋ ฅ ํ Enterํค๋ฅผ ๋๋ฅด๋ฉด ๊ทธ๋ค์ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค.
ํ์ง๋ง, ์ฝํ ์ค๋นํ์ ๋ถ๋ค์ ๋ค ์์๊ฒ ์ง๋ง....
๊ฐ์ ์ฌ๋ฌ ๊ฐ ๋ฐ์์ผ ํ๋ ๊ฒฝ์ฐ๋ค๋ ์๊ณ String์ด ์๋ ๊ฐ์ผ๋ก ๋ฐ์ ๋๋ ์๊ณ ... ๋ค์ํ ์ ๋ ฅ๊ฐ ๋ฐ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
2) ๋ฐฐ์ด๋ก ๋ฐ๊ธฐ
์ฌ๋ฌ ๊ฐ๋ค์ ๊ณต๋ฐฑ ๋จ์์ ์ ๋ ฅ์ ๋ฐ์์ ๋ฐฐ์ด๋ก ๋ณํํ๋ ํจ์์๋ ํฌ๊ฒ components, split ํจ์๊ฐ ์์ต๋๋ค.
components(separatedBy:)
func components(separatedBy separator: String) -> [String]
- parameter๋ก String์ ๋ฐ์ [String] ํํ๋ก ๋ฐํํฉ๋๋ค.
- components๋ Foundation ํ๋ ์ ์ํฌ์ ์ํด์๊ธฐ ๋๋ฌธ์, components๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Foundation์ import ํด์ผ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค!
์์ )
var inputStringArray = str.components(seperatedBy: " ")
split()
func split(separator: Character, maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true) -> [Substring]
- parameter
- separator : ์ชผ๊ฐ๋ ค๋ ๋ฌธ์ ๋จ์
- maxSplits : ์ง์ ํ ๋ฌธ์ ๋จ์๋ก ์ผ๋ง๋ ์ชผ๊ฐค์ง
- omittingEmptySubsequences : Bool๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๊ฐ์์ ๋น ์ํ์ค์ ํฌํจ ์ ๋ฌด๋ฅผ ์ค์
- parameter๋ก Character์ ๋ฐ์ [Substring] ํํ๋ก ๋ฐํํฉ๋๋ค.
- split์ Swift ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก import ํ์ X
์์ )
let input = readLine()!.split(separator: " ")
ํ์ง๋ง ์ ๋ ํจ์๋ ์ฝํ ์ ์ฐ์ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์, ์ฐ๋ฆฌ๋ map() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ Int๋ Doubleํ์ผ๋ก ํ์ ์ ๋ณ๊ฒฝํด์ค๋๋ค.
map() ํจ์๋ ๊ฐ ์์์ ์ ๊ทผํ์ฌ ์ฃผ์ด์ง ํด๋ก์ ธ์ ๋์์ ์ ์ฉ์ํต๋๋ค.
map()
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
์์) Intํ ๋ฐฐ์ด๋ก ์ ์ฅํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
let inputIntArray1 = readLine()!.split(separator: " ").map{Int($0)!}
let inputIntArray2 = readLine()!.components(separatedBy: [" "]).map { Int($0)! }
3. ์ถ๋ ฅํ๊ธฐ
์ถ๋ ฅ์ print() ํจ์๋ฅผ ์ด์ฉํฉ๋๋ค.
func print(_ items: Any..., separator: String = " ", terminator: String = "\n")
- Parameters
- items : ์ฌ๋ฌ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฃ์ ์ ์์
- separator : items๊ฐ 2๊ฐ ์ด์์ผ ๋ item ์ฌ์ด๋ง๋ค ์ถ๋ ฅํ ๊ฒ. ๋ํดํธ ๊ฐ์ ์คํ์ด์ค.
- terminator : items๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ ํ ๋ง์ง๋ง์ ๋ถ์ด๋ ์ข ๊ฒฐ์. ๋ํดํธ ๊ฐ์ ๊ฐํ('\n'). ์ฆ print()๋ ์๋ ๊ฐํ์ ํด์ค.
์์ )
let hi = "ํ์ด" // let์ ์์๋ ์๋ฏธ. swift์์ type๋ inferring(์ถ๋ก )๋จ
print("์๋
~ \(hi).")
// Prints "์๋
~ ํ์ด"
print(1.0, 2.0, 3.0, 4.0, 5.0, separator: " ... ")
// Prints "1.0 ... 2.0 ... 3.0 ... 4.0 ... 5.0"
for n in 1...5 {
print(n, terminator: "")
}
// Prints "12345"