일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 네트워크프로그래밍
- 라즈베리파이 메모리
- qualcomm ai hub
- 안드로이드
- 자바 소켓통신
- static 맴버 로딩
- Xcode
- 라즈베리파이 개발환경
- numpy
- 개방폐쇄 원칙
- 라즈베리파이 회로
- autolayout
- java 실행과정
- 라즈베리파이
- 프로그래밍뷰
- 라즈베리파이 led
- 절차 지향 언어
- 제트팩 컴포즈
- 디자인 패턴
- java 클래스 로딩
- jetpack compose
- ondevice ai
- SWIFT
- 2025 정보처리기사 필기
- ios
- rubikpi
- 라즈베리파이 os
- 객체 지향 언어 vs 절차 지향 언어 차이점
- 포트넘버
- 2025 정보처리기사
- Today
- Total
From_Base
[iOS Programming] 2. Xcode Playground & Swift 문법 알아보기 본문
이번에는 IOS 개발을 위한 언어인 Swift와, 스위프트 언어를 학습할 수 있는 공간인 플레이그라운드에 대해서 알아보자.
🌁 Swift의 배경
스위프트는 애플의 iOS와 macOS를 위한 프로그래밍 언어로 2014년 6월 2일 애플 세계 개발자 회의(WWDC)에서 처음 소개된 언어이다.
기존의 애플 OS용 언어인 Objective-C와 함께 IOS & macOS 개발 언어로써 공존할 목적으로 만들어진 언어인 것이다.
Swift는 Objective-C 에는 없었던 클로저, 다중 리턴 타입, 네임스페이스, 제네릭스, 타입 유추 등과 같은 현대 프로그래밍 언어가 갖고 있는 다양한 기능들을 많이 포함있다. so, 기존 오브젝티브 C언어에 비해서 진보되어진 언어이다.
2014년 6월 2일 애플 세계개발자 회의(WWDC)에서 최초 소개되었던 Swift버전은 ‘Swift 1.0' 이었고, 현재 2025년도 기준 ‘Swift 5.0'을 넘어 ‘Swift 6.0' 버전까지 출시되었다.
✨ Swift의 특징
스위프트는 오픈소스로 공개된 언어이며, 가장 큰 특징 3가지로는 Safe, Fast, Expressive 이다.
🔹Safe: 안정성
Swift는 프로그래밍을 하는 중에 프로그래머가 저지를 수 있는 문법적 로직적 실수를 엄격한 문법을 통하여 미연에 방지해주기에 안정성이 있다는 특징이있다. 옵셔널(Optional), guard, 에러처리(Error Handling), 강력한 타입통제 등 다양한 안정성 보장 문법들을 제공해주기에 안정적이다.
🔹 Fast: 신속성
Swift는 기존의 C, C++, Objective-C보다 개발 속도와 실행 속도가 더 빠른 언어이다.
Swift는 간결한 문법 + 빠른 실행 속도 + 자동 메모리 관리를 기반으로 더욱 빠른 개발과 실행 속도를 보장해준다.
기존 Objective-C는 동적 타입 기반이라 런타임 성능이 Swift보다 떨어졌고, C/C++는 강력하지만, 컴파일 시간이 오래 걸렸다.
so, 기존에 너무 느렸던 C, C++, Objective-C와 같은 프로그래밍 언어를 대체하려는 목적으로 출시된 언어라고도 볼 수 있다.
🔹 Expressive: 표현성
Swift는 더 사용하기 편하고 보기 좋은 문법을 구사하도록 도와준다.
매번 구문 뒤에 꼬박꼬박 붙여주어야했던 세미콜론 등 개발자 사용성에 있어서 불편한 문법들을 과감히 제거했다.
⛹🏻♂️ Xcode Playground
자 이제 Swift언어를 체험해볼 시간이다. 아무리 언어를 눈으로 많이 익힌다해도 직접 Running 시켜봐야 동작을 파악할 수 있다.
IOS개발에 돌입하기 전에 이 Swift언어를 Running 시켜보면서 언어를 훈련할 수 있도록도와주는 일종의 놀이터, 훈련장 같은 Playground라는 프로그램이 있다.
플레이그라운드는 우리가 설치한 Xcode에 내장되어있는 프로그램이다. 설치가 안되어있다면 아래 게시물을 통해 설치하기를 바란다.
2025.03.13 - [IOS] - [iOS Programming] 1. 개발환경 및 기본개념&앱 개발 실습
[iOS Programming] 1. 개발환경 및 기본개념&앱 개발 실습
📌개발환경ios 앱 개발을 하기위해선 macOS기반의 맥북, ios앱 개발도구인 xcode가 필요하다.이때 고려사항으로는 맥북의 macOS 버전&개발가능한 xcode 버전 & 실행가능한 ios버전을 고려해야한다. 안
basecoding.tistory.com
Playground는 우리가 작성한 Swift 언어를 컴퓨터 언어로 해석해주는 해석기 역할의 sw인데, 이는 마치 Interpreter 처럼 동작하나
실제로 Swift는 컴파일 언어임을 기억하자.
단순히 스위프트 언어를 학습하기 위해서 매번 Xcode를 키고 플레이그라운드를 실행시키는 과정이 번거롭다면 아래 온라인 사이트를 통해서 간단하게 스위트프 언어를 실행해볼 수 있다.
http://online.swiftplayground.run
⛹🏻♂️ Playground 실행하기
먼저 Xcode를 실행하고, 상단 탭의 File - > New -> Playground를 클릭해준다.
그 다음 iOS, macOS의 선택지 중에서 macOS를 선택 & Black를 선택해주고 Next버튼을 눌러준다.
그리고, 원하는 파일명과 파일이 저장될 경로를 입력해준 후 Create 버튼을눌러 Playground파일을 생성해준다.
🔶 Playground의 첫화면
플레이그라운드를 생성후 자동으로 입력된 코드 템플릿을 보면 Cocoa라이브러리와 간단한 인사말 문자열 변수가 생성된 것을 확인할 수 있다.
Cocoa 라이브러리는 macOS 앱 개발을 위한 라이브러리로, iOS에서는 Cocoa의 모바일 버전인 Cocoa Touch를 사용한다.
Swift의 Playground 환경에서 Cocoa 라이브러리를 불러오는 이유는, 기본적으로 macOS 환경에서 GUI 요소 및 기본 시스템 기능을 사용할 수 있도록 하기 위해서이다.
즉, Swift 플레이그라운드에서 자동 생성되는 코드 템플릿에서 import Cocoa가 보인다면, macOS용 코드가 기본으로 설정되었다는 뜻이다.
우리는 ios를 개발할건데, 왜 macOS로 Playground파일을 생성한걸까?
그 이유는 Swift 언어 자체를 익히는 데 집중하기 위해서이다.
iOS에서는 UIKit을 써야 하지만, UIKit은 화면 관리(View Controller) 같은 추가 개념이 필요해서 초반에 배우기엔 복잡할 수 있으며, macOS의 Cocoa는 기본적인 Swift 연습을 하는 데 불필요한 UI 개념이 적어서 배우기 더 간단하기 때문에, 초기 Swift언어를 배우기위해서 플레이그라운드를 이용할때는 macOS용으로 플레이그라운드를 생성해서 학습하는 것을 추천한다.
즉, iOS-specific한 개념(UI 관련 요소, ViewController 등)을 배제하고 Swift 문법 자체에 집중할 수 있도록!
⛹🏻♂️ 콘솔창에 출력해보기
내가 작성한 코드를 확인해보기 위한 간단한 방법은 print() 메서드를 활용하는 것이다.
기본 템플릿에서 제공해준 인사말 문자열을 콘솔창에 출력시켜보자.
import Cocoa
var greeting = "Hello, World!"
print(greeting)
이제 플레이그라운드를 실행시켜보면 아래와 같이 콘솔창에 인사말이 출력된다.
위 처럼 플레이그라운드에 작성된 코드를 실행하기 위해선 2가지 방법이 존재한다.
1. 아래의 이미지에 밑줄친 조그만 플레이 버튼을 클릭하면 해당 코드 구문까지의 모든 코드 구문들을 실행시켜준다.
2. 하단 콘솔창 상단에 보이는 조금 더 큰 플레이 버튼을 클릭하면 현 플레이그라운드의 모든 구문들을 실행시켜준다.
이 2번 방법이 가장 편한데, 더욱 편하게 사용하기위한 실행 단축키는 command(또는 option) + shift + Enter 키 동시입력이다.
또는, 매번 실행버튼 클릭 또는 단축키를 눌러주는게 번거롭게 느껴질 경우, 내가 코드를 입력할때마다 자동으로 컴파일 & Run 해주는 기능이있다.
바로 하단 이미지에 보이는 콘솔창 상단의 플레이버튼을 2초 정도 눌러주면 Automatically Run & Manually Run 옵션 다이얼로그창이 뜨는걸 확인할 수 있다.
이때 Manually Run 옵션은 이전처럼 수동으로 프로그램을 Run하는 방식이고,
Automatically Run 옵션이 바로 내가 코드를 입력할때마다 자동으로 컴파일 & Run 해주는 옵션이다.
이 Automatically Run 옵션을 클릭하여 플레이그라운드를 이용하는 것을 추천한다. 매우 편하다.
상단 이미지의 우측 사이드바를 보면, 현 플레이그라운드의 파일명과 스위프트 언어의 버전 선택 & 개발 플렛폼을 변경해줄 수 있다.
⭐️자동정렬 단축키
매우 유용한 단축키이다. 전체적인 코드 가독성을 높여주기에, 코딩시 command + a 키로 전체코드 선택 후, control + shift + Enter키를 동시에 눌러주면 전체코드가 자동정렬되어진다. 원하는 부분만 선택해서 control + shift + Enter키 눌러주면 해당 부분만 정렬도 가능하다.
이제 본격적으로 Swift문법에 대해서 알아보자.
이번 게시물은 스위프트의 문법에 대한 핵심 요약 기술이기에, 이제부터 기술할 스위프트 문법 및 예제에 대한 실행 결과 및 이미지는 디테일하게 첨부하지 않고 간단하게 코드와 주석문으로 나타낼 예정이다. 직접 Playground에서 실행해보며 문법을 익혀보기를 바란다.
📋 변수
데이터 값을 다루고 저장하는 역할을하는 변수이다.
Swift에서의 변수는 var 이나 let으로 선언한다.
이는 마치 JavaScript와 같아보이지만, 매우 큰 차이점이 있다.
Swift에서 var를 사용하면 일반 변수로 생성된다는 점은 같으나, let을 사용하면 상수를 만들어진다.
보통 일반 언어들에서는 const 및 final로 상수를 선언하지만 스위프트는 let이다.
아래의 예제를 보면 let으로 선언된 변수는 상수이기에 초기화 이후 값 변경시 컴파일 애러가 발생한다.
Swift는 정적 타입 언어라서, 이 코드에서 yourName을 변경하려고 하면 코드를 실행하기도 전에(컴파일 시점에서) 스위프트 컴파일러가 오류를 감지하고 에러를 발생시킨다.
var myName = 42 // 변수
myName += 42
let yourName = 42 // 상수
//yourName += 42 // error
📋 변수의 타입지정
스위프트에서 변수의 타입은 명시적/암시적으로 타입 지정이된다.
참고로 스위프트 변수의 기본 타입종류는 Int, Unit, Float, Double, String, Bool 이 있다.
변수의 타입을 명시적으로 지정할 수도 있고, 암시적으로 지정 수도 있는데, 지정하지 않으면(암시적 지정) rvalue의 타입으로 자동추론하여 지정되고, 명시적으로 타입을 지정하려면 해당 변수의 우측에 : 콜론과 지정할 타입을 기입해주면 된다.
let explicitInt: Int = 70 // 변수 explicitInt의 타입을 명시적으로 Int로 지정
let inplicitInteger = 70 // 변수 inplicitInteger의 타입은 지정되지 않았으나 rvalue인 70을 보고 Int로 지정
let implicitDouble = 70.5
let explicitDouble: Double = 70
📋 변수의 형변환
변수는 기본적으로 대입연산자 = 기준 좌항 우항 모두 동일한 타입이어야 한다.
특정 타입의 변수를 다른 타입으로 형변환 시켜주기 위해서는, 변경하고자 하는 타입의 클래스의 생성자에 변경대상 변수를 인자로 넘겨주면서 호출하여 형변환 가능하다.
ex) Int 타입 변수인 width를 String 타입으로 형변환하고자 한다면 String(width)
let label = "The width is "
let width = 94
let widthLabel = label + String(width) // String() => String의 생성자를 호출
let height = Int(”10”)
let sheight = Int(“10.5”)
let dheight = Int(10.5)
📋 문자열 내에서 간단하게 문자열로 형변환
마치 JS의 템플릿 문자열처럼, 문자열 내에서 변수 및 표현식들을 간편하게 문자열로 포함시켜 사용하고자 하는 경우
\()
위의 "\()" 구문안에 변수를 넣어주면 문자열안에 변수 값은 문자열로 변환하여 적용된다.
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit.”
📋 배열(array)
동일한 자료형의 변수들을 순차적으로 저장해두는 자료구조인 배열은 [](대괄호)를 이용하여 생성가능하다.
스위프트는 엄격한 문법 검사를 한다고 했었다. 물론 자동 타입 추론기능이 있지만, 안정성을 위해 : 콜론 뒤에 타입을 명시적으로 기술해주는 것이 좋은데, 만약 해당 배열을 정수형 자료형들을 모아두는 배열이라면 : [Int] 처럼 대괄호 안에 자료형을 써준다.
// 배열 선언
var list1: [Int] = [] // Int를 저장하는 빈 배열, 명시적
var list2 =[Int]() // Int를 저장하는 빈 배열, 암시적
var shoppingList = ["catfish", "water", "tulips", "blue paint"] // 배열초기화, 암시적
shoppingList[1] = "bottle of water" // 배열 요소 액세스
let first = shoppingList.first // shoppingList[0]
📋 딕셔너리(Dictionary)
마치 언어사전의 인덱스를 보고 편하게 해당 단어가 있는 페이지를 찾아보듯, 딕셔너리는 <key:value>로 값을 저장하는 자료구조.
키를 통해 해당 키에 대한 값을 도출해내는 구조이다.
배열과 마찬가지로 딕셔너리도 [] 대괄호안에 변수 데이터들을 관리한다.
// 딕셔너리 선언
var dict1: [String: Int] = [:] // <문자열, 값>으로 저장하는 딕셔너리, 명시적
var dict2 = [String: Int]() // <문자열, 값>으로 저장하는 딕셔너리, 암시적
var occupations = [ "Malcolm":"Captian", "Kaylee":"Mechanic", ] //딕셔너리 초기화
occupations["Jayne"] = "Public Relations”
let myjob = occupations[“kjhan”] // 에러, “kjhan”가 저장되어 있지 않기 때문
💡 제어문: if, switch, for, while
📋 흐름제어(if문)
코드 로직의 흐름을 제어하는 가장 대표적인 문법인 if이다.
if문 안의 조건은 꼭 불리언(Boolean) 표현이어야 한다. 즉, C나 Java처럼 정수값을 이용한 암시적 비교(implicit comparison)를 허용하지 않는다! 🚫
C나 Java에서는 if (score) {...}라고 하면,
- score가 0이 아니면 true
- score가 0이면 false
로 해석되었지만, 스위프트 언어에서는 정수를 Boolean 값처럼 사용할 수 없다. 오직 불리언 값만 조건문의 조건식에 올수있다. if 문 조건에 Boolean이 아닌 값을 넣을 수 없다.
so,if score {...}라고 표현하면 0과의 비교를 암시하지 않기 때문에 에러가 발생하게 된다.
해당 불리언 값이 참이면 if문 안의 로직 수행, 거짓이면 else if문으로 이동하여 해당 else if문의 조건 확인 후 이전과같이 참이면 else if 문 안의 로직 수행, 거짓이면 또 다른 else if문 으로, 모든 else if 문이 다 거짓이라면 else문을 실행하게된다.
if(…)에서 괄호를 없애고 간단하게 if … 해도 된다. 조건식에 소괄호를 없애고 그냥 if 조건식 {} 처럼 사용하는 걸 추천한다.
또한, if(condition1 && condition){ … } 인 경우 If condition1, condition{ … } 처럼 간단하게 사용해도된다.
import Cocoa
var teamScore = 0
let score = 30
if score > 50 {
teamScore = 3
} else {
teamScore = 1
}
📋 흐름제어(switch문)
if문과 마찬가지로 코드의 흐름을 제어하는 문법으로 switch문이 있다.
스위프트의 switch문에는 정수 타입 값이나 동등 비교 연산 뿐만 아니라 어떤 종류의 데이터든 사용할 수 있다는 특징이있다.
또한, 다른 언어들의 switch문과 마찬가지로 case문의 조건과 일치할 때 case문 아래에 속한 코드를 실행하는데,
break문을 써주지않아도 해당 case구문 수행후 switch문을 빠져나온다.
이후에 나오는 case문은 자동적으로 빠져 나오기 때문에 코드 끝에 break 키워드를 명시하지 않아도 되는 것이다.
이제 일일히 break를 케이스 구문 마지막에 써줄 필요가 없다. 매우 편리하다.
import Cocoa
let vegetable = "red pepper"
switch vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress":
let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"):
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Everything tastes good in soup."
}
'IOS' 카테고리의 다른 글
[iOS Programming] 5. 프로그래밍으로 View 구성&배치(프로그래밍 뷰) (0) | 2025.04.17 |
---|---|
[iOS Programming] 4-2. 오토레이아웃 보충 (0) | 2025.04.11 |
[iOS Programming] 4. 오토레이아웃(autoLayout) (0) | 2025.04.11 |
[iOS Programming] 3. 뷰와 뷰 계층 구조(View & View Hierarchy) (0) | 2025.03.27 |
[iOS Programming] 1. 개발환경 및 기본개념&앱 개발 실습 (0) | 2025.03.13 |