본문 바로가기
공부 공간/Swift

Swift 04. 문법

by kim_pro_ 2020. 8. 13.

◈ Swift 문법

 

1. 작성 규칙

- main 이 없어서 작성한 순서대로 실행

- entry point(시작하는 지점)를 만들고자 하는 경우에는 클래스 이름 위에 @UIApplicationMain 이라는 어노테이션을 추가해주면 됩니다.

- 변수를 선언할 때 자료형을 기재하지 않으면 자료형 추론을 해서 자료형을 설정

- 연산자 앞 뒤에 공백을 몇 개를 삽입해도 상관없지만 앞에 공백이 있으면 뒤에도 있어야 하고 앞에 공백이 없으면 뒤에도 없어야 합니다.

- try ~ catch 지원 : 대다수 클라이언트 프로그램을 만들기 때문에 잘 하지 않는데 되도록이면 해주고 개발이 끝나고 난 후 삭제하는 것이 좋습니다.

- import는 외부 라이브러리 참조용 입니다.

 

 

2. 로그. 출력 함수

1) print

- 첫번째 파라미터가 가변 파라미터로 되어 있기 때문에 여러 개 출력하고자 할 때는 ,로 구분해서 계속 입력

- separator 옵션을 이용하면 구분자를 중간에 넣어서 출력이 가능

- terminator 옵션을 이용하면 출력이 끝나고 마지막에 Enter 대신에 삽입

 

2) NSLog

- 출력할 때 날짜와 시간 그리고 파일이름등을 같이 출력

- iOS 앱 개발에서 사용 - Playground에서는 사용하지 않음

 

3) debugPrint: 자료형을 구분해서 출력 - 문자열의 경우는 따옴표를 해서 출력

 

4) dump: 인스턴스의 내용을 출력하고자 할 때 유용

- 세부 내용까지 같이 출력

 

5) 주의

- 앱 개발 도중에 로그 출력 함수를 사용했다면 개발이 끝나고 난 후 전부 삭제하는 것이 좋습니다.

- 로그를 출력하는 것도 시스템 자원을 사용하는 것이기 때문입니다.

 

6) 로그 출력 함수의 차이 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import UIKit
 
let name="steve"
let age = 50
 
//숫자 데이터는 동일하게 출력
print(age)
debugPrint(age)
 
//문자열은 print는 그냥 출력
//debugPrint는 자료형을 알 수 있게 출력
print(name)
debugPrint(name)
 
let rect =  CGRect(x: 100, y: 30, width: 100, height: 100)
 
//함수의 결과 출력
print(rect)
 
//객체의 내용을 출력
dump(rect)
cs

 

 

3. 데이터 분류

1) 변경 여부에 따른 분류

- mutable data : 변경 가능한 데이터 - 변수(Variable)

- immutable data : 변경이 불가능한 데이터 - 상수(Constant: 개발자가 의도적으로 값을 변경할 수 없도록 만든 이름, Literal: 프로그램 작성 시 개발자가 직접 입력하는 값)

 

2) 저장되는 형태에 따른 분류

- value type : 1개의 값을 저장하는 자료형

- reference type : 대표하는 값의 참조(위치)를 저장하는 자료형

 

3) 저장하는 데이터의 개수에 따른 분류

- Scala Type : 1개의 데이터 저장 - 보통은 Value Type: 이름이 데이터를 의미

- Vector Type : 0개 이상의 데이터 저장 - Reference Type: 이름은 데이터의 모임의 참조

 

4) 데이터의 모양에 따른 분류

- 정형 데이터 : 데이터의 모양이 정해진 구조 - 테이블 구조의 데이터

- 비정형 데이터 : 데이터의 모양이 일정하지 않은 구조 - 텍스트, 음성 등의 데이터

- 반정형 데이터 : 비정형의 텍스트지만 정형의 형태로 변환이 가능한 데이터 - json, xml 문자열

 

5) 언어 또는 책 마다 분류하는 방법은 다양합니다.

- 최근에는 value type 과 reference type으로 구분하는 거의 하지 않음

 

 

4. swift의 데이터 이름 생성 방법

1) 값의 변경 여부에 따라 var 와 let으로 구분

  var : 값을 변경 가능

  let : 값을 변경하지 못함

  =>var로 선언했는데 값을 1번도 변경하지 않으면 경고가 발생 -> let 으로 설정하도록

 

2) null 포함 여부에 따라 Optional 과 Optional이 아닌 자료형으로 나눔

 

3) 묵시적 자료형과 명시적 자료형

- 묵시적 자료형은 자료형을 기재하지 않는 방식으로 자료형 추론을 이용해서 자료형을 설정

- 명시적 자료형은 자료형을 기재하는 방식

 

4) Swift는 정적 바인딩

- 정적 바인딩은 데이터를 대입하기 전에 자료형을 결정하는 것

- 자료형을 미리 설정하고 컴파일할 때 잘못된 데이터가 입력되면 실행하지 않음

 

5) 변수 명명 규칙

- 영문자, 숫자, 한글, 한자, 특수문자, 이미지 용 바이너리 모두 가능

- 예약어는 변수명으로 사용할 수 없지만 대소문자를 변경하거나 작은 따옴표로 감싸면 예약어도 변수 이름으로 가능

- 연산자는 안됨

- 숫자로 시작할 수 없고 _ 이외의 특수문자도 안됨

- 중간에 공백은 안됨

 

6) 변수 생성

var 이름:자료형 = 값

- 자료형을 생략하면 자료형 추론으로 자료형 설정

- 자료형을 생략한 상태에서 값을 생략하면 에러

- 값을 생략하거나 nil을 대입할려면 자료형이 Optional이어야 함

- swift에서는 null 대신에 nil 이라고 합니다.

  자료구조에서는 null 대신에 nil 이라고 합니다.

- 변수 이름은 하나의 영역에서는 한번만 생성되어야 함

- 변수에 값을 대입할 때는 변수이름 = 값 의 형태

 

- 카멜 표기법 : 클래스 와 인터페이스(프로토콜) 이름은 대문자로 시작하고 변수 와 메소드 이름은 소문자로 시작 그리고 상수는 모두 대문자로 표기 (2개 단어이상으로 만들어진 경우 2번째 단어의 첫글자는 대문자로 시작)

 

- 헝거리언 표기법 : 변수 이름 앞에 자료형과 범위를 표기하는 방식

   블린은 b, 정수는 n, 실수는 f, 문자는 c, 문자열은 str 을 붙여서 생성, 지역변수는 _, 인스턴스 변수는 m, 전역변수는 g

   (ex. m_str: 인스턴스 변수이고 문자열 변수)

 

- iOS 11, swift 4 버전까지는 대부분의 나열형 상수가 대문자로 만들어져 있었으나 그 이후에는 대부분 소문자로 변경

 

7) 자료형

Int : 정수 기준형

Int8, Int16, Int32, Int64: 부호있는 정수

UInt8, UInt16, UInt32, UInt64: 부호없는 정수

=> 부호없는 정수가 부호가 있는 정수보다 숫자의 표현 범위가 2배 크다

 

var age:Int = 50 // Int 형 age라는 변수를 생성하고 50이라는 값을 대입

=> 0b: 2진수 - 기계가 숫자를 표현하는 방법, 0o: 8진수 - 파일의 허가 모드 설정, 0x: 16진수 - 색상값을 나타내거나 메모리의 참조를 나타낼 때 이용

 

Float - 32bit 실수이고 소수는 7자리까지 정밀하게 표현

Double - 64bit 실수이고 소수는 15자리까지 정밀하게 표현

실수 상수는 Double

이전에는 실수를 Float을 많이 사용했기 때문에 API에서는 실수 자료형이 Float 인 경우가 더 많습니다.

 

Bool - true 또는 false 저장

 

nil : 데이터를 저장하지 않는다는 참조형 리터럴

        swift에서는 모든 자료형의 변수에 nil 대입이 가능 - Optional만 붙으면

 

 

 

5. 타입 추론과 타입 명시

- swift는 타입에 안전한 언어 : 정적 바인딩 언어

  선언할 때 선언한 자료형의 데이터만 대입이 가능

- 선언할 때 선언한 이외의 자료형의 데이터를 대입하면 컴파일 할 때 에러

- swift는 변수를 선언할 때 자료형을 기재하지 않으면 반드시 초기값을 설정해야 합니다.

  이 초기값을 가지고 타입을 추론해서 사용

 

var n //이 경우는 에러 - n의 자료형을 추론할 수 없어서

var n = 10 //이 경우는 10을 보고 자료형을 추론해서 Int 로 간주

=> 타입을 반드시 명시해야 하는 경우는 nil을 저장하기 위한 것과 Int 이외의 정수 자료형 그리고 Double 이외의 실수 자료형 그리고 String 대신에 Character를 사용하고자 하는 경우입니다.

 

var x = 10 //자료형은 Int 

var y:Int32 = 10 //Int32가 자료형

 

var d = 10.4 //d의 자료형은 Double

var f:Float = 10.4 //f의 자료형은 Float

 

var str = “T” //str의 자료형은 String

var ch:Character  = “K” //ch의 자료형은 Chracter

- 개발자들은 자료형 명시를 선호

- var 대신에 let을 붙이면 변수의 값을 변경 못함 - 상수화

  이전 개발 방법론에서는 이름을 모두 대문자로 하는 것을 권장했지만 swift에서는 별다른 제약이 없음

 

- swift의 변수나 메소드 표기법은 클래스 다이어그램(UML)의 표기법

'공부 공간 > Swift' 카테고리의 다른 글

Swift 03. Playground  (0) 2020.08.13
Swift 02. Swift의 특징  (0) 2020.08.13
Swift 01. Xcode 설치하기  (0) 2020.08.13

댓글