티스토리 뷰

Types

Swift는 자료형은 여타 프로그래밍 언어들 처럼 기본적인 자료형과 collection type을 제공한다. 그 밖에도 Objective-C에서는 제공하지 않지만 python을 다뤄봤다면 아는 tuple과 Swift의 가장 강력한 도구인 optional이 있다. Swift에서 볼 수 있는 기본적인 자료형에는 정수를 나타내는 Int, 실수를 나타내기 위한 Double / Float, 논리 자료형 Bool과 text data를 위한 String이 있다. Collection type에는 Array, Set, Dictionary가 있고 직전에 언급한 tuple은 함수에서 여러 값을 return하고 싶을 때 사용할 수 있다. 가장 강력한 자료형인 optional type을 사용하면 값의 유무를 표현할 수 있다. 개인적으로 optional type을 처음 보았을 때 많이 신기했었다(사실 지금도 신기하다). 

[Type 더 알아보기]

...더보기

※ Integers

Swift는 signed(음수, 0, 양수), unsigned(0, 양수) integers를 8, 16, 32, 64bit 형태로 지원해준다. 8 bit unsigned integer는 UInt8로 표현되고 32 bit signed integer는 Int32와 같이 표현되니  다른 bit에  대해서도 같은 규칙을 따른다. 각 bit마다  상/하한선을 확인하고  싶다면 UInt8.min, Int32.max와 같이 직접 찍어보면 된다. 그러나 대부분의 경우 특정 크기를 지정하지  않고 Int라고만 쓰는데, 이는 Swift가 현재 사용하고 있는 플랫폼의 워드 크기에 맞춰서 알아서 배정해주기 때문이다. 가령 32비트 체제를 쓰고 있다면 Int는 Int32와 같은 크기를 갖고, 64비트 체제를 돌리고 있다면 Int64와 같은 크기를 갖는다. (UInt도 매한가지)

애플에서 제공하는 Swift guideline에서도 일관성과 상호운용성을 이유로 특정 size의 정수로 작업해야 하는 것이 아니라면 Int를 코드에서 사용하는 것을 권장하고 있다. 같은 이유로 UInt도 되도록이면 사용하지 않는 것을 권한다.

※ Floating-Point Numbers

Double의 경우는 64비트 부동소수점, Float의 경우 32비트 부동소수점을 나타낸다. 두 표현 방식에는 나타낼 수있는 precision의 차이가 있지만 어떤 type을 써도 딱히 상관이 없는 상황이라면 Double을 사용하도록 권장되고 있다.

Numeric Literals

Literals와 관련 된 사항들은 글 보다는 코드 한 줄들이 더 보기 좋을 것 같아서 코드로 나타내려고 한다.

 

// Integer Literal
let decimalInt = 17
let binaryInt = 0b10001
let octalInt = 0o21
let hexadecimalInt = 0x11

// Floating-Point Literal
let decimalDouble = 11.5
let hexadecimalDouble = 0xb.8
let posExponDouble = 1.25e2 // = 1.25 * 10^2
let negExponDouble = 1.25e-2 // = 1.25 * 10^-2
let hexadecimalExponDouble = 0x3p4 // = 3 * 2^4

 

특이한 점은 숫자가 커질 경우 1,000,000로 표시하듯이 1_000_000로 표현할 수 있다는 것.


Constants & Variables

  Constants Variables
  한 번 지정되면 값 변경 불가 변경 가능
선언용 keyword let var
선언 방법 #1 let maxUsers = 1000 var currentUsers = 738
선언 방법 #2 let studentAge : Int = 23 var studentName : String = "Sueaty"
상/변수 명명()법
  • 어떤 글자가 와도 무관(Unicode도 가능 🤪이런 것도 된다는게 신기)
  • 공백 문자는 안됨
  • 숫자로 시작할 수 없음

위 표에서 선언 방법 1과 2는 Swift언어가 가진 또다른 특징을 보여준다. 1의 경우 컴파일러에 의해 상수/변수의 자료형이 유추된다. 애플에서 제공하는 Swift 언어 공식문서에 의하면 사실상 1의 방법을 사용한다고 한다. 2의 경우 상수/변수가 갖게 될 값을 조금 더 분명하게 하기 위해 사용할 자료형을 미리 알려주는 것인데, 선언과 동시에 초기화를 하지 않을 때 사용한다고 보면 된다.

Swift는 콘솔 창에 출력을 할 때 print함수를 사용한다. 가장 기본적인 Hello, World!를 콘솔 창에서 보고자 한다면 print("Hello, World!")로 작성하면 되는 것이다. print문에 쓰일 String에 선언한 상수/변수를 사용하고 싶다면 print("Name of Student :\(studentName)") 이라고 쓰면 되고 위와 같이 사용하는 것을 string interpolation이라고 부른다. 

[print함수 더 알아보기]

...더보기

※ print( ) 함수에 대해...

상수/변수를 콘솔 창에 보고 싶을 때는 print( ) 함수를 쓰게 된다. C, C++, Java에서 output을 위한 함수는 new-line문자(개행문자 \n)이 포함되어 있지 않아 다음 줄에 출력을 이어가고 싶을 때는 "\n"이 필요했다. 그러나 Python이나 Swift의 print문은 \n이 포함되어 있는데 Swift에서 line break가 없이 출력을 하고 싶을 때는 print(someVal, terminator : "") 로 쓰면 된다.

Type Safety &  Type Inference

Type Safety라는 단어만 보면 지난 학기 프로그래밍언어론 수업이 생각 나서 한숨부터 나지만 뭐 한숨이야  할  일 많아진 컴파일러가 더 나겠짛ㅎㅎ Swift의 컴파일러는 매번 type checking을 하고 타입이 맞지 않다면 error가 생긴다.(원문에서 flags any mismatched types as errors라고 되어 있는데.. 그래 컴퓨터구조 할 때 열심히 flag flag했지만 정작 해석할 땐 쓸모가 없... 아닌가 해석을 잘못하고 있는 것인가ㅎㅎ) 그렇다고 개발자가 코드를 짤 때마다 모든 상수/변수에 type을 explicitly 알려 줄 필요는 없다. 위 표의 선언 방법 #1과 같이 컴파일러가 초기화 된 값을 보고 알아서 유추를 할 수 있기 때문이다. 참고로 소수로 초기화를 했다면 let pi : Float =  3.141592와 같이 쓰지 않는다면 유추를 할 때는 Double로 유추를 하게 된다.


Comments

Swift에서의 주석은 C에서 사용한 것과 비슷하다. Single line 주석의 경우 // ... , Multiline 주석의 경우 /* ... */ 를 사용하면 된다. C와의 차이점이 있다면 multiline 주석 내에 또 다른 multiline을 쓸 수 있다는 것이다. Code block들을 한 번에 주석처리를 시키고 싶다면 주석 처리를 하고 싶은 부분을 드래그하고 ⌘ + / 를 눌러주면 각 줄이 single line 주석처리가 되고 한 번 더 눌러주면 취소된다.


Type Aliases

Alias라는 단어를 찾아보면 '별명'이라고 나오는데 내가 alias라는 단어를 처음 본 건 리눅스 수업 당시 alias 명령어를 썼을 때 였는데 그렇게 알고 나니까 alias라는 단어를 참 많이 쓰더라. Type alias는 typealias라는 키워드를 통해 쓸 수 있는데 자료형을 대체하거나 후에 function signature를 사용해서 만들 수도 있다. 가령, typealias typeInt = Int 라고 하면 var intMax = typeInt.min 과 같이 쓸 수 있는 것이다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함