Swifter {Swift Developer}

메뉴

4. 기본 문법과 함수

[vc_row][vc_column][vc_custom_heading text=”2장 Swift 기본문법” use_theme_fonts=”yes”][vc_column_text]Swift 소스코드를 보면 왠지 JavaScript나 Ruby와 같은 어디선가 자주 보던 문법이라서 모던한 느낌이 강합니다. 타입추론에 의한 변수선언, 문자열조작, 배열, 사전등의 컬렉션도 연산자로 쉽게 접근 할 수 있는 설계로 만들어진 언어입니다. 또한, 제어문에서는 판정에 의해 자신의 로직이 담겨져 있고 유연한 오류처리와 함수블록을 벗어날 경우 이를 클린처리해주는 것도 준비되어 있습니다. 즉, 현대적인 문법으로 안전하고 원활한 소스코드를 작성할 수 있는 언어입니다.

[/vc_column_text][vc_empty_space height=”40px”][vc_separator][vc_custom_heading text=”4. 기본 문법과 함수” font_container=”tag:h3|text_align:left” use_theme_fonts=”yes”][vc_column_text]프로그래밍 언어에서 문법은 그 언어의 특징을 나타냅니다.그중 최근 프로그래밍 언어중 하나인 Swift가 수많은 언어들을 참고하여 연구하고 개발되어 다른 언어들과 비슷한 문법이 사용되고 있습니다.

예로 Javascript의 var와 같은 변수 정의는 Swift에서도 var, let으로 처리하고 있습니다. 주석은 C/C++언어와 동일하고 Objective-C언어 개발자가 적응하기 쉽도록 동일하게 구성되어 있습니다. 그리고 하나의 변수에 여러개의 값을 갖는 튜플이라는 데이터구조는 Python과 C++에서 사용중인 것입니다.

그럼 이제 프로그래밍을 시작하는 단계에서 꼭 알고 넘어가야 하는 변수와 배열의 기본적인 개념을 설명하고 튜플 사용방법과 Optional에 대해서 설명하겠습니다.[/vc_column_text][vc_custom_heading text=” (1) 기본문법” font_container=”tag:h4|text_align:left” use_theme_fonts=”yes”][vc_column_text]Swift는 새로운 개발언어이지만, 사용하는 문법은 전혀 새로운 것이 아닙니다. 지금까지 현대적인 프로그래밍 언어를 사용해본 독자라면 오히려 새로운 부분이 거의 없다고 생각할지도 모릅니다. 그렇지만, 기본적인 줄구분을 하기 위한 ;(세미콜론)등이 필요없다는 점에서 다른 언어와 다른 부분이 있기도 하기 때문에 주의할 부분도 있습니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
var num = 7; print(num)
if num <= 10 {

}
[/code]

[예제 2-01] 라인 구분[/vc_column_text][vc_column_text]

주석

주석 작성은 C/C++언어와 같습니다. “//” 다음 한줄을 작성하는 주석과 “/*”과 “*/”사이에 주석을 입력하는 방법이 있습니다. 그리고 C/C++언어에는 없는 형태는 “/* ~ */”에 의한 주석을 중첩된 형태로 작성할 수 있다는 것입니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
// 한줄 주석

/*
여려줄로
작성하는
주석
*/

/*
중첩된
/* 주석 */
처리는 이렇게 합니다.
*/
[/code]

[예제 2-02] 댓글 구성 형태
[/vc_column_text][vc_column_text]

인스턴스 변수와 메소드 호출

Objective-C언어에서는 메소드 호출시 “[ ]”을 사용하지만, Swift언어에서는 인스턴스 변수와 메소드 호출에 “.”을 사용하고 메소드 호출에서는 “( )”을 사용하여 인수를 리턴합니다. 최근 현대적인 언어 대부분이 “.”접근이 기본이 되고 있어 Swift언어에서도 큰 거부감없이 사용할 수 있습니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
// 인스턴스 변수 접근 방법
exam.age = 37

// 메소드 호출
exam.total("arg")
[/code]

[예제 2-03] 인스턴스 변수와 메소드 호출
[/vc_column_text][vc_separator][vc_custom_heading text=”(2) 문서 주석” font_container=”tag:h4|text_align:left” use_theme_fonts=”yes”][vc_column_text]Objective-C언어를 사용해본 독자라면 독특한 주석 처리하는 문법이 있다는 사실을 알겁니다. “/**”이나 “///”을 사용하여 댓글을 사용하면 소스코드가 완성된 후 그 정보가 표시되고 Headerdoc도구를 사용하면 문서화를 할 수 있다는 것입니다. 실제 프로젝트에서의 경우 Apple 표준 스타일의 API문서를 생성하는 도구인 Appledoc을 많이 사용합니다.

Swift언어의 문서 주석에 대한 형식은 크게 4가지로 라인 형식(Line Formatting), 텍스트 형식(Text formatting), 페이지 경로(Page navigation), 심볼 문서화(Symbol documentation)이 있습니다. 각 코딩 방법에 대해서는 Swift 심볼 문서용과 Playground용이 차이가 있기 때문에 기억해 두어야 합니다. 또한 다양한 명령어가 포함되어 있기 때문에 제대로 작성하면 문서화가 쉬워집니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
//: 주석 한줄
/*:
주석
여러줄 설명
*/
[/code]

[예제 2-04] Playground용 문서 주석용
[/vc_column_text][vc_column_text]

[code lang=”swift”]
/// 주석 한줄
/**
주석
여러줄 설명
*/
[/code]

[예제 2-05] 소스코드상 문서 주석용
[/vc_column_text][vc_column_text]

라인 형식(Line formatting)

라인 형식은 이름처럼 라인을 꾸미는 형식으로 Playground에서도 심볼 문서에서도 사용할 수 있습니다. 이 라인 형식에서는 7개의 명령어 “Block Quotes”, “Bulleted Lists”, “Numbered Lists”, “Code Blocks”, “Headings”, “Horizontal Rules”, “Link Reference”가 있습니다.

Block Quotes는 특정행을 하나의 블록으로 정의하는 명령어로 “>”을 사용합니다. 여러개의 행을 블록화한다면 각 행뒤에 스페이스 2개를 추가하고 줄바꿈을 지시하게 됩니다. 예제는 한줄의 블록과 여러 개의 행을 한 블록을 만듭니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
> 블록행 지정

여러 개의 행을 하나의 블록화하려면 각 행 뒤에 2개의 스페이스를 필요로 함
> 블록내 첫번쨰줄
> 블록내 두번째줄
블록외 주석
*/
[/code]

[예제 2-06] 블록행 지정
[/vc_column_text][vc_column_text]Bulleted Lists은 목록으로 만들고 싶을 때 사용합니다. “*”과 “+”, “-“ 세가지 명령은 모두 같은 목록화하고 목록 모양을 만들고 들여쓰기를 통해 구분을 할 수 있고 Numbered Lists는 번호 목록화를 보여줍니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
목록 예제
* 목록1
* 목록2
* 목록2-1
+ 목록3
+ 목록3-1
– 목록4

번호 목록 예제
1. 번호목록1
2. 번호목록2
1. 번호목록2-1
3. 번호목록3
*/
[/code]

[예제 2-07] Bulleted Lists[/vc_column_text][vc_column_text]Code Blocks은 프로그램코드 블록을 지정할 경우 사용합니다. 단, Playground와 심볼문서 공통 지정 방법과 심볼 문서만 지정하는 방법이 있습니다. 공통의 지정방법은 블록하고 싶은 부분을 4개의 이상의 공백으로 들여쓰기를 합니다. 렌더링 보기에서 소스코드 부분을 블록화합니다. 이 지정방법은 심볼 문서에서도 사용할 수 있습니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
다음 소스코드
var str = "Hello!"
print(str)
*/
[/code]

[예제 2-08] 일반적인 지정방식의 Code Blocks
[/vc_column_text][vc_column_text]심볼문서에서는 블록하는 첫번째 줄과 마지막 줄에 “”(을4개)를 추가하면 블록이 정의됩니다. 이렇게 하면 스페이스 들여쓰기는 필요없습니다.[/vc_column_text][vc_column_text]

[code lang="swift"]
/** **
다음 소스코드

var str = "Hello!"
print(str)

*/
[/code]

[예제 2-09] 심볼문서 지정방식의 Code Blocks
[/vc_column_text][vc_column_text]Headings은 제목을 표현하고 싶은 경우에 사용됩니다. “#”의 갯수로 제목 크기를 3단계로 지정할 수 있습니다. 또한 제목에 문자열의 다음줄에 “=”(제목1), “-“(제목2)의 제목의 문자수만큼 같이 배치하면 비슷하게 표현됩니다. 제목이 강조하고 단계에 따라 크기가 틀립니다.[/vc_column_text][vc_column_text]

[code lang="swift"]
/*:
"#" 제목
# 제목1
## 제목2
### 제목3
*/

/*:
"=","-" 제목
제목1
=====
제목2
-----
*/
[/code]

[예제 2-10] Heading[/vc_column_text][vc_column_text]Horizontal Rules는 4자 이상 “-“을 빈줄 다음 작성하면 구분선을 그릴 수 있습니다. “----“앞에 한줄의 빈줄을 지정해서 구분선을 그릴때 사용합니다.[/vc_column_text][vc_column_text]

[code lang="swift"]
/*:
구분선 그리기

----
*/
[/code]

[예제 2-11] Horizontal Rules
[/vc_column_text][vc_column_text]Link Reference는 주석에 링크를 추가하고 싶을 때 사용합니다.[/vc_column_text][vc_column_text]

[code lang="swift"]
/*:
[Swift LAB]: https://swifter.kr "SwiftLAB"

Web Site: [Swift LAB]
*/
[/code]

[예제 2-12] Link Reference
[/vc_column_text][vc_column_text]

텍스트 형식(Text formatting)

텍스트 형식은 문자를 장식하거나 이미지를 삽입하는 형식입니다. Playground도 심볼문서에서도 사용할 수 있고 총 6가지 형식 “Code Voice”, Escapes”, “Emphasis (Italics)”, “Images”, “Links”, “Strong (Bold)”이 있습니다.

Code Voice는 주석에 코드를 삽입하는 정의형식입니다. 소스코드로 사용하고 싶은 문자열을 “”으로 감쌉니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
변수선언 (‘var’)
*/
[/code]

[예제 2-13] Code Voice
[/vc_column_text][vc_column_text]Escapes는 마크업을 그대로 표시할 경우에 사용합니다. 본래 문자를 표시할 경우 명령 문자 앞에 “”을 추가합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
* 목록
* 이건 목록이 아님
*/
[/code]

[예제 2-14] Escapes
[/vc_column_text][vc_column_text]Emphasis (Italics)는 지정한 범위의 문자열을 이탈릭체로 표시합니다. 범위지정은 “*” 또는 “_”을 사용합니다. 그러나, ‘_’으로 지정하는 경우 ‘_ 문자열 _’처럼 앞뒤로 공백도 삽입해야 합니다. 영문 표기에 적합하지만, 한글 표기에는 적합하지 않아 크게 사용하지는 않습니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
문자열 중 일부를 * Italics * 으로 표시합니다

그리고 _ Korean _ 이렇게도 사용합니다
*/
[/code]

[예제 2-15] Emphasis
[/vc_column_text][vc_column_text]Images은 이미지URL을 지정하여 지정한 위치의 이미지를 문서에 삽입합니다. “![URL문자열]”으로 선언합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
![Swift](https://swifter.kr/wp-content/uploads/2015/10/Swift-2-770×536.jpg "이미지")
*/
[/code]

[예제 2-16] Images
[/vc_column_text][vc_column_text]Links는 주석내에 링크를 포함하는 경우에 사용합니다. “[ALT문자열](URL)”로 선언하며 지정된 링크가 연결됩니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
[SwiftLab](https://swifter.kr/)
*/
[/code]

[예제 2-17] Links
[/vc_column_text][vc_column_text]Strong (Bold)는 지정한 범위내에 있는 문자열을 굵게 표시합니다. 범위 지정방법은 “**” 또는 “__”을 사용합니다. 단 “__”을 사용할 경우 “__ 문자열 _ “형태로 문자열과 지정심볼 사이에 공백이 있어야 합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/*:
문자열을 **굵게** 표시

대한민국 대표 __ Swift __ 언어 연구소
*/
[/code]

[예제 2-18] Strong (Bold)
[/vc_column_text][vc_column_text]

페이지 경로(Page navigation)

페이지 경로는 Playground 전용 형식으로 페이지간의 링크와 이전 페이지, 다음페이지를 지정할 수 있습니다. 이 형식을 사용하면  Playground를 문서로 만들 수 있습니다. 속성은 “Named Page”, “Next Page”, “Previous Page”가 있습니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
//: [previous](@previous)
/*:
[Line formatting](Line%20formatting)

[Text formatting](Text%20formatting)

*/
//: [next](@next)
[/code]

[에제 2-19] Page navigation
[/vc_column_text][vc_column_text]

심볼 문서화(Symbol documentation)

심볼 문서화는 심볼 문서 전용 형식으로 함수나 메소드 사양을 제공하기 위해 주로 사용됩니다. 다양한 옵션들이 많아 사용하기 어렵다고 생각할지 모르지만 필요에 따라 구분하면 편리합니다.

Parameter는 매개변수 설명을 한줄로 사용합니다. 정의 형태는 “- parameter 매개변수명: 정보”로 선언하며, 여러 개의 매개변수를 한번에 정의도 가능합니다. “- parameter :” 여러개를 선언하고 다음 행에서 “- 매개변수명: 정보”에서 실제 매개변수 설명을 작성합니다.

Returns는 리턴값에 대한 설명을 작성하는 부분으로 “- returns: 설명”이고 Throws는 오류값을 설명하며 “- throws: 내용”으로 정의합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
/**
메소드 설명

– parameter txt: 텍스트내용

– returns: 리턴내용
*/
func examFunc(txt: String) -> Bool {
return true
}

[/code]

[예제 2-20] 매개변수 리턴값
[/vc_column_text][vc_column_text]그리고 메소드 설명(Description)은 작성자명, ToDo, 기타 다양한 주석을 작성할 수 있습니다. 기본적인 정의형태는 “- 심볼명: 내용”으로 구성하며 다음줄에 설명할 심볼은 두껍게 표시됩니다.

 

[참고] Description 보조표시 명령

  • – attention: 주의내용
  • – author: 작성자내용
  • – bug: 버그내용
  • – complexity: 복합적인내용
  • – copyright: 저작권내용
  • – date: 일자내용
  • – experiment: 실험 내용
  • – important: 중요내용
  • – invariant: 변하지않는내용
  • – note: 참고내용
  • – precondition: 전제조건 내용
  • – postcondition: 완료조건 내용
  • – remark: 의견
  • – requires: 필수내용
  • – seealso: 더보기 내용
  • – since: 시작시점내용
  • – todo: 처리작성 내용
  • – version: 버전내용
  • – warning: 경고내용

 

MARK/TODO/FIXME

Objective-C의 “#pragma mark”에서 메소드 목록을 알기 쉽게 표시하는 구조가 있는데 이와 동일한 기능 Swift언어는 주석에서 “MARK:”를 사용하여 Xcode의 기능메뉴에 표시되는 구조입니다. 그외 “TODO:”나 “FIXME:”를 사용할 수 있습니다. 처리를 추가하거나 변경할 경우에 메모를 남길 수 있습니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
// MARK: –
// MARK: PrivateFunc

// TODO: 처리쓰기 내용

// FIXME: 함수명 변경

[/code]

[예제 2-21] 특수 주석
[/vc_column_text][vc_separator][vc_custom_heading text=”(3) 변수” font_container=”tag:h4|text_align:left”][vc_column_text]Swift언어의 변수는 크게 2가지가 있습니다. 값을 나중에 변경할 수 있는 변수(mutable)과 나중에 변경할 수 없는 상수(immutable)이 있습니다. 즉, 값을 나중에도 변경할 수 있는 변수를 정의할 때는 “var”를 사용하고 나중에도 변경할 수 없는 상수라고 하며 “let”을 사용합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
var mVal = 9

let iVal = 10

[/code]

[예제 2-22] 변수와 상수 선언
[/vc_column_text][vc_column_text]참고로 여러 개의 변수를 한번에 선언하고 싶다면 “,(쉼표)”로 구분지어 작성하면 됩니다. “var” 변수로 사용할 경우, 사용중에 변수 값을 변경할 수 있고 “let” 상수는 처음 대입한 값은 변경할 수 없습니다.

C언어 및 JavaScript에서의 변수가 기반인 프로그래밍 언어에 익숙하다면 값이 변하지 않는다면 이해하기힘들 수도 있습니다. 그렇지만, 상수는 변하지 않는 값으로 인해 컴파일시 최적화 및 불필요한 버그를 피할 수 있는 장점이 있습니다. 즉, let을 사용하여 프로그램의 변할 수 있는 영역내에 한정하는 것이 효과적인 개발 방법입니다.

그런데 자세히 보면 변수형 정의가 되어 있지 않다는 것을 느끼셨을 것입니다.  Swift 언어에서 변수 정의시 형을 지정하지 않고 처음 할당된 값을 기준으로 알맞은 형을 결정하는 형추론이라는 구조를 가지고 있습니다. 이는 기존에 Objective-C언어로 개발해본 독자라면 var와 let만 잗성한다는 것이 Swift언어만의 장점이라는 것을 느끼게 될 것입니다. 형추론은 C++ 11의 auto처럼 컴파일할 때 이루어집니다.

그리고 Swift언어는 변수값을 안전하게 사용할 수 있도록 설계되어 있기 때문에 String형 변수에 Int형 값을 할당하는등의 다른 형을 다시 할당할 수 없습니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
var test = "대한민국" // String형
test = 369 // 다른 형의 값을 선언해서 오류가 발생
[/code]

[예제 2-22] 다른 형의 값을 입력하는 경우[/vc_column_text][vc_column_text]변수명은 유니코드로 작성할 수 있는 문자를 사용할 수 있기 때문에 예약어와 연산자등의 지정된 문자이외라면 한글과 이모티콘도 변수명으로 사용할 수 있습니다.

var 생년월일 = 790327

var 인사말 = “안녕하세요”

또한 변수를 정의할 때 형추론을 하지 않고 명시적으로 형을 지정할 수도 있습니다. 방법은 변수명 뒤에 “:”(콜론)을 추가한 후 형을 선언합니다.

var txtIntro : String

let으로 선언한 상수는 원칙적으로 정의와 동시에 값을 선언해야 합니다. 그렇지만, 클래스나 구조체의 인스턴스 변수는 예외로 정의시 값을 지정하지 않고 사용할 수 있습니다.  그외 var으로 선언한 변수와 let으로 선언한 상수는 한번 선언한 값을 변경할 수 있느냐 없느냐의 차이이외에는 없습니다.[/vc_column_text][vc_column_text]

정수형과 부동소수형

Swift언어에서 정수를 사용하는 형으로는 Int(부호가 있는 정수)와 UInt(부호가 없는 정수)가 있습니다. 그리고 처리하는 bit값에 따라 Int16, UInt32등으로 구분됩니다. Int(UInt)는 빌드플랫폼이 32비트인 경우 Int32, 64비트라면 Int64와 같은 크기입니다.

부동소수형은 Float와  Double형이 있으며 이 두가지 형의 차이점은 사용할 수 있는 수치범위가 드라고 Float는 32비트, Double은 64비트의 범위를 다룹니다. 침거러 Swift언어에서는 Float보다는 Double이 처리속도가 빠르기 때문에 특별한 이유가 없다면 Double을 사용하기 바라며 별도의 형을 지정하지 않고 소수점을 넣은 값은 Double로 처리됩니다.

 

논리형

Swift언어에서 논리형은 Bool을 사용합니다. 여기서 독자가 Objective-C언어를 사용한 경험이 있다면 BOOL형이 YES 또는 NO값으로 표현된다는 사실을 인지하고 있지만 Swift언어는 C언어나 JavaScript 등의 다양한 프로그래밍 언어를 채택하고 있기 때문에 true와 false로 나타냅니다. YES와 NO를 사용할 수 없기 때문에 코딩작업시 주의해야 합니다.

let isCheckID: Bool = true

 

문자와 문자열

Swift 언어에서는 유니코드 문자를 Character형(문자)로 처리합니다. 문자열을 다루려면 String형을 사용해야 합니다.

String형 메소드는 다양하지는 않지만, Foundation 프레임웍을 사용할 때 NSSting에서 제공하는 메소드들을 활용할 수 있습니다. 그렇기 때문에 Swift언어에서 문자열을 다룬다면 NSSting을 사용하지 않고 String형을 사용하도록 하고 문자열 리터럴은 “ “ “(큰따옴표)로 감싸면 됩니다.

let emp_name : String = “홍길동”

let emp_msg = = “자기소개하기” // String 형추론

 

정수와 부동수소점

앞에서도 이야기했듯이 Swift언어는 처음 선언한 값을 형추론을 통해 형이 결정되고 변수와 리터럴 형이 있다면 변수형이 우선시 됩니다.  아래 예는 변수 x(Int형)에 부동소수점의 값을 곱한 결과를 변수 y에 대입하는 것이지만 변수 x가 Int형이기 때문에 오류가 발생합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]</pre>

let x = 3

let y = x * 9.9 // 오류 발생

[/code]

[예제 2-24] Int형과 Double형 계산
[/vc_column_text][vc_column_text]그럼 반대로 Double형 변수 x에 정수를 곱한 경우를 살펴봅시다. 변수 x의  Double 형은 Int형을 허용하기 때문에 계산된 값이 변수 y에 저장됩니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
let x = 9.9

let y = x * 3 // 29.7 정상계산

[/code]

[예제 2-25] Double형과 Int 형 계산
[/vc_column_text][vc_column_text]즉, 형이 다른 변수를 포함한 연산 작업을 할 경우는 주의해야 된다는 것을 기억하기 바랍니다.[/vc_column_text][vc_custom_heading text=”(4) 형 별칭
” font_container=”tag:h4|text_align:left” use_theme_fonts=”yes”][vc_column_text]Swift 언어는 기존 형 명칭을 변경해서 사용하는 것이 가능하며 이것을 형 별칭이라고 말합니다. 예로 CountNum을 Int형으로 형 별칭을 정의하고 count변수에 선언해 봅시다.

typealias countNum = Int

var count : countNum = “문자열은 입력할 수 없음” // 오류[/vc_column_text][vc_custom_heading text=”(5) 튜플 (Tuple)

” font_container=”tag:h4|text_align:left” use_theme_fonts=”yes”][vc_column_text]튜플은 여러개의 값을 하나로 합쳐 취급할 수 있는 기능으로 함수의 리턴값을 편리하게 이용할 수 있습니다. 선언방법은 “( )”괄호내에 “,”(콤마)로 구분하여 여러개의 값을 설정합니다.

let httoError = (404, “페이지없음”)

그리고 튜플의 각 요소에 이름을 지정하고 이름으로 값에 접근도 가능합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
let httpError:(code:Int, msg:String) = (404, "페이지없음")

let code = httpError.code // 404
let msg = httpError.msg // 페이지없음

[/code]

[예제 2-26] 튜플 사용 예제
[/vc_column_text][vc_column_text]그리고 튜플의 요소명을 지정하지 않았을 경우에는 인덱스값을 통해 값을 호출 할 수 있습니다.

let code = httpError.0   // 404

또한 대입할 때 튜플의 요소중 불필요한 값을 제거하려면 ‘_’으로 지정합니다.

let (_, msg) = httpError[/vc_column_text][vc_custom_heading text=”(6) Optional형

” font_container=”tag:h4|text_align:left” use_theme_fonts=”yes”][vc_column_text]변수에 nil을 대입할 수 있게 하려면 개발자가  명시적으로 지정해야 합니다. 이런 경우를 Optional형으로 감싸는 것으로 컴파일에 의한 체크를 가능하게 하고 변수의 안전성을 높입니다. 그리고 독자 분들이 앞으로 Swift언어로 개발하고자 한다면 Optional 형 개념을 이해해야 하는 것을 중요합니다.

Optional 형으로 형을 감싼다는 것은 감싸고 있는 형명 뒤에 “?”을 붙입니다. 또는 형명을 Optional <형>으로 작성해서 감쌀수 있습니다. 실제 개발에서는 “?”을 붙이는 것을 선호합니다. 이유는 두번째 방법은 문자수가 길어지는 경우가 많기 때문에 가독성이 떨어집니다.

var list:Int? = nil

var msg:Optional<String> = nil

그리고 Optional 형의 값을 분리하려면 “?”을 붙이는 방법이 있지만 그것보다는 더 안전하게 Optional Binding이라는 방법을 사용합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
let chk:Int? = 3
let db:[String] = ["", "서울", "대전", "부산"]
if let unrapedChk = chk {
let sido = db[unrapedChk]
print(sido)
} else {
print("Error")
}
[/code]

[예제 2-27] Optional 형 풀기
[/vc_column_text][vc_column_text]Optional형은 함수나 메소드의 리턴값 등에 사용되는 경우가 많고 if나 switch문에도 많이 이용되어 안전성을 통해 버그를 줄이는데 도움이 됩니다.

나중에 Optional형에 대해서는 좀더 자세히 다루도록 하겠습니다.[/vc_column_text][vc_custom_heading text=” (7) 접근 제어

” font_container=”tag:h4|text_align:left” use_theme_fonts=”yes”][vc_column_text]Swift 언어는 다른 객체지향 언어처럼 접근제어가 존재합니다. 크게 3가지 종류가 있습니다. 그리고 접근제어를 사용하는 경우 var와 let, class, function 이전에 접근한정자를 선언하게 됩니다.

접근 한정자

  • publc : 모든 위치에서 접근 할 수 있고 클래스의 공개속성등에 사용됩니다.
  • internal : 정의하는 모듈만 사용할 수 있고 모듈 외부에서는 접근할 수 없습니다.
  • private : 정의하고 있는 파일에서만 접근 할 수 있고 처리르 명시적으로 은폐할 때 사용됩니다.

[/vc_column_text][vc_column_text]

[code lang=”swift”]
public class MainPublicClass {}
internal class MainInternalClass {}
private class MainPrivateClass {}

public var intPublic = 0
internal let intInternal = 1
private func checkPrivate() { }
[/code]

[예제 2-28] 접근 제어
[/vc_column_text][vc_column_text]마지막으로 접근 한정자를 생략한 경우 자동적으로 internal이 적용됩니다. 실제 사용 방법에 대해서는 차후에 다시 설명하겠습니다.[/vc_column_text][vc_custom_heading text=”(8) 콘솔 출력

” font_container=”tag:h4|text_align:left” use_theme_fonts=”yes”][vc_column_text]콘솔에 문자를 출력하려면 print()를 사용합니다. print는 문자열을 출력하는 경우 지정 문자열을 출력하며 지정한 문자열의 마지막 부분에서 자동으로 줄바꿈이 되며 전역함수이기 때문에 어디서든 호출이 가능합니다. 이 출력방법은 iOS 및 OS X앱 개발시 디버깅용 출력에 자주 사용됩니다.

let msg = “안녕하세요”

print(“(msg) 고객님!”);

클래스나 구조체, 열거형등의 정보를 문자열로 출력한다면 CustomStringConvertible 프로토콜을 사용해야 합니다. 또한 디버깅 정보 출력은 CustomDebugStringConvertible 프로토콜을 사용합니다.[/vc_column_text][vc_column_text]

[code lang=”swift”]
class SwiftLab: CustomStringConvertible {
var description: String {
return "안녕하세요"
}
}

let sLab = SwiftLab()
print(sLab)
[/code]

[예제2-29] CustomStringConvertible 프로토콜 사용
[/vc_column_text][vc_custom_heading text=”(9) 주장(Assertions)

” font_container=”tag:h4|text_align:left” use_theme_fonts=”yes”][vc_column_text]이는 강제로 예외를 발생시키는 주장이라는 기능이 존재합니다. 예로 배열등의 인덱스 범위가 초과하지 않았을 때 처리할 수 있는 값인지를 주장을 통해 확인하는 것입니다.

사용방법은 asset(구분조건, 관련메시지)로 예외를 발생시킨 내용은 선택사항입니다.

let apple = 5

assert(apple < 10, “10개미만”)[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_separator][vc_btn title=”목차로 가기” color=”blue” align=”center” link=”url:%2Fswift-2-korean-book%2F|title:%EB%AA%A9%EC%B0%A8|”][/vc_column][/vc_row]

Facebook Comments

카테고리:   Swift Books

댓글

죄송하지만 댓글은 닫혀 있습니다.