Swift 기본 문법 #1

32600 단어 swiftSyntaxSyntax

01. Xcode에서 프로젝트 생성하기

Xcode에서 프로젝트 생성하기

  • Xcode : 소스코드 편집, 앱 만들고 디버깅, 테스트까지 가능한 IDE
  1. Xcode 메뉴 중 [File] - [New] - [Project]

  2. macOS 탭의 Command Line Tool

  3. Project Name : 프로그램 이름 (공백, 한글, 숫자는 X)

  4. Organization Identifier : 프로그램을 만드는 조직의 주민등록번호 같은것.

    관례처럼 회사의 웹 URL 주소를 거꾸로 씀

  5. 좌측에 Project Navigator 윈도우에서 main.swift를 찾아 클릭

  6. 바꿔!

02. 함수

스위프트 언어로 f(x) = x + 2 라는 함수를 표현해본다면?

func plusTwo(x: Int) -> Int {
	return x + 2
}

boostcourse 함수 강의 그거임

03. 반복문

종류

  • for-in
  • while
  • repeat-while

앞으로 6번 이동하는 함수

for count in 1...6 {
	앞으로이동()
}

func 앞으로 이동() {
	//코드
}

for-in

  • 수지야! 라고 세 번 외치는 코드를 만들어보자
for count in 1...3 {
	print("수지야!")
}
  • 위 코드를 함수를 사용해서 구현해보자
import Foundation

func printSuji(count: Int) {
    print(count, "번째 수지야")
}

for count in 0...4 {
    printSuji(count: count)
}
  • 반복문 사용해서 구구단 구현해보기
import Foundation

func printGugu(number: Int) {
    for index in 1...9 {
        print(index * number)
    }
}

printGugu(number: 7)

04. 문자열 보간법과 print 함수

문자열 (String)

표현 :

"무자열이지리ㅣㅇ"

여러줄 표현 :

"""
여기가
여러줄 문자열이
들어올 자리지렁
"""

문자열 보간법(string interpolation)

for count in 1..3 {
	print("이번엔", count, "번째 이야앙")
}

위 코드를 좀 더 직관적으로 표현할 수 있을까?

for count in 1...3 {
	print("이번엔 \(count)번째 이야앙")
}

print 함수

  • seperator

print 함수는 기본적으로 출력 결과의 구분을 공백으로 해줌.

물론 바꿀 수도 있다!

print(1, 2, 3)
// 결과 : 1 2 3

print(1, 2, 3, seperator: "!")
// 결과 : 1!2!3
  • terminator

그럼 출력 후 자동 줄바꿈도 바꿀 수 있을까?

print("내가 좋아하는 계절 : ")
print("겨울")
//내가 좋아하는 계절 :
//겨울

print("내가 좋아하는 계절", terminator: " : ")
print("겨울")
//내가 좋아하는 계절 : 겨울

답은 yes다. terminator로 개행이 아니라 " : " 로 설정해서 출력한 코드.

💡 seperator와 terminator 매개변수는 동시 사용도 가능 단, seperator가 terminator보다 먼저 위치해야함!

05. 변수와 메모리 그리고 이름짓기

컴퓨터의 동작

CPU : 중앙 처리 장치 → 연산, 처리

RAM☆ : 주기억 장치. 단기 기억. 빠르다. 비싸서 용량 적게 쓴다.

SSD/HD : 보조 기억 장치. 장기 기억. 느리다. 싸니까 용량 크게 쓴다.

CPU ← RAM ← SSD/HD 의 순서로 처리됨.

게임의 로딩화면이 장기기억 → 단기기억으로 옮기는 과정임

swift에서 뭘 만듦 → RAM에 잠깐 기억됨 → CPU

SSD 변수, 산수 저장(램의 어떤 공간에)

변수 (variable)

  • 변수 : 값을 저장하는 공간

var {이름} = {값} : 메모리 공간에 해당 값을 갖는 변수가 생성됨

변수명은 소문자로 시작, 카멜케이스 사용

var number = 100

위 코드로 컴퓨터 메모리 어딘가에 100이라는 값이 머물러 있는 공간이 생기고, 그 공간의 이름을 number라고 지어준 것.

var name = "suji"

for count in 1...3 {
    print("\(name)\(count) 번째 폴짝!")
}

name = "sharking"

for count in 1...3 {
    print("\(name)\(count) 번째 폴짝!")
}

엇 그런데 똑같은 코드가 두 번 중복되네? 코드를 묶어서 호출해주는 함수를 쓰면 좋아보이는데...

import Foundation

func makeItHope(name: String) {
    for count in 1...3 {
        print("\(name)\(count)번째 폴짝!")
    }
}

var name = "sujilee"
makeItHope(name: name)

상수 (constant)

상수 : 값을 변경할 수 없는 공간

let {이름} = {값} : 메모리 공간에 해당 값을 갖는 상수가 생성됨

이름짓기 (Naming)

이름짓기는 매우매우매우 중요하다

초보가 a, tmp, next 등 의미없는 이름으로 짓는 것은 매우 지양해야할 자세이다.

존재의 이유가 없는 변수는 없기 때문에 그 변수의 이름은 명확해야함.

코드 한 줄에도 의미가 분명히 있어야한다.

함수의 이름도 소문자로 시작한다.

변수 : 명사로 시작 → 값을 담는 공간이기 때문

함수 : 동사로 시작 → 일을 하기 때문

06. 코드의 흐름 표현하기

순서도 (flow chart)

코드의 흐름을 쉽게 표현하는 방법

  • 고장난 전등 문제 해결하기 위한 순서도

07. 주석

주석 (comments)

야곰은 주석이 적은 코드가 좋은 코드라고 생각함.

이름만 보고 그 변수 혹은 함수가 하는 일을 명확하게 파악할 수 있도록 이름을 짓는 것이 중요

// : 한 줄 주석

/* */ : 여러줄 주석

08. Swift의 기본 데이터 타입

Swift의 기본 데이터 타입

💡 스위프트의 기본 데이터 타입은 모두 구조체를 기반으로 구현되어 있다.

모든 데이터 타입 이름은 대문자로 시작!

1️⃣ 정수 타입

  • Int : 모든 정수
  • UInt : 0을 포함한 양의 정수
import Foundation

var integer: Int = -100

var UnsignedInteger = 50

print("integer 값: \(integer), unsignedInteger 값: \(UnsignedInteger)")

integer = Int(UnsignedInteger)
print ("바뀐값 : ", integer)

2️⃣ 불리언 타입

  • Bool : true 혹은 false 만 오직 값으로 취급
import Foundation

let iLoveYou: Bool = true

let isTimeUnlimited: Bool = false

print("내가 당신을 사랑합니까? \(iLoveYou)")
print("시간은 무한합니까? \(isTimeUnlimited)")

3️⃣ 실수 타입

부동소수점을 사용하는 실수(부동소수 타입)

  • Float : 32bit의 부동 소수 표현 → 6자리의 숫자까지만 표현 가능
  • Double : 64bit의 부동 소수 표현 → 15자리의 십진수 표현 가능

잘 모르는 상황이라면 Double을 사용하자!

import Foundation

//Float이 수용할 수 있는 범위 넘어섬
//감당할 수 있는 만큼만 남김 -> 정확도 떨어짐
var floatValue: Float = 1234567890.1
//출력결과 : 1.234568e+09

let doubleValue: Double = 1234567890.1
//출력 결과 : 1234567890.1

print("floatValue: \(floatValue) doubleValue: \(doubleValue)")

floatValue = 123456.12345667
//출력결과 : 123456.125

print(floatValue)

4️⃣ 문자 타입

  • Character : "문자 하나" 유니코드 9 사용 가능
import Swift

import Foundation

let alpahbetA: Character = "A"

let commandCharacter: Character = "❤︎"
print(commandCharacter)

let 한글변수이름: Character = "가"
print(한글변수이름)

5️⃣ 문자열 타입

  • String : "문자의 나열"
import Foundation

let name: String = "sujilee"

//이니셜라이저를 사용해 빈 문자열 생성
var introduce: String = String()

//append() 메서드를 사용해 문자열 뒤에 이어붙이기
introduce.append("내 이름은")
print(introduce)

// + 연산자로도 문자열을 붙일 수 있다
introduce  = introduce + " " + name + "입니다"
print(introduce)

//count : 문자열의 문자 개수 세는 메소드
print("name의 글자 수: \(name.count)")

// 빈 문자열인지도 확인해볼 수 있다
print("introduce 빈 문자열임? : \(introduce.isEmpty)")

스위프트의 String 타입에는 기본적으로 많은 기능이 구현되어 있음.

문자열과 관련된 연산자도 많이 정의되어 있다.

아래 코드를 예시로 볼까용?

import Swift

//연산자를 통한 문자열 결함
//case1
let hello: String = "hello"
let sujilee: String = "sujilee"
var greeting: String = hello + " " + sujilee + "!"
print(greeting)
//caese2
greeting = hello
greeting = greeting + " "
greeting = greeting + sujilee
greeting = greeting + "!"
print(greeting)

//연산자를 통한 문자열 비교
//불 타입은 기본적으로 false 구나 아항
var isSameString: Bool = Bool()

isSameString = hello == "hello"
print(isSameString)

isSameString = sujilee == "yagom"
print(isSameString)

greeting = """
안녕하세요 내 이름은 이수지다. 스위프트 초고수 예정인 애송이지.
잘부탁합니디ㅏ!
"""

print(greeting)
  • String 타입 내부에 구현되어 있는 메소드
//접두어 확인 메소드. Bool타입 이용
.hasprefix("문자열")

//접미어 확인 메소드. Bool타입 이용
.hasSuffix("문자열")

//대소문자 변환 메소드
.upperCase()

.lowerCase()

//프로퍼티를 통한 빈 문자열 확인. Bool타입 이용
.isEmpty

//프로퍼티를 이용한 문자열 길이 확인
.count

09. Any, AnyObject, nil

  • 다른 정리

    • Any : Swfit의 모든 타입을 지칭하는 키워드

    • AnyObject : 모든 클래스 타입을 지칭하는 프로토콜

    • nil : 없음을 의미하는 키워드

      Any

      Any도 명백히 데이터 타입이기 때문에 다른 데이터 타입과 값을 주고받을 수 없다.

      import Foundation
      
      var someAny: Any = 100
      someAny = "어떤 타입도 수용 가능하지롱"
      someAny = 123.45
      
      //Error!
      let someDouble: Double = someAny //컴파일 오류 발생! 

      AnyObject

      AnyObject 클래스의 인스턴스만 쥐고 있을 수 있음. 인스턴스가 아니면 할당 못함

      import Foundation
      
      class SomeClass {}
      
      var someAnyObject: AnyObject = SomeClass()
      
      //Error!
      someAnyObject = 1206 //컴파일 오류 발생!

      nil

      nil은 Any나 AnyObject에 할당할 수 없음.

      //Error!
      someAny = nil       
      someAnyObject = nil
      //두 경우 모두 컴파일 오류 발생!

Any

swift의 모든 타입을 지칭하는 키워드

var someAny: Any = 100 //값에 무엇이든 올 수 있음(nil빼고)
someAny = "뭐든지 수용 가능하지렁"
someAny = 2.434
var someAny: Any = 123.45

//컴파일 오류 발생!
let someDouble: Double = someAny //Error! Any와 Double은 엄연히 다른 타입

AnyObject

모든 클래스 타입을 지칭하는 프로토콜

class SomeClass {}

var someAnyObject: AnyObject = SomeClass()
//AnyObject는 클래스의 인스턴스만 수용가능. 그게 아니라면 할당 X

//컴파일 에러 발생!
someAnyObject = 123.12

nil

'없음'을 의미하는 키워드

Any, AnyObject 타입에는 할당할 수 없다.

someAny = nil //컴파일 오류 발생!
someAnyObject = nil //컴파일 오류 발생!

10. 컴파일러

  • 컴파일 에러 : 컴파일 과정에서 발생하는 에러

    → 잘못된 코드, 컴퓨터가 읽을 수 없는 코드를 입력하면 발생

  • 런타임 에러 : 프로그램 실행 중에 발생하는 에러

좋은 웹페이지 즐겨찾기