쥐수의 공부노트

01. Swift로 iOS 코딩하기 본문

swift 문법

01. Swift로 iOS 코딩하기

쥐수 2022. 7. 24. 03:04
728x90

Swift로 iOS 코딩을 위해 XCode 설치를 하여야 한다.

https://itunes.apple.com/us/app/xcode

 

1. Playground

XCode의 기능 중 하나로, 프로젝트를 열지 않고 Playground를 통해 코드를 실행하는 것이 가능하다.

위 화면과 같이 Playground는 실행 결과를 바로 볼 수 있는 장점이 있어 간단한 코드를 테스트할 때 유용하게 사용 가능하다.

 

2. 변수

Swift에서는 변수라는 말이 애매모호하다. 다른 언어에서는 값을 변경 가능하면 변수, 변경할 수 없으면 상수라는 표현을 하는데,

Swift에서는 다른 언어라면 변수로 선언하여 사용하는 값들도 상수로 선언하기 때문이다.

name과 age는 변수이고, bornIn은 상수이다. 변수는 12줄 코드와 같이 값을 변경하는 코드를 입력하여도 오류가 발생하지 않지만, 13줄 코드인 bornIn은 상수이기 때문에 변경하는 코드를 입력하면 위와 같은 오류가 발생한다.

 

3. Swift는 "type-strict"한가?

C와 Java와 같이 type-strict 한 언어들은 변수/상수를 선언할 때 반드시 type을 적고, JavaScript와 같이 그렇지 않은 언어들은 type을 적지 않는다. 

Swift는 어떤 언어보다도 type strict 하다. 예제를 보자.

위 예제에서 name이라는 변수에 문자열 "GyonG"을 넣었다. 그다음 name 변수에 12를 넣게 되면 오류가 발생한다.

5번 코드로 인해 name의 type은 string이기 때문에 , Int인 12를 담을 수 없어 오류가 발생하는 것이다.

하지만 아까 Swift는 그 어떤 언어보다도 type strict 하다고 하였는데, 왜 type를 쓰지 않았던 것일까?

 

사실 위의 코드와 아래의 코드는 동일하다.

아래의 코드를 보게 되면 name:String이라는 것은 name이라는 변수를 생성하는데 , 이 변수의 type은 String이다 라는 것을 나타내는 코드이다. 

하지만 Swift에서는 Type-Inference라는 것이 있어 , 컴파일러가 무슨 타입인지 알아낼 수 있으면 생략해도 되는 특성이 있다.

컴파일러는 "GyonG"를 변수에 저장할 때 , "GyonG"가 문자열이라는 사실을 알 수 있다. 따라서, type을 생략할 때는 프로그래머와 컴파일러가 모두 혼란을 겪지 않도록 명확히 구분해야 한다. 

위 코드에서 seconds에 3.3을 대입하므로 seconds의 type은 Double이다. 여기에 Int type인 4를 넣게 되면 변환이 가능하기 때문에 문제가 나타나지 않는다. 하지만 value는 10이라는 숫자를 대입하므로 Int type이 되는데, Double type인 4.2를 넣게 되면 에러가 나타나게 된다. 따라서 value에 value:Double처럼 type을 지정하고 넣어주게 되면 오류를 해결할 수 있다.

 

4. var와 let을 구분하기 좋은 방법 

왼쪽 코드를 보게 되면 17줄 코드에서 value를 var로 지정하여 선언을 하였다. 

그러면 Swift2.0 이상부터는 let을 추천해준다. value라는 변수의 값이 바뀌지 않는 것을 계산하여 let으로 선언하게끔 도와주는 역할을 하게 된다. 따라서 본인이 mutable/immutable 구분이 잘 되지 않는다 판단하면 무조건 처음 값의 선언을 let으로 선언하자. let으로 선언한 뒤 컴파일러가 위와 같은 에러를 보여주게 되면 let에서 var로 변경을 하면 된다.

 

5. print

보통 print를 하게 될 때 문자열 형태로 바꾸어서 출력하는 것이 보기에 편할 때가 있다.

위 코드와 같이 문자열 중간에 escape를 하여 변수 값을 넣는 기법을 Interpolation이라 칭한다.

Swift에서는 \(pi)처럼 문자열 중간에 입력을 하게 되면 pi의 값이 출력이 된다.

위 코드와 같이 값이 대입되기만 해도 그 값을 출력해주는 기능이 있기 때문에 계산식이나 함수 호출 등이 사용되어도 무방하다.

728x90