iOS/iOS Swift 개발 일기

iOS swift 문법편

Developer-Michelle 2022. 5. 31. 18:23

꼼꼼한 재은씨의 swift 문법편 p118-

 

-헤더 파일을 작성할 필요가 없다.

-대소문자 구분

관례) 1)함수, 메소드, 인스턴스명의 첫글자는 소문자

      2) 클래스, 구조체, 프로토콜 등 객체의 첫글자는 대문자

-구문 끝의 세미콜론 생략 가능

-엔트리 포인트(시작점)으로 사용되는 main()함수가 없다.

대신, @UIApplicationMain 어노테이션을 사용하여 앱을 시작하는 객체를 지정. 이 어노테이션이 붙은 객체는 단 하나뿐이어야 함.

-문자열뿐만 아니라 문자도 큰따옴표 "" 사용 (문자열, 문자 모두)

문자를 저장하는 변수나 상수의 타입은 반드시 Character타입으로 명시해주어야함. 안그러면 타입추론기에 의해 문자열로 처리됨(string)

-import 키워드를 사용하지만, 라이브러리와 프레임워크의 참조용도.

-한줄 주석, 여러줄 주석처리 모두 가능. 주석 내 주석도 가능

-try ~catch 방식의 오류 처리를 지원

(함수나 메소드가 리턴값 또는 매개변수를 이용하지 않고 외부로 직접 오류를 던질 수 있도록 하는 기능)

 

[ 3.1. 변수와 상수를 정의하는 방법 ]

-변수 선언 : var + 변수명

-상수 선언: let + 상수명

 

1. 변수 정의하는 방법 (선언과 동시에 초기화 가능 = 스위프트) var year: 선언 year = 1999 :초기화

var year = 1999 //1)정수형 변수

var message = "Hello, World" // 2)문자열 변수

 

정수형 타입의 변수는 이후로도 정수만 대입 가능, 문자열 타입의 변수에는 문자열만 대입 가능.

이후로 타입 변경 안됨. 같은 타입이 아닐 경우 변수의 값을 변경할 수 없다.

 

= 대입 연산자

 

var 키워드로 선언된 변수에 처음으로 값을 대입하는 과정 : 초기화

스위프트는 대부분 초기화 과정에서 변수 타입이 결정됨.

 

let birthYear = 1999 //1)정수형 상수

let welcomeMessage = "Hello, World" // 2)문자열 상수

 

*선언과 초기화를 분리할 수 있는가?

변수의 경우 yes, 상수의 경우는 선언과 초기화가 동시에 이루어져야 한다.

 

cf)타입 어노테이션: 변수의 타입을 직접 정의해주는 것. ex) var year: Int

 

[ 3.3 자료형 ]

문자 + 숫자 = ?

문자와 숫자를 바로 결합할 경우 스위프트에서는 이를 오류로 처리함.

값의 종류가 일치해야만 그에 맞는 처리가 가능.

단, 한가지 전제. 변수나 상수에 할당되는 값은 모두 타입 구분이 될 수 있어야 함.

스위프트에서는 변수나 상수를 정의할 때, 반드시 숫자, 문자, 문자열, 논리(참/거짓) 등 몇 가지 종류의 타입을 지정하고 그에 맞추어 사용해야 함. 이를 데이터타입(자료형)이라고 한다.

 

[3.3.1 기본 자료형]

Int

부호 있는 정수값 저장.(양수~음수까지의 정수를 저장하고자 할 때 사용)

-128 ~ 127 (256개)

-Int8, Int16, Int32, Int64까지의 서브자료형 가지고 있으며, 실행 환경의 플랫폼에 따라 유연하게 처리된다.

 

UInt

Unsigned Integer : 부호가 없는 정수. 양수만 저장 가능. 0 포함하여 1~~ 자연수 범위의 정수를 말함.

Int보다 두 배 큰 범위까지 저장 가능.

 

Double & Float

Double : 64bit 부동소수점 자료형.  (더 넓은 범위~ 더어블) - 매우 정확해야 , 또는 매우 넓은 범위의 실수값 저장. 소수점 아래 15~16자리의 값에 대한 정확도 보장. 더 세밀.

Float: 32bit 부동소수점 자료형. 소수점 아래 7~8자리까지 저장

 

Bool

true.false  두 가지 값만 가능. 주로 논리값 저장.

 

String

큰 따옴표 사용

var projectname = "iOS study"

let language = "swift"

 

Character

한개의 문자를 저장할 수 있는 단일 자료형. 큰따옴표 사용

String 타입에 저장된 문자열을 하나씩 분해하면 character타입이 된다.

var firstLetter : Character = "s"

var lastLetter : Character = "t"

 

[3.3.2 타입 추론과 타입 어노테이션]

타입 어노테이션 

: 변수나 상수를 선언할 때, 그 타입을 명시적으로 선언해 줌으로써 어떤 타입의 값이 저장될 것인지를 컴파일러에게 직접 알려주는 문법.

변수나 상수명 뒤에 콜론(:)을 붙이고, 이어서 저장될 값의 타입을 작성해주면 됨. 

타입 추론

: 변수나 상수를 초기화할 때 입력된 값을 분석하여 변수에 적절한 타입을 컴파일러가 스스로 추론하는 기능.

초기값으로 "Hello, World"가 입력되었다면 '아, 이 변수의 타입은 String타입이겠군'이라고 추론.

 

타입 어노테이션을 써야할지 말지 고민이 될 때?

결론: 반드시 타입어노테이션을 사용해야하는 다음 두가지 경우를 제외한다면, 타입을 명시적으로 선언하지 않아도 됨.

1) 선언과 초기화를 분리할 경우

//선언 + 타입 어노테이션

var year : Int

//초기화

year = 1999

 

2) 타입 추론으로 얻어지는 타입이 아닌, 다른 타입을 직접 지정할 필요가 있을 때.

타입 추론으로 얻어지는 타입이 우리가 원하는 타입이 아닐 때. 이 때에는 타입 어노테이션을 사용하여 원하는 타입을 직접 지정해주어야 함.

주로 Int대신 Double 이나 Float, String대신 Character, Double 대신 Float

 

//Int 타입으로 정의, 타입 추론

var temper1 = 3 

//Float 타입으로 정의, 타입 어노테이션

var temper2 : Float = 3

컴파일러는 이 둘의 결과를 다음과 같이 처리

temper1=3

temper2=3.0

 

var charValue = "문" // String? Character?

스위프트는 문자열과 문자 모두 큰따옴표 사용하므로. 한글자인 경우에는 값만 봐서는 문자열인지 문자인지 구분 어려움.

보통 이럴 때 컴파일러가 취하는 합리적인 판단: 더 넓은 범위의 타입으로 추론하는 것.

문자열과 문자의 관계 - 문자열이 이에 해당.

따라서 타입어노테이션 없이 변수나 상수에 한 글자 문자를 대입하면 컴파일러는 문자열로 추론. 해당 변수를 String타입으로 정의.

 

[3.3.3. 타입이 다른 변수끼리의 결합]

*타입이 서로 다른 변수들 사이의 결합*

var stmt = "꼼꼼한 재은씨의 키는"

var height = 185

var heightStmt = stmt + String(height)

 

String(문자열로 바꾸고 싶은 정수값 또는 변수)

 

정수값이나 기존의 변수를 문자열 타입으로 바꾸는 것이 아니라, 새로운 문자열 인스턴스를 만드는 것.

기존의 변수에는 아무런 영향 없이, 새로 생성하는 것.

 

*문자열 템플릿*

:변수나 상수의 값을 문자열 속에 포함시키는 방법. 정수나 실수 등 문자열이 아닌 값도 변환 과정 없이 사용할 수 있도록 스위프트가 제공하는 기능.

문자열에서 원하는 위치에 백슬래시 \ 를 입력하고, 포함하려는 값이 들어있는 변수나 상수를 괄호로 감싸면 끝.

괄호 내부에서 값을 연산할 수도 있다.

반드시 변수나 상수를 사용해야하는 것은 아님.

 

[3.3.4. 스위프트4에서 문자열 처리]

트리플 쿼우팅, 멀티 라인 문자열.

연속한 세개의 따옴표를 이용하여 여러 줄에 걸친 긴 문자열을 손쉽게 작성하는 문법.

 

쿼우팅이란?

문자열을 따옴표로 묶어 표시하는 방법. ""

문자열에 불필요하게 의미를 부여하지 말고 주어진 그대로 이해해 달라.

 

스위프트에서의 기본 쿼우팅 처리.

더블 쿼우팅.(문자열을 처리할 때 큰따옴표 사용)

"Swift" //String

"S" //Character 또는 String