티스토리 뷰

변수와 상수

  변수
(Variable)
상수
(Constants)
설명 변할 수 있는 데이터(자료)를 담을 수 있는 메모리 공간 변하지 않는 데이터(자료)를 담을 수 있는 메모리 공간
선언 var let
특징 차이 값 변경이 가능(mutable) 값 변경이 불가능(immutable)
공통   - 이름은 식별자로 한 영역에 유일한 하나의 이름만을 사용.
  - 이름 중간에 숫자가 들어가는 것은 괜찮지만 숫자가 첫글자로 시작하는 것은 안 됨.
  - Swift 는 관습적으로 Camel case (ex: swiftVar) 기법을 권장함.

 

 

문자열 보간법(String Interpolation)

let nickName: String = "신규유저"
var year: Int = 2021
print(“안녕하세요, \(nickName)입니다. \(year)년에 입사했습니다.”)
  • 문자열 내에 변수나 상수 값을 삽입하는 기술
  • 문자열 내에 변수나 상수 값을 동적으로 삽입할 수 있어 코드 가독성과 유지보수성을 향상시킬 수 있음
  • 각 언어마다 규칙이 다름. Swift에서는 \(변수명) 형태임.

 

데이터 타입(Data Type)

  • Swift에서는 모든 데이터 타입의 시작에는 대문자를 사용함.
  • 한정된 메모리 공간을 효율적으로 사용하기 위한 수단
  • 프로그래밍에서 발생하는 오류를 방지
  • 코드의 안정성을 올릴 수 있음
타입 설명
숫자 정수
(Integer)
Int Int의 가장 큰 값은 9,223,372,036,854,775,807 임.(몰라도 되긴 함)
실수
(Floating-point Number)
Float
 - 부동소수(floating-point) 타입
 - 소수점 표현 가능

 - 정수, 소수 모두 합쳐 6자리까지 정보를 정확하게 저장
 - 6자리를 벗어나면 반올림 등의 가능성 있음
 - 4Byte
예) 3.14195
☑︎ CGFloat
Core Graphics 및 관련 프레임워크의 부동 소수점 스칼라 값에 대하 기본 유형
64bit CPU - 64bit
32bit CPU - 32bit


☑︎ 이 두 타입은 정밀도에서 차이가 있음
☑︎ 지수와 가수를 나누어 복잡한 알고리즘으로 저장함
Double  - Float의 두 배 공간을 가짐
 - 소수점 표현 가능

 - 정수, 소수 모두 합쳐 15자리까지 정보를 정확하게 저장
 - 15자리를 벗어나면 반올림 등의 가능성 있음
 - 8Byte 
예) 3.14159265358979
문자 문자 Character 하나의 문자(단 1개의 글자)
유니코드 사용
예) "A", "a", "가", " "(공백문자) 등
☑︎ Character 타입은 String 타입에 넣을 수 없음
☑︎ 문자/문자열은 쌍따옴표("")로 감싸줌
문자열 String 여러 개의 문자
예) "ABCD", "문자열입니다.", ""(빈 문자열)
논리 자료형 Bool 참(true) 또는 거짓(false)
Collection Type
(자료형 타입)
Array
  • 데이터를 순서대로 저장
  • 배열의 인덱스는 0부터 순서가 지정
  • 순서가 있기 때문에 배열의 데이터는 중복 가능
  • 한개의 배열에는 동일한 데이터 타입만 담을 수 있음.
Set
  • 수학에서의 집합과 비슷한 연산을 제공하는 순서가 없는 컬렉션
  • 생김새는 배열과 같음. 생성시 타입을 선언 해야함
  • 수학에서의 집합과 동일하기 때문에 요소는 유일해야 함.
    순서가 존재하지 않음
Dictionary
  • 데이터와 키와 값으로 하나의 쌍으로 만들어서 관리하는 컬렉션
  • 대괄호 묶음 각 요소(element)는 키(key) 와 값(value)의 쌍을 클론으로 처리 해야 함.
열거형
(Enumerations)
enum
  • 타입 자체를 한정된 사례 (case ) 안에서 정의 할수 있는 타입
  • 열거형을 사용하면 코드의 가독성과 안정성이 높아짐 ===> 명확한 분기 처리 가능
기타
UInt 부호가 없는 정수(양수)
예) UInt16, Uint32 등
☑︎ Int 타입은 UInt 타입에 넣을 수 없음
Tuple
 - var user = ("신규유저", "개발자", 2021)
 - var getData = ( a(), b(), c())
 - var userData = ( nick: "신규유저", job: "개발자", since: 2021)

 - 원하는 연관된 데이터의 조합으로 어떤 형태든 만들 수 있는 타입

 - 변수를 선언과 동시 해당 멤버(데이터의 종류 및 갯수)가 결정되므로 추가/삭제 불가
 - function
도 담길 수 있음.
 - tuple 내부에 접근방법
    ✔︎ named tuple(각 데이터에 이름이 붙은 튜플)일 경우 변수명.데이터 이름으로 가능.
         user.nick
    ✔︎ 이 외에는 변수명.해당 데이터의 순서로 가능. 요소가 첫 번째일 경우
         user.0

 - 튜플의 각 요소를 상수/변수화 (바인딩) 가능함.
    var (nick, job, since) = ("신규유저", "개발자", 2021)
    print(nick)

- 함수는 원칙적으로 리턴값이 한개만 존재하기 때문에 여러개의 값을 반환할 수 없지만, 어떤 묶음 값으로 반환하는 것은 가능

 - C언어의 Struct(구조체)를 생각하면 이해하기 쉬움.

 

 

변수와 타입

타입 주석  - 변수나 상수의 타입을 명시적으로 작성
 - 의도한 타입과 일치하지 않을 경우에도 오류를 빠르게 파악 가능
 var nickName: String = "신규유저"
타입 추론  - 코드 작성 시 컴파일러가 변수나 상수의 타입을 추론하여 자동으로 할당하는 기능
 - 타입을 직접 명시적으로 작성하지 않아도 됨
 var nickName = "신규유저"
타입 안정성  - 변수나 상수의 타입이 컴파일 타임에 결정되어 런타임 오류를 방지
 - 변수나 상수의 값이 해당 타입에 맞지 않을 경우 컴파일 시점에서 에러를 발생시켜 수정하게 함.
 - 데이터 타입을 명확하게 구분하여 코드를 더욱 안전하게 작성할 수 있음.
 var number: Int = 10
 number = 3.14
 number는 Int인데 3.14는 Double이므로 오류

 

 

타입 변환

type 변환 시 변환되지 않거나 데이터가 유실될 수 있음.

var str: String = "123"
var num = Int(str)

String "123" ▶︎ Int("123") ▶︎ Int 타입 123

 

var str: String = "안녕"
var num = Int(str)

String "안녕" ▶︎ Int("안녕") ▶︎ 값이 없으므로 nil

 

var pi: Double = 3.14
var num = Int(pi)

Double 3.14 ▶︎ Int(3.14) ▶︎ Int 3

 

 

타입 별칭(Type Alias)

기존 타입에 별칭을 붙일 수 있음.

typealias Name = String

String을 Name이라는 별칭으로 사용

Built-in Data Type 혹은 Custom Data Type에 별칭을 붙여 가독성을 높이고자 할 때 사용

 

 

연산자(Operator)

같은 타입 끼리 연산 및 저장 가능

피연산자 개수 단항 연산자
(Unary Operator)
 - 단일 대상의 바로 앞 또는 바로 뒤에 위치하는 연산자
 - 공백 없이 붙여서 작성
+a, -a, !a, a
이항 연산자
(Binary Operator)
 - 두개의 대상에서 가운데에 위치하는 연산자
 - 양쪽에 공백 1칸씩 두는 것이 일반적임
 - 공백이 없어도 되지만 한 쪽만 있거나 없으면 안 됨. 
a + b, a - b, a % b, a>=b
삼항 연산자
(Ternary Operator)
 - 모든 연산자 사이에 공백을 한 칸씩 추가함. a ? b : c

 

이항 연산자
(Binary Operator)









할당 연산자
(Assignment)
 변수에 값을 대입(할당)할 때 사용 a = b, a = b + c
산술 연산자
(Arithmetic)
+
더하기 연산자
a + b
-
빼기 연산자
a - b
*
곱하기 연산자
a * b
/
나누기 연산자 (몫)
a / b
%
모듈로 연사자 (나머지)
a % b
복합 할당 연산자
(Compound Assignment)
기존 변수의 값을 가져와 다른 연산을 함 a = b + c, a = b + 3
비교연산자
(Comparison)
== 같다 a == b
!= 같지 않다 a != b
> 크다(초과) a > b
< 작다(미만) a < b
>= 크거나 같다(이상) a >= b
<= 작거나 같다(이하) a <= b
논리연산자
(Logical)
! ~이 아닌
!true : 참이 아닌
!false : 거짓이 아닌
!a
&& 그리고 (And) a && b
|| 또는 (Or) a || b

 

연산자에는 우선순위가 존재함.

←  높음                                                                                                                                          낮음  
* / % + - == != > < >= <= ~= && || 삼항연산자 할당

 

접근 연산자(access operator)

  • 객체의 속성(property)이나 메소드(method)에 접근할 때 사용하는 연산자
  • 점 연산자(.)와 슬래시(/) 연산자가 존재
  • 점 연산자(.) : 객체의 속성이나 메소드에 접근할 때 사용
  • 슬래시(/) 연산자 : 파일 경로를 나타낼 때 사용
  • 예) a.count, Int.random(in: ... 10)

 

삼항 연산자(Ternary Conditional Operator)

  • 삼항 연산자 == 조건 연산자 == 인라인 조건문 == 삼항 조건문
  • a = b ? c : d
  • ?(물음표) 기준 앞은 앞에 조건의 참/거짓 여부를 묻는 직관적인 표현
  • 물음표 기준 뒤는 조건의 결과에 따라 실행할 실행문
  • 조건이 참일 경우 :(콜론)의 앞문장, 거짓일 경우 :(콜론)의 뒷 문장을 실행함.
var nick = nickName == "신규유저" ? "맞습니다" : "아닙니다"
var result = points >= 60 ? points >= 90 ? "고득점 합격" : "합격" : "탈락"

변수 nick은 nickName이 신규유저와 같으면 맞습니다, 아니면 아닙니다를 갖게 됨.

변수 result는 points가 60점 이상이자 90점 이상이면 고득점 합격, 60점 이상이면 합격, 이 외는 탈락을 갖게 됨.

 

이 두가지를 조건문으로 풀어쓰면 아래와 같음.

var nick:String

if (nickName === "신규유저") {
	nick = "맞습니다."
} else {
	nick = "아닙니다."
}

 

 

 

 

var result:String

if (points >= 60) {
	if(points >= 90) {
    	result = "고득점 합격"
    } else {
    	result = "합격"
    }

} else {
	result = "불합격"
}

삼항 연산자 단독으로 쓰이기 보다 결과 값을 대입하는 데 주로 사용.

 

 

범위 연산자(...)

  • 제한된 숫자의 범위를 표기하기 위한 연산자
  • 자체가 특별한 타입을 의미
  • 내림차순 형식으로 표기 불가능. (내림차순으로 변환은 가능)
  • 실수 형식의 범위 가능. (사용하는 경우 드뭄)

  • switch문에서 패턴 매칭에 사용/ 정수인 경우 for문과 함께 사용 / 배열의 서브스크립트 문법과 함께 사용 이런 특정한 경우에 사용됨.
Closed Range Operator (폐쇄 범위 연산자) Half-Open Range Operator (반폐쇄 범위 연산자)
1...10 : 1~10
1... : 1~
...10 : ~10 (정수)
1..<10 : 1~9
..<10 : ~9
해당 값을 포함하면서 범위를 정의.
한 방향은 열리도 록 정의하는 것도 가능(One-Sided Ranges)
(앞의 값은 포함) 뒤의 값을 포함하지 않고, 범위를 정의.
한 방향은 열리도록 정의하는 것도 가능 (One-Sided Ranges)
ClosedRange<Int>
PartialRangeFrom<Int>
PartialRangeThrough<Int>
Range<Int>
PartialRangeUpTo<Int>

One-Sided (단 방향 범위 연산자)로 표기 할때는 숫자와 붙여서 씀 (빈칸 허용 x)

 

패턴매칭 연산자(~=)

  • 범위연산자와 함께 쓰임.
  • ~= : 패턴매칭 연산자 → 오른쪽에 있는 표현식이 왼쪽의 범위에 포함되는 지에 따라 참과 거짓을 리턴한다.
var version = 15

1...5 ~= version // false
6...10 ~= version //false
11...15 ~= version //true
16...20 ~= version // false

 

 

✔︎ 위 내용은 앨런 Swift문법 마스터 스쿨(온라인 Bootcamp) 및 기타 자료를 바탕으로 정리한 것입니다.

반응형
LIST
댓글
링크
공지사항
최근에 올라온 글