본문 바로가기

Programming•프로그래밍/Swift•스위프트

Swift 5 프로그래밍 / #1. 변수와 타입

반응형

Swift

#1. 기초 문법과 타입


모든 프로그래밍을 시작 하기 전

공통적으로 알아야 할 것이 있는데

 

그것은 바로 주석입니다.

 

코드가 짧거나 전달하는 내용이 간결하면

필요성을 크게 느끼지 못하는데

 

그 내용이 방대해지고 많아지면

주석이 반드시 필요합니다.

 

처음부터 코딩하실때 주석을 항상 하는 습관을 들이시는 것이

추후에 코드가 길어질때 수정하거나 보완하는 유지보수에 정말 큰 도움이 된답니다!

 

사용하는 언어마다 주석의 표현방법은 조금씩 다르지만

Swift 에서 주석은 다음과 같이 표현합니다.

// 한 줄 주석은 슬래시 두개를 연달아 사용합니다.

/* 
   여러줄 주석은
   슬래시와 별표로 표시하고
   반드시 닫아주어야 합니다.
*/
   
/*
// 쓸 일이 있을지는 모르겠지만 주석 안에 주석도 가능!
*/

 

 

 


 

 

 

 

Swift 는 우리가 흔히 C 언어 처럼 이렇게

int a;
char c;

 

표기하지 않습니다.

 

 

Swift 에는 상수와 변수 라는 개념이 존재합니다.

문장의 끝맺음 역할을 하는

세미콜론 또한 의무가 아닙니다

let name = "Roto"
var age = 23

print("HI! my name is \(name). I am \(age) years old!")

let 은 상수로 변하지 않는 값을 의미하고

var 은 변수로 변할 수 있는 값을 의미합니다.

 

그럼 여기서 의문이 듭니다.

대부분 언어에서는 위와 같이 int, char 처럼 초기화를 해줘서

변수의 타입이 무엇인지 알 수 있는데

 

Swift 는 어떻게 저렇게 사용해도 괜찮을까?

 

Swift 는 타입추론 이라는 개념이 있습니다.

위 gender 의 값의 타입이 String 인 "" 으로 되어있으니

아 gender 변수는 String 이겠구나 하고 따로 지정을

해주지 않아도 String 타입으로 추론합니다.

 

하지만 이는 컴파일러가 추론을 하는 방식이라 컴파일 시간이 길어지고

만약 이로 인해 오류가 생기면 찾는데 상당한 시간이 소요되어 권장드리지는 않는 방법입니다.

따라서 코드를 초기화 시킬때는 아래와 같이 타입을 명시 해주어야 합니다.

 

 

let name: String = "Roto"
var age: Int = 23

print("HI! my name is \(name). I am \(age) years old!")

 

 

보통 우리가 알고있는 타입이라고 한다면 정수나 문자, 문자열 정도 일텐데요

Swift 에는 조금 더 있습니다.

재미있는 결과가 나올거에요 :)

 


var AnySong: Any = "ZICO"
print(AnySong)

AnySong = 2020
print(AnySong)

AnySong = 2020.103
print(AnySong)

 

Swift 에는 아무타입이나 올 수 있는 Any 타입이 있습니다!

변수 생성자인 var 와 Any 타입으로 저런식으로 표현할 수 있죠.

 

앞서 본 타입 추론과 상당히 비슷한 맥락이죠?

 

여기서 재미있는 점은 앞서본 타입에게 typealias 키워드를 통해서

임의로 별칭을 붙일 수 있다는 점입니다.

한 번 한국어로 변경해볼까요?

 

/*       사용 설명서       */
// typealias 이름 = 키워드 //
typealias 정수 = Int
typealias 묻고더블로가 = Double
typealias 스트링 = String
typealias 아무노래나일단틀어 = Any

var Num: 정수 = 3
var Num_2: 묻고더블로가 = 2.2 		
var Text: 스트링 = "Hi, there"
var Text_2: 아무노래나일단틀어 = "아무거나 신나는 걸로!"

/*
정수(Int)
묻고더블로가(Double)
스트링(String)
아무노래나일단틀어(Any)
*/

 

 

변수명은 한국어도 가능하답니다!

실제 쓰는 것은 추천드리지는 않지만...

 

다음은 배열 입니다

Swift 역시 배열이 존재하는데요

 

데이터를 일렬로 나열한 순서대로 정렬하는 컬렉션 타입입니다

var Numbers: [Int] = [1, 2, 3, 4, 5]

초기화와 선언을 동시에 하면 저런 모습입니다.

대괄호 [ ] 를 이용하여 Numbers 라는 변수가

Int 타입의 배열이라는 것을 명시해줘야 합니다.

 

그렇다면 여기서 Numbers 에 있는 1 이라는 숫자를 출력하기 위해서

우리는 어떻게 해야할까요?

var Numbers: [Int] = [1, 2, 3, 4, 5]

print(Numbers[1])

아닙니다

 

배열의 Index 는

0 부터 시작합니다.

 

즉 정리하면 다음과 같습니다.

 

var Numbers: [Int] = [1, 2, 3, 4, 5]

print(Numbers[0])

Numbers[0] // 1
Numbers[1] // 2
Numbers[2] // 3
Numbers[3] // 4
Numbers[4] // 5

이건 어느 프로그래밍 언어에서나 똑같습니다

항상 기억하셔야 합니다!

 

다음은 배열과 비슷한 형태의 딕셔너리 입니다.

딕셔너리는 항상

[Key : 값]

이렇게 딕셔너리의 값은 키와 쌍으로 함께 다닙니다.

그렇기에 인덱스가 따로 존재하지 않습니다.

 

중요한 점은 딕셔너리 안에는 키가 하나이거나 여러개일 수 없습니다.

하나의 값에는 하나의 키만 존재해야하며 그 키는 오직 하나만 있어야 한다는 거죠.

 

타입별칭(typealias)과 함께 써볼까요?

/* 
타입별칭을 이용하여 UserInfo 라는 딕셔너리 타입 
Key: String / Value: Int 초기화 
*/
typealias UserInfo = [String: Int]

var GameUser: UserInfo = ["A": 25, "B": 30, "C": 23, "D": 23]

// GameUser[0] *잘못된 표현 Index 없음
// GameUser[25] *잘못된 표현 값(Value)으로 호출 안됨

GameUser["A"]		// "A": 25
print(GameUser)
GameUser["A"] = 24  	// "A": 24 (*Value 변경 됨)
print(GameUser)
GameUser["A"] == 28 	// false (*Key 변경 안 됨!)
print(GameUser)

 

다음은 열거형(enum) 입니다.

 

간략하게 설명하자면 연관된 그룹을 정의할 수 있습니다.

즉 제한된 범위 내에서 값을 설정할 수 있다는 말입니다.

 

각 열거형은 그들로도 그들만의 값(Value)이지만

항목의 원시 값(Raw Value)도 가질 수 있습니다!

 

단어가 어려워서 그런데 너무 어렵게 생각하지 말고

원시 값(Raw Value) = 단순 값

이라고 생각하면 됩니다.

 

열거형과 원시값을 이용한 예제코드를 보시면 바로 이해가 되실겁니다!

 

enum Week: String {
    case MON = "월요일"
    case TUE = "화요일"
    case WED = "수요일"
    case THR = "목요일"
    case FRI = "금요일"
    case SAT = "토요일"
    case SUN = "일요일"
}

let Today = Week.WED
print(Today.rawValue) // 수요일

 

이번 강의는 여기까지 입니다!

 

다음에는 연산과 제어로 찾아오겠습니다 :)

 

 






반응형