Swift 기본 문법 #1
01. Xcode에서 프로젝트 생성하기
Xcode에서 프로젝트 생성하기
- Xcode : 소스코드 편집, 앱 만들고 디버깅, 테스트까지 가능한 IDE
-
Xcode 메뉴 중 [File] - [New] - [Project]
-
macOS 탭의 Command Line Tool
-
Project Name : 프로그램 이름 (공백, 한글, 숫자는 X)
-
Organization Identifier : 프로그램을 만드는 조직의 주민등록번호 같은것.
관례처럼 회사의 웹 URL 주소를 거꾸로 씀
-
좌측에 Project Navigator 윈도우에서 main.swift를 찾아 클릭
-
바꿔!
02. 함수
Xcode 메뉴 중 [File] - [New] - [Project]
macOS 탭의 Command Line Tool
Project Name : 프로그램 이름 (공백, 한글, 숫자는 X)
Organization Identifier : 프로그램을 만드는 조직의 주민등록번호 같은것.
관례처럼 회사의 웹 URL 주소를 거꾸로 씀
좌측에 Project Navigator 윈도우에서 main.swift를 찾아 클릭
바꿔!
스위프트 언어로 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
다른 정리
-
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 //두 경우 모두 컴파일 오류 발생!
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. 컴파일러
-
컴파일 에러 : 컴파일 과정에서 발생하는 에러
→ 잘못된 코드, 컴퓨터가 읽을 수 없는 코드를 입력하면 발생
-
런타임 에러 : 프로그램 실행 중에 발생하는 에러
Author And Source
이 문제에 관하여(Swift 기본 문법 #1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@eelijus/Swift-기본-문법-1
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
컴파일 에러 : 컴파일 과정에서 발생하는 에러
→ 잘못된 코드, 컴퓨터가 읽을 수 없는 코드를 입력하면 발생
런타임 에러 : 프로그램 실행 중에 발생하는 에러
Author And Source
이 문제에 관하여(Swift 기본 문법 #1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eelijus/Swift-기본-문법-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)