DADAHAE's Log
비싼 장난감 가지고 노는 중 (❁´▽`❁)*✲゚*
[TIL] 22-09-21: Swift 사전 지식(데이터타입/변수/상수/튜플)
22-09-21 수요일
2주차

 

1교시

Swift

스위프트 책을 추천해드립니다~

도서추천

Swift 문법

 

스위프트 프로그래밍

스위프트를 제대로 이해하자라는 콘셉트를 충실히 지키고자 스위프트의 기본 개념과 함께 함수형 및 프로토콜 지향 프로그래밍 패러다임을 이용하는 스위프트 프로그래밍 방법론을 소개한다.

www.aladin.co.kr

SwiftUI

 

핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍

SwiftUI는 물론 애플리케이션 개발과 출시를 위한 모든 과정을 담았다. 기초적인 내용부터 시작하여 iOS 개발 환경을 구축하는 데 필요한 과정은 물론, 스위프트 언어에 대한 학습과 테스트를 위한

www.aladin.co.kr

 

 

스윗한 SwiftUI

애플이 오랜 시간 준비하여 야심차게 내놓은 차세대 UI 프레임워크인 SwiftUI의 핵심 특성과 개념에 대해 쉽고 빠르게 접근하도록 도와주는 길잡이 역할을 한다. 챕터별로 단계를 밟아 학습할 수

www.aladin.co.kr

 

Programming book

  • MS의 연구소가 있는데 거기 중에 석학 중 석학이신 분이 쓴 책이다.
  • 어떤 결과가 나온다는 것은 알겠는데.. 이면에는 무엇인지 모른다. 그럴 때 꼭 추천합니다~
  • 한마디로 컴퓨터가 어떻게 작동하는지 모르겠다, 코딩이라는 것을 해본적이 없다! 하는 분에게 적극적으로 추천하는 책이다.
    클린 코드 Clean Code
  • 그 외비전공이라면 한번쯤은 꼭 읽어보는 것을 추천한다.
    여기서는 Java로 코드를 설명해준다.
    개발자가 되고 싶으세요? IT 입문 지식을 말하다
 

개발자가 되고 싶으세요? IT 입문 지식을 말하다

후배 개발자가 입사하면 사실 무엇부터 가르쳐야 할지 막막하다. 멘토링을 하고 싶어도 어디서부터 해야 할지. 그래서 10년차 선배 개발자들이 뭉쳤다. 컴공과 출신의 한아름 인턴이 좌충우돌

www.aladin.co.kr

 

클린 코드 Clean Code

로버트 마틴은 이 책에서 혁명적인 패러다임을 제시한다. 그는 오브젝트 멘토(Object Mentor)의 동료들과 힘을 모아 ‘개발하며’ 클린 코드를 만드는 최상의 애자일 기법을 정제해 책 한 권에 담았

www.aladin.co.kr

 

Swift Playgrounds

굉장히 쉽다.

한번 심심할 때 해보자~ (라고 했는데 다음 날 모든조들이 모여 문제를 풀어보았다ㅏ..)

바이트와 친구들

 

2교시

우리가 작성한 Swift 코드의 운명

🦁 SBS 다큐 ‘샌드위치 코딩’ 영상 시청

코드에서 앱까지

1️⃣ 소스코드(Source code, swift file)

  • 음식의 재료
  • 컴퓨터 프로그램을 (사람이 읽을 수 있는) 프로그래밍 언어로 기술한 글
  • 하나의 파일로 결과를 내는 것은 어렵다. 여러개의 파일을 나눠서 만들고 이들을 조합하여 처리하는 것이 일반적이다.
  • 프로그래밍 언어
    • 기계어(기계가 읽을 수 있음) - 어셈블리어(사람이 그래도~~ 어느정도~~ 읽을 수 있듬)

2️⃣ [컴파일, Compile]

  • 원시 코드에서 목적코드로 옮기는 과정

3️⃣ 목적코드(Object Code)

 

4️⃣ [링크, Link]

  • 컴파일러의 결과물인 목적코드들을 최종 실행 가능한 실행파일로 만들기 위해 연결, 병합 해주는 작업
  • 여러 페이지가 링크가 걸려서 하나로 볼 수 있는 상태, 하나의 책이 되었다고 생각하자.

5️⃣ 실행파일(Excutable Code)

 

6️⃣ [빌드, Build]

  • 소스 코드 파일을 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정을 말하거나 그에 대한 결과물
  • 컴파일, 링크를 합쳐서 소스코르르 실행파일로 만드는 일련의 과정을 ‘빌드’라고 한다.

터미널에서는 여기까지만 익혀두어도 상관이 없다. 그러나 우리는 앱이다. 다운로드 앱 받아두면… 사용자의 코드만으로는 이해하기 힘든 것들이 있다.

아이콘 이미지, 소리, 텍스트 등의 파일은 앱 안에 포함되어 있다. 이런 것들은 코드가 아니라 리소스 파일이다. 리소스 파일도 실행파일과 합쳐주는 과정이 필요하다.

그러므로 Xcode의 빌드가 해주는 역할은 더 확장된다.

 

7️⃣ [패키징, Packaging]

  • 실행파일 + 리소스파일 ⇒ 실행파일

 

빌드는 내 친구 :]

 

 

3교시

몇 가지 사전 지식

프로그래밍 언어의 공통 사항

  • 타입
  • 변수
  • 조건문 (if)
  • 자료구조 (배열, Map, Queue 등)
  • 반복문 (for, while등)

타입

  • 어떤 정보가 저장되는 형식
    • 우리가 우체국가면 보낼 박스나 봉투를 준비한다.
    • 이때 그 박스나 봉투가 ‘타입’이라고 볼 수 있다. 그 형식에 맞춰서 우체국에서는 과금을하고 배송 준비를 한다.
  • 숫자와 문자로 크게 나뉘며, 숫자도 정수형과 소수형으로 나뉜다.

변수

  • 타입(박스의 종류)으로 지정한 값(value, 박스의 내용물)을 저장하는 ‘저장소’

연산자

  • 간단한 더하기, 빼기, 곱하기, 나누기부터 복잡합 게산을 간단한 기호로 처리하는 것들
  • 키보드의 특수기호들은 원래 다 용도가 있다.

조건문

  • if
  • 변수에 지정한 값이 특정 조건에 맞는지를 확인하기 위한 문장
  • 비교하는 것이라고 생각하자.

반복문

  • for, while
  • 반복적으로 작업을 처리할 필요가 있을 때 사용한다.

자료구조

  • 배열, map, queue …
  • 기본적인 숫자와 문자는 한 개의 값을 저장하지만, 값이 여러 개일 경우 처리할 방법이 필요하다.
  • 공통적인 자료구조를 미리 만들어 놓아 활용하게 만든 자료구조들이 있다.
  • 우체국에서 우편물과 택배를 어떻게 분류할까. 크기/우변번호 … 어쨌든 처리하기 편하게 만들어 둔다.

 

컴퓨터의 생각

컴퓨터는 0과 1로만 생각한다. 애플이 만든 반도체, 칩에도 스위치(0,1)이 수백몇개가 있다. 그래서 비싸다…

그래서 0과 1이 무엇을 하는데?

최초의 컴퓨터인 ‘애니악’의 역할은 전쟁 중에 수학계산(탄도계산, 수학계산)에 사용되었다.

위 그림에 있는 스위치를 올리고 내리고 하면 숫자로 입력된다.

우리는 그것을 2진수라고 부른다…

 

컴퓨터는 0과 1로만 생각한다. 이진연산을 한다!

 

우리가 키보드로 말을 입력하면 컴퓨터는 이것을 0과 1로 해석하여 번역하고 모니터에 다시 이를 해석하여 말로 보여준다.

  • 키보드(”안녕하세요~”) → 컴퓨터(101111010000110) → 모니터(”안녕하세요~”)

 

컴퓨터의 메모리 저장장치에서도 0과 1로만 데이터를 저장한다.

메모리가 많이 들어있다가 왜 중요할까?

-> 메모리에 많은 내용을 담을 수 있고, 이는 더 많은 일을 동시에 할 수 있다.

 

우리가 어떤 내용을 넣어도 컴퓨터는 0과 1로 변환해서 가지고 있다.

 

 

데이터 타입이 필요한 이유

메모리 공간을 차지하는 내용의 타입에 따라 미리 필요한 크기만큼 자리를 잡아줘야 하기 때문에.. 메모리 타입이 필요하다.

미리 방을 잡아둬야 들어갈거 아니야~~

 

만약 우체국에서 상자를 배달하려는데 작은 편지가방을 챙기면 들고갈 수가 없겠죠~

 

 

데이터

  • 각각의 0과 1 비트(bit)라 부른다.
  • 8개의 비트가 모이면 바이트(byte)라 부른다.
    • ex) 00010011 → 1바이트
  • 64비트 컴퓨터라면…
    • CPU 반도체의 버스가 동시에 처리할 수 있는 비트 수를 의미
    • 한번에 64비트 블록의 데이터를 처리할 수 있다.
  • 사람은 2진수로 생각하지 않는다.
    • 10진수(0~9), 문자, 단어로 생각

사람이 컴퓨터 프로그래밍을 하기 위해서는 사람과 컴퓨터 사이에 중간 역할이 필요하다.

프로그래밍 언어들은 우리가 이해하는 구조와 명령을 컴퓨터에게 전달할 수 있게 하며, CPU에 의해 실행될 수 있는 형태로 컴파일 해준다.

 

 

 

 

4교시

데이터 생성과 할당

  • 생성
    • 이 정도 크기의 박스를 넣을거야~ 자리 만들어줘
    • 데이터가 들어갈 공간을 만들어줭
  • 할당
    • 실제 박스를 그 자리에 넣음
    • 데이터 들어갑니다잇

 

데이터 타입을 통해 우리가 이해할 수 있는 형태의 데이터로 생각하고 프로그래밍 할 수 있다.

let age: Int = 13
  • let
    • 상수형 데이터
    • “앞으로 이 값 정해지면 안바뀜”
  • age
    • 데이터의 이름
    • 우리가 부르기로 한 데이터의 이름
  • Int
    • 데이터의 타입(type)
  • 13
    • 13이라는 정수를 할당한다.
    • “메모리에 13이라고 기억시켜라”

상수형 데이터 age는 정수형이고, 여기에 13이라는 정수를 할당해라~라는 뜻이다.

→ 13이라는 정수 데이터를 이진수로 변환하여 메모리 공간에 기록한 후 데이터가 사라질 때까지 내용을 바꾸지 않는다.

→ 컴퓨터는 이진수로 바뀔 정수 데이터 타입에 필요한 메모리 공간을 확보한다.

 

 

 

스위프트언어에서 기본으로 제공하는 타입들을 하나씩 알아보자.

가장 먼저 숫자부터 알아보자!!


정수와 부동소수점 / 불리언과 문자열

정수형 데이터 타입

정수(소수점 이하 자리가 없는 수)를 저장하기 위해 사용
  • 정수의 종류
    • 부호 있는 정수(signed) : 양수, 음수, 0 값을 저장
    • 부호 없는 정수(unsigned) : 정수, 양수, 0만 저장→ 양수 표현 범위가 넓어진다~
    • → 음수는 저장할 수 없다! 이렇게 하면 좋은 점은 무엇일까?
  • Swift는 8비트, 16비트, 32비트, 64비트 정수를 지원
    • 부호 있는 정수 : Int8, Int16, Int32, Int64
    • 부호 없는 정수 : UInt8, UInt16, UInt32, UInt64
  • 애플은 일반적으로 Int 타입만을 쓰도록 권장한다.
    • 시스템 아키텍처에 따라 Int8~Int64으로 자동 적용
    • 예) 32비트 컴퓨터에서 Int는 Int32로 해석된다.
var someInt: Int = -100
// someInt = 100.1 // 컴파일 오류: 정수타입에 실수를 할당하려 했기 때문이다.

var someUInt: UInt = 100
// someUInt = -100 // 컴파일 오류: 음수 값을 할당하려고 했기 때문이다. 타입 다름.
// someUInt = someInt // 컴파일 오류: someInt의 값에는 현재 음수가 들어가 있다!

 

  • 모든 정수형 데이터 타입들은 해당 데이터 타입이 지원하는 최대값과 최솟값을 알 수 있도로 범위 속성을 가지고 있다.
print("Int32 Min = \(Int32.min)")
print("Int32 Max = \(Int32.max)")

// 값을 확인해보자~

 

 

부동소수점 데이터 타입

  • 소수점이 있는 값을 저장할 수 있는 데이터 타입
    • 예) 4353.1223
  • Swift는 두 가지 부동 소수점 데이터 타입을 제공
    • 소수점 이하의 값을 얼마나 정확하게 표현하는가
    • Double : 최대 64비트의 부동소수점 수를 저장
    • Float : 최대 32비트의 부동소수점 수를 저장(적어도 6자리까지 표현)
var someFloat: Float = 3.14
someFloat = 3

var someDouble: Double = 3.14
someDouble = 3
// someDouble = someFloat 
// 컴파일 오류: Float와 Double은 저장하는 부동소수점 수가 다르다. 다른 자료형이다.

이름이 같아도 성이 다르면 다른 사람인 것처럼, 3.14로 같은 값을 넣어도 변수타입이 다르면 다른 것이다~

 

  • Float, Double의 min, max값을 찾아보자.
    • 단, 함수는 공식문서에서 찾아보기!

 

불리언 데이터 타입

  • 참/거짓을 처리하는 목적의 데이터 타입
  • Bool : true 또는 false를 저장할 수 있다
var someBool: Bool = true
someBool = false
// someBool = 0 
// 컴파일 오류: 0이라는 정수값이 아니라 false, true와 같은 불리언이 들어가야 한다.
// C언어에서는 0,1로 참,거짓을 구분하는 것 때문에 헷갈릴 수 있다. Swift는 그렇게 안하니까 주의.

 

 

문자 데이터 타입

  • 문자, 숫자, 문장 부호, 기호와 같은 하나의 문자를 저장한다.
  • 큰따옴표(””)를 사용한다.
  • Swift에서 문자는 내부적으로 그래핌 클러스터(grapheme cluster)의 형태로 저장된다.
    • 눈에 보이는 하나의 문자를 표현하기 위해 결합된 둘 이상의 유니코드 스칼라로 구성
var myChar1 = "f"
var myChar2 = ":"
var myChar3 = "X"

// 유니코드를 사용해 변수에 'X'문자를 할당한다면
var myChar4 = "\u{0058}"

 

  • Charater형 타입으로 이모지를 집어넣어도? 가능하다.
var someString: String = "하하하 🤣 "
someString = someString + "웃으면 복이와요"
print(someString)
// someString = someCharacter // 컴파일 오류발생
  • 공백도 하나의 문자이다.
  • 스트링타입과 스트링타입을 더할 수 있다.

 

  • 문자열 보간(string interpolation) 개념을 이용해 변수, 상수, 표현식, 함수 호출을 조합하여 구성할 수도 있다.
var userName = "John"
var inboxCount = 25
let maxCount = 100

var message = "\(userName) has \(inboxCount) messages. Message capacity remaining is \(maxCount - inboxCount) messages."

print("messages")
// John has 25 messages. Messages capacity remaining is 75 messages.

 

 

  • 여러 줄의 문자열은 삼중 따옴표 안에 넣어서 선언할 수 있다.
  • 여러 줄의 문자열 내에서 각 줄마다 얼만큼 들여쓰기가 될 것인지는 해당 줄의 들여쓰기된 만큼에서 마지막 닫는 삼중 따옴표가 들여쓰기된 만큼을 뺀 양으로 계산된다.
var multiline = """
	안녕하세요.
	반갑습니다.
"""

print(multiline)
print("---")

multiline = """
	안녕하세요.
	반갑습니다.
	"""

print(multiline)

결과보기 

더보기

오호. 내용은 같은데 앞에 들여쓰기가 다르게 나온다. 삼중 따옴표의 들여쓰기가 출력에 영향을 준다~

 

특수 문자 / 이스케이프 시퀀스

  • 개행, 탭 또는 문자열 내에 특정 유니코드 값을 지정하는 이스케이프 시퀀스(escape sequence)라는 특수문자도 있다.
    • 이스케이핑(escaping) : 역슬래시 문자를 앞에 써서 구별하는 것
var newline = "\\n"
  • 기본적으로 역슬래시가 앞에 붙은 문자는 특수 문자로 간주되어 처리된다.
  • 만약 역슬래시 문자를 쓰고 싶다면 역슬래시 자체를 이스케이핑하면 된다.
var newline = "\\\\" 
print("\\(newline)") 

// \
  • Swift에서 주로 사용되는 특수 문자는 다음과 같다.
    • \n : 개행
    • \r : 캐리지 리턴
    • \t : 탭
    • \\ : 역슬래시
    • \” : 쌍따옴표(문자열 선언부 내부에서 쌍따옴표를 쓸 때 사용됨)
    • \’ : 홀따옴표(문자열 선언부 내에서 홀따옴표를 쓸 때 사용됨)
    • \u{nn} : 한 바이트의 유니코드 스칼라. nn은 유니코드 문자를 표현하는 두 개의 16진수를 쓴다.
    • \u{nnnn} : 두 바이트의 유니코드 스칼라. nnnn은 유니코드 문자를 표현하는 네 개의 16진수를 쓴다.
    • \u{nnnnnn} : 네 바이트의 유니코드 스칼라. nnnnnn은 유니코드 문자를 표현하는 네 개의 16진수를 쓴다.

 

 


 

변수와 상수

변수

variable. 변할 수 있다
  • 애플리케이션이 사용하는 데이터를 저장하기 위해 예약된 컴퓨터 메모리 내의 위치다.
  • 각각의 변수는 프로그래머에 의해 이름이 주어지고 값이 할당된다.
  • 변수에 할당된 이름은 변수에 할당된 값을 Swift 코드 내에서 접근하기 위해 사용된다.
  • 물론 변수에 할당된 값을 변경할 수도 있다.
    : 변수의 특징
var age: Int = 13

 

 

상수

Constant. 변할 수 없다
  • 상수도 변수처럼 데이터 값을 저장하기 위해 메모리 내의 위치에 이름을 명명한다.
  • 한번 할당되면 나중에 그 값을 바꾸지 못한다.
  • 앱 안에서 반복적으로 사용되는 값이 있을 때 특히 유용한다.
  • 어떤 값을 상수에 할당하고 그 값이 사용될 때마다 상수를 사용한다면 코드의 가독성이 더 좋아질 것이다.
  • 앱 코드 내의 여러 곳에서 어떤 상수를 사용하고 있고 그 값을 전체적으로 변경해야 할 경우 상수 선언부에서 한번만 수정하면 모두 적용된다.
let age: Int = 13

 

변수와 상수

let constant: String = "차후에 변경이 불가능한 상수 let"
var variable: String = "차후에 변경이 가능한 변수 var"

variable = "변수는 이렇게 차후에 다른 값을 할당할 수 있지만"
// constant = "상수는 차후에 값을 변경할 수 없습니다.
let sum: Int
let inputA: Int = 100
let inputB: Int = 200

// 선언 후 첫 할당
sum = inputA + inputB

// sum = 1 // 첫 할당 후에는 다시 값을 바꿀 수 없다. 오류 발생.

// 변수도 차후에 할당하는 것이 가능하다.
var nickName: String
nickname = "dadahae"

// 변수는 차후에 다시 다른 값을 할당해도 문제가 없다.
nickName = "Lee"

 

 


 

 

타입 선언과 타입 추론

Swift 타입의 성격

  • Swift는 데이터 타입이 안전한(type safe) 프로그래밍 언어에 속한다.
    • 변수의 데이터 타입이 한번 정해지면 그 변수는 다른 타입의 데이터를 저장하는 데 사용될 수 없다.(컴파일 에러 발생)
    • 난감한 상황이 생기니까 강압적으로(컴파일 에러)못하게 한다.
  • 반대로 데이터 타입이 느슨한(loosely typed) 프로그래밍 언어는 변수를 선언한 후에 다른 데이터 타입을 저장할 수 있는 언어다.
  • 상수나 변수의 타입을 지정하는 방법은 타입 선언(Type annotation)과 타입 추론(Type inference)이 있다.

 

타입 선언

Type annotation
  • 변수나 상수 이름 뒤에 콜론을 쓰고 타입을 선언하는 것
let age: Int = 13

 

타입 별칭

Type alias
  • Swift의 기본 제공 타입 또는 우리가 임의로 만든 데이터 타입으로 이미 존재하는 타입에 임의로 다른 이름(별칭)을 부여함
typealias Age = Int
let age: Age = 21

let militeryService: Int = 2
let afterMiliteryService: Age = age + militeryService

이제 Age라는 타입을 쓰면 Int 라는 타입을 쓰는 것과 같은 효과가 날거야!!!

 

 

타입 추론

Type inference
  • 선언부에서 타입 선언이 없다면 Swift 컴파일러는 타입 추론이라는 기술을 사용하여 변수 또는 상수의 타입을 지정한다.
  • 컴파일러가 타입 추론을 사용하게 되면 변수 또는 상수가 초기화되어 시점에 할당된 값의 타입이 무엇인지를 판단하여 해당 타입으로 지정한다.
    • 컴파일러가 기계어로 바꾸는 과정에서 우리가 안쓴 타입을 알아서 넣어준다아~
let age = 13
var signalStrength = 2.231
let companyName = "My Company"

 

> 컴파일러가 기계어로 바꾸고 난 다음에 바뀐 코드

더보기
let age: Int = 13
var signalStrength: Float = 2.231
let companyName: String = "My Company"

 

  • 타입 선언 없이 상수를 선언하게 될 경우에는 반드시 선언 시점에서 값을 할당해야 한다.
  • 하지만 상수를 선언할 때 타입 선언을 사용하면 코드 내에서 나중에 할당할 수 있다.
let greetMessage = "Hello SwiftUI" // YES
// var myName // NO

var guestName: String // YES
guestName = "dadahae" // YES

타입 추론을 해주긴 하지만~ 습관적으로 타입을 적어주자!

 

 

 


 

 

튜플

Tuple
  • Swift의 가장 단순하면서도 가장 강력한 기능을 가진 것들 중 하나
  • 튜플은 여러 값을 하나의 항목으로 임시적으로 그루핑(Grouping)하는 데 매우 간단한 방법이다.
  • 서로 다른 타입의 값들이 튜플에 저장될 수 있으며, 모두 동일한 타입의 값이어야 한다는 제약도 없다.
  • 하나의 함수에서 여러 값을 반환하는데 쓸 수 있다.
let myTuple = (10, 432.433, "This is a String")
// 10 : 정수
// 432.433 : 부동소수점
// This is a String : 문자열

 

튜플에서 값을 얻는 방법

  1. 인덱스 위치 참조
    • 특정 튜플 값은 인덱스 위치를 참조하면 간단하게 접근할 수 있다.
      let myTuple = (10, 432.433, "This is a String")
      let myString = myTupl.2
      
      print(myString)
      
      // This is a String
      
      • myString → This is a String
        (첫 번째 값의 인덱스는 0)
  2. 모든 값을 추출해 상수 또는 변수에 각각 할당
    • 아래와 같은 코드로 튜플 내의 값들을 선택적으로 추출할 수도 있다.
let myTuple = (10, 432.433, "This is a String")
let (myInt, myDouble, myString) = myTuple

print(myString)

// This is a Stri
  • 각각 값이 대응해서 변수에 할당…
    • myInt → 10
    • myDouble → 432.433
    • myString → This is a String
  • 아래와 같은 코드로 튜플 내의 값들을 선택적으로 추출할 수도 있다.
  • 원하지 않는 값의 자리에 밑줄 문자를 쓰면 해당 값이 무시된다.
let myTuple = (10, 432.433, "This is a String")
let (_,_,myString) = myTuple

print(myString)

// This is a String

안쓸 코드는 언더바로 처리해도 된다잇~

 

 

3. 생성할 시점에 각각의 값을 변수에 할당

  • 값들이 할당된 변수를 튜플에 저장하면 코드 내에서 저장된 값을 참조할 때 변수를 사용할 수 있다.이름을 미리 정해두고 진행해도 된다. 뽑아쓸 때 더 편하겠주?
let myTuple = (count: 10, length: 432.433, message: "This is a String") 
print(myTuple.message) 

// This is a String

 

 

 

  Comments,     Trackbacks