Post

스위프트 상수 변수

스위프트 상수 변수

먼저 스위프트의 데이터 타입을 본다면 다른 언어들과 비슷하게 존재한다 정수형(int), 부동소수점( float, double), 불리언, 문자, 문자열등이 있다

문자열 보간

문자열은 문자열 보간이라는 개념을 이용해서 변수, 상수, 표현식, 함수 호출을 조합해서 구성할 수있다

1
2
3
var name = "kim"
var age = 27
print("my name is \(name). i'm \(age) old")

역슬래시와 소괄호를 이용해서 문자열 내부에서 정수 계산을해서 출력하거나 변수나 상수을 출력할 수 있다

 

멀티 라인 출력

파이썬과 같이 따음표 세개를 작성해서 여러 줄을 출력할 수 있다(파이썬과 다르게 스위프트는 오로지 쌍따음표만 이용가능)

1
2
3
4
5
6
var multiline = """
asdfasdf
Fasdfasdf
asdfa
"""
print(multiline)

스위프트 상수와 변수

변수는 var, 상수는 let을 사용한다 보통 변수보다는 상수를 사용하는것을 권장한다

 

타입 어노테이션

스위프트는 데이터 타입이 안전한 프로그래밍 언어로 변수의 데이터 타입이 한번 정해진다면 그 변수는 다른 데이터 타입을 저장하지 못하고 컴파일 에러가 발생한다(파이썬은 항상 변경 가능)

타입 어노테이션은 변수나 상수을 선언할때 콜론을 작성하고 타입을 쓴느 것이다

1
var money: Int = 1000

만약 선언부에서 데이터 타입을 작성하지 않았다면 타입 추론을 통해서 데이터 타입을 지정한다(컴파일러가 지정)

타입 어노테이션 없이 상수를 선언한다면 반드시 값도 할당해야한다

 

스위프트 튜플

스위프트에서 튜플을 매우 특별한 기능을 한다 튜플은 여러 데이터 형태를 하나로 그루핑 할 수 있다 모두 동일한 타입일 필요도 없다

1
let tuple1 = (10, 3123.3123, "asdfas")

튜플에 저장된 값을 얻기 위해서 인덱스 위치를 이용할 수 있다

1
print(tuple.2)

-> asdfas가 출력된다

튜플에서 모든 값을 추출해서 각가 변수나 상수에 할당이 가능하다

1
var (a,b,c) = tuple1

만약 튜플에서 원하는 값이 있지 않다면 _를 이용해서 해당 값을 무시 할 수 있다

1
var (a,_,c) = tuple1

튜플에서 변수들을 저장할 수 있는데 이렇게 사용한다면 인덱스 대신 변수 이름을 사용하면 된다

1
2
var tuple2 = (a:1,b:"sdfasd",c:223.112)
print(tuple2.b) //: 출력

 

옵셔널

변수 또는 상수에 값이 아직 반영이 안될 수 있다(값이 이후에 저장되는 경우) 이때 할당되지 않은 상황을 처리하기 위해서 변수 타입을 미리 선언하는 것이다

옵셔널을 사용하기 위해서는 변수나 상수을 선언할때 데이터 타입 뒤에 ?를 이용한다

1
var data: Int?

이제 변수 data는 어떤 값도 할당되지 않은 nil의 값을 가진다

만약 옵셔널을 사용하지 않고 선언을 한경우는 어떻게 되는지 확인해봤다

옵셔널을 사용하지 않고 어노테이션만 작성한 경우는 값이 없다면 오류를 출력한다 하지만 옵셔널을 이용했다면 초기 초기화를 안해도 nil이 할당되어 있어 오류가 발생하지 않는다

만약 옵셔널에 값이 할당 되었다면 해당 값이 옵셔널 내에서 wrapped래핑 되었다고 말한다 옵셔널 안의 래핑된 값을 사용할 때는 강제 언래핑이라는 것을 사용한다

강제 언래핑

옵셔널의 값을 사용할려면 !를 사용해야 한다 아니면 오류 발생

강제 언래핑 대신 옵셔널로 할당된 값은 옵셔널 바인딩을 이용해서 임시 변수나 상수에 할당할 수 있다

옵셔널 바인딩

옵셔널 바인딩은 2가지 작업을 거친다

  1. 옵셔널에 값이 있는지 확인
  2. 옵셔널에 값이 있다면 할당한다
1
2
3
4
5
6
7
8
9
var index: Int?
index = 3
var treeArray = ["Oak", "Pine", "Yew", "Birch"]
//: 구문이 옵셔널 바인딩
if let myvalue = index {  //: index 값이 존재한다면 할당
    print(treeArray[myvalue]) //:할당된 값을 이용한다
} else { //: 할당이 안된다면 실행
    print("index does not contain a value")
}

옵셔널 바인딩된 값은 myvalue에 임시 할당되는 것이라 myvalue는 if 구문에서만 활용할 수 있다 if 구문이 끝나면 이 상수는 더이상 존재하지 않는다

임시로 할당하는것이 불필요해서 if-let구문으로 줄일 수 있다

1
2
3
4
5
6
7
8
9
var index: Int?
index = 3
var treeArray = ["Oak", "Pine", "Yew", "Birch"]
//: if let 구문
if let index {  //: myvalue = 부분 삭제
    print(treeArray[myvalue]) 
} else { 
    print("index does not contain a value")
}

암묵적 언래핑

암묵적으로 언래핑이 되도록 선언하기 위해서는 옵셔널을 선언할때 ? 가 아닌 !를 사용하면 된다 -> !나 옵셔널 바인딩이 불필요함, 일반적인 변수처럼 사용한다

옵셔널과 일반적인 타입 어노테이션과 다른점은 아무 값을 할당 안하거나 nil값을 할당할 수 있다 다른 타입은 nil 할당시 컴파일 오류 발생

 

타입 캐스팅

스위프트 코드를 작성할 때 컴파일러가 어떤 값의 특정 타입을 식별하지 못하는 경우가 발생한다 이런 경우는 메서드나 함수가 반환하는 값이 불분명하거나 예상되지 않은 타입의 값일때 발생한다 as를 사용해서 타입캐스팅 (형 변환)을 해야한다

업캐스팅: 클래스 객체가 상위 클래스들의 하나로 변환 as 사용

다운캐스팅: 클래스에서 드 하위 클래스로 변환 as! 사용

타입 체크

is를 사용해서 타입 검사를 할 수 있다 해당 인스턴스가 클래스의 인스턴트인지 확인한다

1
2
if myObject is NewClass {
} //: myObject 인스턴스가 newclass인지 확인한다
This post is licensed under CC BY 4.0 by the author.