Swift의 기본 데이터 타입


  • Bool
  • Int, UInt
  • Float, Double
  • Character, String


소스코드


Bool

truefalse만을 값으로 가지는 타입

var someBool: Bool = true
someBool = false
// someBool = 0 // 컴파일 오류발생
// someBool = 1 // 컴파일 오류발생



Int, UInt


Int


정수 타입. 현재는 기본적으로 64비트 정수형.

var someInt: Int = -100
// someInt = 100.1 // 컴파일 오류발생


UInt


양의 정수 타입. 현재는 기본적으로 64비트 양의 정수형.

var someUInt: UInt = 100
// someUInt = -100 // 컴파일 오류발생
// someUInt = someInt // 컴파일 오류발생


Float, Double


Float


실수 타입. 32비트 부동소수형.

var someFloat: Float = 3.14
someFloat = 3


Double


실수타입. 64비트 부동소수형.

var someDouble: Double = 3.14
someDouble = 3
// someDouble = someFloat // 컴파일 오류발생


Character, String


Character


문자 타입. 유니코드 사용. 큰따옴표("") 사용.

var someCharacter: Character = ""
someCharacter = ""
someCharacter = "가"
someCharacter = "A"
// someCharacter = "하하하" // 컴파일 오류발생
print(someCharacter)


String


문자열 타입. 유니코드 사용. 큰따옴표("") 사용.

var someString: String = "하하하  "
someString = someString + "웃으면 복이와요"
print(someString)

// someString = someCharacter // 컴파일 오류발생


생각해보기


다음 코드에서 integer, floatingPoint, apple 상수는 각각 어떤 타입이 될까요? 상상해보고 확인해보세요~!

let integer = 100
let floatingPoint = 12.34
let apple = "A"

힌트 : type(of: )



Any, AnyObject, nil


  • Any
  • AnyObject
  • nil


소스코드


Any


Swift의 모든 타입을 지칭하는 키워드

var someAny: Any = 100
someAny = "어떤 타입도 수용 가능합니다"
someAny = 123.12


Any 타입에 Double 자료를 넣어두었더라도 Any는 Double 타입이 아니기 때문에 할당할 수 없습니다. 명시적으로 타입을 변환해 주어야 합니다. 타입 변환은 차후에 다룹니다


let someDouble: Double = someAny  // 컴파일 오류발생


AnyObject


모든 클래스 타입을 지칭하는 프로토콜

클래스와 프로토콜에 대한 설명은 차후에 합니다

class SomeClass {}

var someAnyObject: AnyObject = SomeClass()


AnyObject는 클래스의 인스턴스만 수용 가능하기 때문에 클래스의 인스턴스가 아니면 할당할 수 없습니다.

someAnyObject = 123.12    // 컴파일 오류발생


nil


없음을 의미하는 키워드

다른 언어의 NULL, Null, null 등과 유사한 표현입니다.


아래 코드에서 someAnyAny 타입이고, someAnyObjectAnyObject 타입이기 때문에 nil을 할당할 수 없습니다.
nil을 다루는 방법은 옵셔널 파트에서 다룹니다.

someAny = nil         // 컴파일 오류발생
someAnyObject = nil   // 컴파일 오류발생


관련문서






by yagom

facebook : http://www.facebook.com/yagomSoft

facebook group : https://www.facebook.com/groups/yagom/


p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   

저작자 표시 비영리 변경 금지
신고

'Swift > 기본문법' 카테고리의 다른 글

함수  (2) 2017.05.25
컬렉션 타입  (0) 2017.05.22
데이터 타입  (0) 2017.05.18
상수와 변수  (0) 2017.05.15
이름짓기, 콘솔로그, 문자열 보간법  (0) 2017.05.11
스위프트 시작하기  (0) 2017.05.08
Posted by yagom


오늘의 주제

1. 스위프트에서의 명명법
2. 변수, 상수의 선언

3. 기초 데이터 타입

안녕하세요, 야곰입니다. 

지난 포스팅에서는 스위프트가 어떤 언어인지에 대해 잠시 살펴보았습니다. 


2017/01/23 - [Swift] - Swift란 어떤 언어인가?


이번에는 스위프트의 아주 기초적인 문법에 대해 알아보겠습니다 :)


이름짓기

프로그래밍을 할 때 우리는 변수, 상수, 함수, 타입 등을 제각각 구분할 수 있도록 이름을 지어주어야 합니다. 그런데 각 언어마다 이름을 지어줄 때 지켜야 하는 규칙들이 있습니다. 스위프트에도 마찬가지로 이름을 지을 때 생각해 주어야 할 점들이 있는데요, 간략히 알아보겠습니다.

  • 이름은 유니코드에서 지원하는 어떤 문자(한글, 한자, 영문, 숫자, 이모티콘 등등)라도 사용할 수 있습니다. 다만, 다음과 같은 예외의 경우는 사용할 수 없습니다. 
    • 스위프트에서 미리 사용하고 있는 예약어 또는 키워드
    • 해당 코드 범위 내에서 이미 사용하고 있는 기존의 이름과 동일한 이름 
    • 연산자로사용될수있는기호(+, -,*,/)
    • 숫자로 시작하는 이름
    • 공백이 포함된 이름 
  • 함수, 메서드, 인스턴스 이름은 첫 글자를 소문자로 사용하는 소문자 카멜케이스(Lower Camel Case)를 사용합니다. 
  • 클래스, 구조체, 익스텐션, 프로토콜, 열거형 이름은 타입의 이름이기 때문에 첫 글자를 대문자로 사용하는 대문자 카멜케이스(Upper Camel Case)를 사용합니다.
  • 대소문자를 구별합니다. 예를 들어 Var와 var를 따로 인식합니다.

예약어와 키워드 


예약어는 프로그래밍 언어에서 미리 사용하기로 약속되어 있는 단어로, 식별자로 사용할 수 없는 단어를 뜻합니다. 키워드는 프로그래밍 언어 문법의 일부로, 특별한 의미를 갖는 단어를 뜻합니다. 스위프트의 키워드는 대부분 예약어입니다.



변수와 상수

변수

프로그래밍을 해보신 분들이라면 변수와 상수가 어떤 역할을 하는지 다들 알고 계시겠지요?
프로그램에서 사용되는 데이터를 메모리에 임시적으로 저장하기 위하여 변수나 상수를 이용합니다. 이때 변수와 상수는 특정 데이터 타입에 해당하는 값의 이름입니다. 변수는 생성 후 데이터 값을 변경할 수 있지만, 상수는 한 번 값을 설정하면 추후에는 변경할 수 없습니다. 

스위프트에서 변수를 생성하려면 var 키워드를 사용합니다. var [변수명]: [데이터 타입] = [값] 의 형태로 선언합니다. 변수를 생성할 때 데이터 타입은 생략할 수 있습니다. 큰따옴표(“)로 묶인 데이터는 문자열을 의미합니다.

var name: String = "yagom" var age: Int = 100 var job = "iOS Programmer" // 타입 추론이 사용되었습니다 var height = 181.5 // 타입 추론이 사용되었습니다 age = 99 // 변수는 값을 변경해 줄 수 있습니다. job = "Writer" // 값을 변경할 때에는 기존과 동일한 타입의 값을 할당해 주어야 합니다.



주석(Comment)


코드 중간중간 // 기호 뒤에 녹색으로 붙은 글귀는 주석입니다. 즉, 코드에 해당하는 설명을 덧붙이기 위한 메모라고 생각하면 됩니다. 주석은 프로그램이 실행될 때 코드로서 실행되지는 않습니다. 사람이 코드를 읽기 편하도록 하기위한 보조수단입니다. 


타입 추론


변수나 상수를 생성할 때 데이터 타입을 생략하면 컴파일러가 변수 값의 타입을 추론하여 타입을 지정합니다. 애플은 이런 타입 추론을 스위프트의 강력한 기능이라고 소개했지만, 스위프트에 익숙하지 않은 프로그래머에게는 오히려 독이 될 수 있습니다. 그러다 보니 저는 타입 추론을 많이 사용하지는 않습니다. 자칫 잘못된 타입 추론으로 인해 오류가 생기면 이 오류를 찾는데 상당한 시간이 걸릴 수도 있습니다. 타입을 명확히 지정하지 않아 발생하는 오류를 찾아내는 것보다 처음부터 타입을 명시하는 편이 시간을 더 절약할 수 있습니다. 


[플레이그라운드 실행결과]


스위프트에서 세미콜론 


스위프트에서 명령구문 뒤에 세미콜론(;)을 붙이는 것은 선택사항입니다. 기존 프로그래밍 언어의 습관대로 구 문 뒤에 세미콜론을 붙이셔도 상관 없습니다. 



상수

스위프트에서는 let 키워드를 사용해서 상수를 생성합니다. let [상수명]: [데이터 타입] = [값] 의 형태로 선언합니다. 변수 생성과 마찬가지로 상수 생성 때도 데이터 타입을 생략할 수 있습니다. 

let name: String = "yagom" // 차후 변경하지 않는 값은 상수로 선언합니다.
var age: Int = 100
var job = "iOS Programmer"  // 타입 추론이 사용되었습니다.
let constHeight = 181.5

age = 99        // 변수는 값을 변경할 수 있습니다.
job = "Writer"  // 값을 변경할 때에는 기존과 동일한 타입의 값을 할당해야 합니다.
name = "야곰"     // 상수로 선언된 값은 변경할 수 없습니다. 오류가 발생합니다.


변수를 사용하지 않고 상수를 사용하는 이유는 다양합니다. 하지만 가장 중요한 이유는 가독성입니다. 


상수는 변하지 않는 값입니다. 때문에 상수로 값을 선언하면, 이후 코드에서 값의 변화가 없다는 사실을 주석이나 API 문서 등을 살펴보지 않고서도 직관적으로 알 수 있습니다. 즉, 차후 값의 변경을 신경쓰지 않아도 된다 는 것입니다. 예를 들어 원주율 값은 (아직까지는) 공식적으로 불변하는 값이므로 상수로 선언하는 것이 좋습니다. 


또, 특정 값에 특별한 의미를 부여할 때 사용할 수도 있습니다. 예를 들어 입력받는 수의 최대 크기가 100이 라고 한다면, 100이라는 숫자에 의미를 부여하기 위해 let maxInputValue = 100 등으로 선언해두면 차후에 직관적으로 읽기도, 사용하기도 편리할 것입니다.  


[플레이그라운드 실행결과]


플레이그라운드 실행결과를 보면 왼쪽에 빨간 동그라미를 통해 해당 줄에서 오류가 발생했음을 확인할 수 있습니다. 상수의 값을 차후에 변경하려고 했기 때문에 컴파일러가 프로그래머가 발생시킨 오류를 알려준 것입니다. 오류가 발생한 곳을 삭제하거나 수정하면 정상작동 합니다.

[오류 수정 후 플레이그라운드 실행결과]



콘솔 로그 남기기

프로그램에서 로그란, 애플리케이션의 상태 또는 애플리케이션 내부 로직의 흐름을 관찰할 수 있도록 출력한 정보를 의미합니다. 콘솔 로그(Console Log)는 디버깅 중 디버깅 콘솔에 보여줄 로그를 뜻합니다. 스위프트에서는 print ( ) 함수를 사용하여 콘솔 로그를 출력할 수 있습니다. 
print 함수의 매개변수 타입은 문자열입니다. 그래서 print 함수의 전달인자로 문자열을 전달해 주어야합니다. 기본적으로 print("Hello Swift!")와 같이 사용하면 디버깅 콘솔에서 ‘Hello Swift!’라는 로그를 디버깅 콘솔에서 확인할 수 있습니다. print 함수는 로그를 출력한 뒤에 줄바꿈을 해주기 위해 줄바꿈 문자(\n) 를 자동으로 삽입해줍니다.

콘솔 로그의 print 함수에 대한 이해가 잘 가지 않는다면 다음 포스팅에 이어질 함수의 내용을 참고하세요. 



문자열 보간법(String Interpolation)은 변수 또는 상수 등의 값을 문자열 내에 나타내고 싶을 때 사용합니다. 문자열 내에 \(변수나 상수) 의 형태로 표기하면 이 변수나 상수를 문자열로 치환해서 넣어줍니다. 



기본 데이터 타입

스위프트에서 기본으로 제공하는 데이터 타입(자료형)에 대해 알아보겠습니다. 


Int와 UInt 

정수 타입입니다. Int는 +, - 부호를 포함한 정수를 뜻하며 이 중 - 부호를 포함하지 않고 0 을 포함한 양의 정수는 UInt로 표현합니다. Int와 UInt형의 최댓값과 최솟값은 각각 max 와 min 프로퍼티로 알아볼 수 있습니다. Int와 UInt는 각각 8비트, 16비트, 32비트, 64비 트의 형태를 가지고 있습니다.


var integer: Int = -100 let unsignedInteger: UInt = 50 // UInt 타입에는 음수 값을 할당할 수 없습니다. print("integer 값 : \(integer), unsignedInteger 값 : \(unsignedInteger)") print("Int 최댓값 : \(Int.max), Int 최솟값 : \(Int.min)") print("UInt 최댓값 : \(UInt.max), UInt 최솟값 : \(UInt.min)") let largeInteger: Int64 = Int64.max let smallUnsignedInteger: UInt8 = UInt8.max print("Int64 최댓값 : \(largeInteger), UInt8 최댓값 : \(smallUnsignedInteger)") let tooLarge: Int = Int.max + 1 // Int의 표현 범위를 초과하므로 오류를 냅니다. let cannotBeNegetive: UInt = -5 // UInt는 음수가 될 수 없으므로 오류를 냅니다. integer = unsignedInteger // 오류! 스위프트에서 Int와 UInt는 다른 타입입니다. integer = Int(unsignedInteger) // Int 타입의 값으로 할당해주어야 합니다.


[플레이그라운드 실행결과]




Bool 

Bool은 불리언 타입입니다. 불리언 타입은 참(true) 또는 거짓(false)만 값으로 가집니다. 

let boolean: Bool = true
let iLoveYou: Bool = true
let isTimeUnlimited: Bool = false
print("시간은 무한합니까? : \(isTimeUnlimited)")


[플레이그라운드 실행결과]



Float과 Double 

Float과 Double은 부동소수점을 사용하는 실수형이며 부동소수 타입이라고 합니다. 흔히 우리가 말하는 소수점 자리가 있는 수입니다. 부동소수 타입은 정수형보다 훨씬 넓은 범위의 수를 표현할 수 있습니다. 스위프트에는 64비트의 부동소수 표현을 하는 Double과 32비트의 부동소수 표현을 하는 Float이 있습니다. 
64비트 환경에서 Double은 최소 15자리의 십진수를 표현할 수 있는 반면에 Float은 6자리의 숫자까지만 표현이 가능합니다. 필요에 따라 둘 중 하나를 선택하여 사용할 텐데 무엇을 사용해야 할지 잘 모르는 상황이라면 Double을 사용하길 권합니다.

var floatValue: Float = 1234567890.1 
// Float이 수용할 수 있는 범위를 넘어섭니다. 
// 자신이 감당할 수 있는 만큼만 남기므로 정확도가 떨어집니다.

let doubleValue: Double = 1234567890.1 // Double은 충분히 수용할 수 있습니다. 

floatValue = 123456.1 // Float이 수용할 수 있는 범위의 수로 변경합니다.


Character 

Character는 말 그대로 ‘문자’를 의미합니다. 단어, 문장처럼 문자의 집합이 아닌 단 하나의 문자를 의미합니다. 스위프트는 유니코드 문자를 사용하므로 영어는 물론, 유니코드에서 지원 하는 모든 언어 및 특수기호 등을 사용할 수 있습니다. 문자를 표현하기 위해서는 값의 앞뒤 에 큰따옴표를 사용하여 표현합니다. 

let alphabetA: Character = "A" print(alphabetA) let commandCharacter: Character = “♡" // Character 값에 유니코드 문자를 사용할 수 있습니다. print(commandCharacter) let 한글변수이름: Character = "ᄀ" // 한글도 유니코드 문자에 속해 있으므로 스위프트 코드에 변수 이름으로 사용할 수 있습니다. print("한글의 첫 자음 : \(한글변수이름)")



[플레이그라운드 실행결과]



String 

String은 문자의 나열, 즉 문자열입니다. String은 Character와 마찬가지로 유니코드를 사용할 수 있으며, 값의 앞뒤에 큰따옴표를 사용하여 표현합니다. 


let name: String = "yagom" // 상수로 선언된 문자열은 변경이 불가능합니다. // 이니셜라이저를 사용하여 빈 문자열을 생성할 수 있습니다. // var 키워드를 사용하여 변수를 생성하였으므로 문자열의 수정 및 변경이 가능합니다. var introduce: String = String() introduce.append("제 이름은") // append() 메서드를 사용하여 문자열을 이어붙일 수 있습니다. introduce = introduce + " " + name + "입니다." // + 연산자를 통해서도 문자열을 이어붙일 수 있습니다. print(introduce)




[플레이그라운드 실행결과]



이번에 스위프트의 기초적인 문법과 데이터 타입에 대해 알아봤습니다. 다음 포스팅에서는 컬렉션 타입과 함수에 대해 알아보겠습니다. 

다음 번에 또 뵈어요~ 고맙습니다 :D





by yagom

facebook : http://www.facebook.com/yagomSoft

facebook group : https://www.facebook.com/groups/yagom/

twitter : http://www.twitter.com/yagomSoft ( @yagomsoft )

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   









저작자 표시 비영리 변경 금지
신고

'Swift > 기본문법' 카테고리의 다른 글

스위프트 시작하기  (0) 2017.05.08
Swift - 프로토콜, 익스텐션  (0) 2017.03.07
Swift - 구조체 클래스  (0) 2017.02.28
Swift - 함수, 콜렉션 타입  (0) 2017.02.06
Swift 기초문법 - 변수, 상수, 기초 데이터 타입  (0) 2017.01.25
Swift란 어떤 언어인가?  (0) 2017.01.23
Posted by yagom


오늘의 Tip

1. NSURLConnection으로 데이터 업로드하기


서버로 데이터를 전송할 수 있는 코드입니다.
자세한 설명은 생략하고 샘플코드정도 올려드립니다.

NSURLConnection으로 데이터 업로드만 할 수 있는 것은 아니기 때문에 도큐먼트를 보면서 활용방안을 좀 더 찾아보시면 많은 곳에 활용할 수 있습니다.

예제에는 이미지 업로드를 예제로 하였으나 비단 이미지 데이터 뿐만 아니라 대부분의 데이터 전송이 가능하므로 참고하시기 바랍니다.

우선 헤더에 NSURLConnectionDataDelegate를 사용할 것이라고 명기합니다.

비동기 방식으로 전송하려면 델리게이트를 사용해야 합니다.


NSURLConnectionDataDelegate는 iOS 5.0 이상부터 사용 가능합니다.

그 이하 버전은 조금 다르니 문서를 참고하세요.

데이터 전송 코드를 구현합니다.

아래 코드에서 contentType, boundary, params, filename, URL 등은 자신이 원하는 정보로 적절히 바꿔주셔야겠지요~

파라메터 없이 데이터만 전송할 계획이라면 파라메터 추가하는 부분은 없애셔도 무방합니다.

 
그리고 델리게이트 메소드도 구현해 주어야겠지요.


 NSURLConnectionDataDelegate 메소드는 위의 두 메소드 말고도 더 있으니 도큐먼트를 참고하세요.

이상입니다~




by yagom

facebook : http://fb.yagom.net

twitter : http://twitter.yagom.net ( @yagomsoft )

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 손가락 한방 꾹 눌러주고 가시는 건 어떨까요? 로그인이 필요 없습니다. ^~^ 고맙습니다~ ↓↓↓ 


저작자 표시 비영리 변경 금지
신고
Posted by yagom


티스토리 툴바