[iOS] Swift 기초 문법 1 πŸ¦…

OmilΒ·2021λ…„ 5μ›” 14일
1

Swift Syntax

λͺ©λ‘ 보기
1/1
post-thumbnail

<Ch.1> Swift Syntax 🦚

λͺ©μ°¨


1. Variable & Constant

2. Converting Types

3. Comment

4. Tuple

5. Booleans(μ°Έ 거짓)

6. and, or μ—°μ‚°μž

7. μ‚Όν•­ μ—°μ‚°μž

8. Scope


μŠ€μœ„ν”„νŠΈ(swift) 문법은 개인적으둜 λ³΄μ•˜μ„ λ•Œ JaveScript와 맀우 μœ μ‚¬ν•œ 점이 λ§ŽμŠ΅λ‹ˆλ‹€. ECMA5,6,7,8 μ΄ν›„μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λ¬Έλ²•μ˜ μ•„μ£Ό 쒋은 뢀뢄이 swift에 λ‹€ λ…Ήμ•„ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό λ‹€λ£¨λŠ” μ›Ή κ°œλ°œμžκ°€ swiftλ₯Ό 배웠을 λ•Œ 훨씬 빨리 배울 수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€μœ„ν”„νŠΈμ˜ μž₯점을 κ°•μ‘°ν•˜κΈ° μœ„ν•΄ 예λ₯Ό λ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.
'μ‚Όν•­μ—°μ‚°μž'λŠ” λ‘˜ λ‹€ μžˆλŠ” κ°œλ…μ΄κ³ , JaveScript의 Template literals은 swift의 'string Interpolation'(λ¬Έμžμ—΄ 보간법) κ³Ό κΈ°λŠ₯이 λ˜‘κ°™μŠ΅λ‹ˆλ‹€.

// javeScript
let a = 5
let b = 4
console.log("5 + 4 = (a + b) and 2 * 5 * 4 = (2 * a * b)")

var person = 'Mike';
var age = 28;

var output = myTag`that ${ person } is a ${ age }`;
// swift
let a = 5
let b = 4

print("5 + 4 = \(a + b) and 2 * 5 * 4 = \(2 * a * b)")

κΈ°λŠ₯은 κ°™μŠ΅λ‹ˆλ‹€. 이 밖에 λ³€μˆ˜ μƒμˆ˜ μ„€μ • λ°©λ²•μ΄λ‚˜, λ”•μ…”λ„ˆλ¦¬, λ°°μ—΄ 등이 맀우 μœ μ‚¬ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ©΄μ„œλ„ struct, private, init λ“± μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 단점을 λ³΄μ™„ν•˜κ³  효율적인 ν•¨μˆ˜κΈ°λ°˜ ν”„λ‘œκ·Έλž˜λ°μ„ κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.
JavaScript μ™€μ˜ 차이점과 곡톡점은 쀑간쀑간 ν•„μš”ν•  λ•Œλ§ˆλ‹€ 넣도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.
swif의 μž₯점은 swift 곡식 ν™ˆνŽ˜μ΄μ§€ μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
맀우 λͺ¨λ˜ν•œ μ–Έμ–΄μž…λ‹ˆλ‹€.

let κ°μžμΉ©μ΄λ¦„: String = "μŠ€μœ™μΉ©"

μœ„μ™€ 같이 객체의 이름을 λͺ¨λ‘ ν•œκ΅­μ–΄λ‘œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 졜고죠?

πŸ”₯ 1. Variable & Constant

λ³€μˆ˜μ™€ μƒμˆ˜, λ³€μˆ˜(variable)λŠ” 값을 μˆ˜μ •ν•  수 있고, μƒμˆ˜(constant)λŠ” ν• λ‹Ήλ˜μ–΄ μžˆλŠ” 값을 μˆ˜μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
각각 λ³€μˆ˜λŠ” let ν‚€μ›Œλ“œ, var ν‚€μ›Œλ“œλ₯Ό ν†΅ν•΄μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•©λ‹ˆλ‹€.

SwiftλŠ” μ•ˆμ •μ„±μ„ μœ„ν•΄μ„œ var 보닀 let 을 μœ„μ£Όλ‘œ μ‚¬μš©ν•  것을 적극적으둜 ꢌμž₯ν•˜λŠ”λ°, μ΄λŠ” ν”„λ‘œκ·Έλž¨μ΄ λ³΅μž‘ν•΄μ‘Œμ„ λ•Œ 값이 μ„œλ‘œ μΆ©λŒν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

κ°„λ‹¨ν•œ ν”„λ‘œκ·Έλž¨μ€ λͺ°λΌλ„ μƒμ†μ˜ 상속을 λ°˜λ³΅ν•˜λ‹€λ³΄λ©΄ λ©”λͺ¨λ¦¬ μ°Έμ‘° 였λ₯˜ λ“± λ‹€μ–‘ν•œ 버그에 μ‹œλ‹¬λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.
코딩을 ν•˜λ‹€λ³΄λ©΄ Xcodeκ°€ μ•Œμ•„μ„œ κ³ μ³μ£Όλ‹ˆ fix λ²„νŠΌμ„ ν™œμš©ν•΄μ„œ let μœ„μ£Όλ‘œ μ‚¬μš©ν•˜λ„λ‘ ν•©μ‹œλ‹€!

// μš©λ²•
var swift = "fantastic modern language"
let since = 2014.9

참고둜 WWDC14(Apple Worldwide developers Conference)μ—μ„œ swift 1.0은 2014λ…„ 9μ›” κ³΅κ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€!

μ•„λ¬΄νŠΌ var 둜 ν• λ‹Ήν•œ 값을 λ°”κΏ€ 수 도 μžˆμŠ΅λ‹ˆλ‹€!

swift = "swift ver 1.1"

κ·ΈλŸ¬λ‚˜ μ•„λž˜μ™€ 같이 let 으둜 ν•  λ‹Ήν•œ 값은 λ°”κΎΈλ € ν•  λ•Œ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

since = 2014.10

since λŠ” let ν‚€μ›Œλ“œλ‘œ ν• λ‹Ήλ˜μ–΄ μžˆλŠ” λΆˆλ³€ν•˜λŠ” 값이기 λ•Œλ¬Έμ— λ°”κΏ€ 수 μ—†λ‹€λŠ” 것을 의미 ν•©λ‹ˆλ‹€!
μ΄λ•ŒλŠ” κ·Έλƒ₯ Fix λ₯Ό 살짝 눌러주면 var둜 μ•Œμ•„μ„œ λ°”κΏ”μ€λ‹ˆλ‹€.
μ‹ ν†΅λ°©ν†΅ν•˜μ£ ?
μ•žμœΌλ‘œ λ§Œλ“€λ•Œ let으둜 λ§Œλ“€κ³  ν•„μš”ν•œ κ²½μš°μ—λ§Œ Fix λ₯Ό 톡해 var ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©μ‹œλ‹€.

πŸ”₯ 2. Converting Types

SwiftλŠ” 정적 타이핑 μ–Έμ–΄μž…λ‹ˆλ‹€. μ •μ μ–Έμ–΄λΌλŠ” 것은 μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 'νƒ€μž…' 즉 μžλ£Œν˜•μ„ 컴파일 λ‹¨κ³„μ—μ„œ κ²°μ •ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 둜우 레벨(low level) 언어인 C, C++, C#이 이에 ν•΄λ‹Ήν•˜κ³  값을 지정해 μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.
이λ₯Ό "Type Annotation" 이라고 ν•©λ‹ˆλ‹€.
swiftκ°€ μ§€μ›ν•˜λŠ” νƒ€μž…μ— λŒ€ν•œ 뢀뢄은 μ„Έμ„Έν•˜κ²Œ λ”°λ‘œ 닀루도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

// Swift Type Annotation
let lampOn: Bool = true
let lampOff: Bool = false

let lampName: String = "νŒŒλ¦‡νŒŒλ¦‡ μ–‘μ΄ˆλž¨ν”„"

let pie: Float = 3.141592

let age: Int = 17

μœ„μ™€ 같은 λ°©λ²•μœΌλ‘œ 선언이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
πŸ¦– μž₯점:
1. 컴파일 λ‹¨κ³„μ—μ„œ νƒ€μž…μ„ μ§€μ •ν•˜κΈ°μ— 속도가 λΉ λ₯΄λ‹€.
2. νƒ€μž…μ— λŒ€ν•œ 문제λ₯Ό Xcodeκ°€ 미리 λ°œκ²¬ν•˜κ³  μ•Œλ €μ£ΌκΈ°μ— μ•± μ œμž‘μ‹œ μ½”λ“œ μ•ˆμ •μ„±μ΄ λ†’λ‹€. νƒ€μž… κ΄€λ ¨ 문제 해결이 쉽닀.

이처럼 νƒ€μž…μ— λŒ€ν•œ κ·œμ•½μ΄ ν™•μ‹€ν•˜κΈ°μ— νƒ€μž… 끼리 μ—°μ‚°ν•˜κΈ° μœ„ν•΄μ„œλŠ” νƒ€μž… μ»¨λ²„νŒ…, νƒ€μž… λ³€ν™˜μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

let lampOn: Bool = true
let lampOff: Bool = false

let lampName: String = "νŒŒλ¦‡νŒŒλ¦‡ μ–‘μ΄ˆλž¨ν”„"


print(lampName + "κ°€ μΌœμ Έμžˆλ‚˜μš”? ---> " + String(lampOn))

μœ„μ™€ 같이 Boolean νƒ€μž…μ˜ 값을 String 으둜 μ»¨λ²„νŒ…μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. lampOn κ·ΈλŒ€λ‘œ μ‚¬μš©ν–ˆλ‹€λ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•˜μ§€μš”!
μΈν„°λΈŒλ¦¬ν„° 언어와 달리 뢈린과 μ •μˆ˜λŠ” μŠ€μœ„ν”„νŠΈμ—μ„œ ν•©μ³μ„œ ν”„λ¦°νŒ… ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

"νƒ€μž…μΆ”λ‘ : Type Inference" swiftκ°€ ꡳ이 type annotation을 μ‚¬μš©ν•˜μ§€ μ•Šκ³ λ„ 정적 타이핑 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

πŸ”₯ 3. Comment(주석)

μ£Όμ„μ²˜λ¦¬λŠ” README.md 와 같이 MarkDown 에도 많이 쓰이고 μ½”λ“œλ₯Ό μ§κ°„μ ‘μ μœΌλ‘œ μ„€λͺ…ν•˜λŠ” μ½”λ©˜νŠΈμ— μ“°μž…λ‹ˆλ‹€.

ν•œμ€„ μ£Όμ„μ‹œ
// μ΄λ³΄μ„Έμš”~ κ±°κΈ° λˆ„κ΅¬ μ—†μ†Œ! κ°€μˆ˜ 리무진 이라였~~~

μ—¬λŸ¬ 쀄 μ£Όμ„μ‹œ
/*
μ£„μ†‘ν•©λ‹ˆλ‹€...
μš”μ¦˜ κ°€μˆ˜ μ΄λ¬΄μ§„λ‹˜ λ…Έλž˜μ— λΉ μ Έμžˆμ–΄μ„œμš”.
λ…Έλž˜ μ’‹μŠ΅λ‹ˆλ‹€. κΌ­ λ“€μ–΄λ³΄μ„Έμš” !!
*/

이런 μ‹μœΌλ‘œ 주석을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€! μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ κ°™μ£ ?!

πŸ”₯ 4. Tuple

let cordinates = (2, 3)


let x = coordinates.0
let y = coordinates.1

μœ„ μ½”λ“œλŠ” μ’Œν‘œ ν‰λ©΄μ˜ x, y 좜λ ₯ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.
μ΄λ ‡κ²Œ ν•˜λ©΄ x값이 0으둜 ν‘œν˜„λ˜κ³  y 값이 1둜 ν‘œν˜„λ˜κΈ° λ•Œλ¬Έμ—, λͺ…μ‹œμ μ΄μ§€ λͺ»ν•œ 단점이 μžˆμŠ΅λ‹ˆλ‹€.
이에 'Named' tuple 을 μ‚¬μš©ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€. μ•„λž˜ μ²˜λŸΌμš”!

let coordinatesNamed = (x: 2, y: 3)

let x = coordinatesNamed.x
let y = coordinatesNamed.y

let (x, y) = coordinatesNamed

마치 μžλ°”μŠ€ν¬λ¦½νŠΈ 비ꡬ쑰화 ν• λ‹Ή(ꡬ쑰뢄해 ν• λ‹Ή)처럼 ν‘œν˜„μ΄ κ°€λŠ₯ν•˜κ²Œ 되죠!

πŸ”₯ 5. Booleans(μ°Έ 거짓)

λΆˆλ¦°μ€ μ½”λ“œνλ¦„μ„ μ œμ–΄ν•  λ•Œ 맀우 많이 μ‚¬μš©λ©λ‹ˆλ‹€. isOn ν‚€μ›Œλ“œκ°€ 이와 λΉ„μŠ·ν•œ κΈ°λŠ₯을 ν•˜μ£ !

토글이 μΌœμ§„μƒνƒœ, κΊΌμ§„μƒνƒœλ„ 뢈린 νƒ€μž…μ΄κ΅¬μš”!

let isOn: Bool = true

if isOn {
    print("---> true")
} else {
    print("---> false")
}
let yes = true
let no = false

let isOneGreaterThanTwo = 1 > 2

if isOneGreaterThanTwo {
    print("true")
} else {
    print("false")
}

let a = "o"
let b = "mil"

let isSame = a == b

이런 μ‹μœΌλ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•΄μš”!


πŸ”₯ 6. and, or μ—°μ‚°μž

μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ μ—¬λŸ¬ 언어와 λ§ˆμ°¬κ°€μ§€λ‘œ μ—”λ“œ 올 μ—°μ‚°μžλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

예)

&&: and μ—°μ‚°μž (λ‘˜λ‹€ λ§Œμ‘±ν•΄μ•Ό true λ°˜ν™˜)

||: or μ—°μ‚°μž (ν•˜λ‚˜λ§Œ λ§Œμ‘±ν•΄λ„ λœλ‹€.)

import UIKit

let girl = "Ming"
let boy = "Chan"

let isGirl = girl == "Ming"
let isFemale = true

let MingAndFemale = isGirl && isFemale

let greetingMessage: String
if MingAndFemale {
    greetingMessage = "Hello Ming!"
} else {
    greetingMessage = "Hello somebody!"
}
print("Msg: \(greetingMessage)")

πŸ”₯ 7. μ‚Όν•­ μ—°μ‚°μž

μŠ€μœ„ν”„νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 처럼 μ‚Όν•­ μ—°μ‚°μžλ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

let greetingMessage: String = MingAndFemale ? "Hello Ming!" : "Hello somebody!"
print("Msg: \(greetingMessage)")

πŸ”₯ 8. Scope

λ‘œμ»¬λ³€μˆ˜μ™€ μ „μ—­λ³€μˆ˜μ™€ λΉ„μŠ·ν•œ λ‚΄μš©μœΌλ‘œ μ½”λ“œ λΈ”λŸ­ μ•ˆμ— μžˆλŠ” 것이 ν•˜λ‚˜μ˜ scope μž…λ‹ˆλ‹€. μ „μ—­μ μœΌλ‘œ μ„€μ •λœ μ½”λ“œ λ˜λŠ” λ³€μˆ˜ 등은 λͺ¨λ“  ν•¨μˆ˜ scope μ—μ„œ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.(쓰일 수 μžˆμŠ΅λ‹ˆλ‹€.)
κ·ΈλŸ¬λ‚˜ func 같은 ν•¨μˆ˜ μ•ˆμ—μ„œ 쓰인 let, var κ°μ²΄λŠ” func μ½”λ“œ λΈ”λŸ­ 밖에 μ°Έμ‘°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.


λ‚˜λ¨Έμ§€ 닀루지 μ•Šμ€ "μ—°μ‚°μž", "eum", "struct", "static", "lazy", "optional", "protocol", "closure", "extension" λ“±λ“± 같은 뢀뢄은 λ°˜λ“œμ‹œ λ’€μ—μ„œ 닀루도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€!

도움이 λ˜μ…¨μœΌλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€. πŸ˜„

profile
μ½”λ”©ν•˜λŠ” μ‚¬μž

0개의 λŒ“κΈ€