본문 바로가기
⌨️ Language/swift

[Swift] 변수와 프로퍼티2

by hyebin (Helia) 2024. 3. 15.

* 2023년 Apple Developer Academy @ POSTECH 에서 swift 스터디를 하며 공부한 내용입니다

 

4. 필요성

  • 데이터 보존/관리
    • 데이터 저장
      • 변수는 데이터를 저장
      • 이를 통해 값을 기억하고 필요할 때 다시 사용
    • 데이터 조작
      • 변수는 저장된 데이터를 조작.
      • ex-값을 증가시키거나 감소시키거나, 두 값을 더하거나 빼는 등의 작업을 수행
    • 데이터 전달
      • 변수는 프로그램 내에서 데이터를 전달
      • ex-한 함수에서 다른 함수로 데이터를 전달하거나 뷰 컨트롤러에서 뷰로 데이터를 전달
      • 데이터를 보존하고 필요시에 참조하고 관리하기 위한것이 변수를 사용하는 가장 큰 목적
      • 주소로 모든 것을 관리하기 어렵기 때문에 주소는 운영체제가 관리하고 우리는 변수 이름만 가지고 관리하면 변수의 이름이 붙여진 공간을 운영체제가 알아서 찾아가서 값을 넣거나 수정할 수 있음
  • 효율성
    • 코드의 재사용
      • 변수는 값을 저장하고 다시 사용할 수 있으므로 코드의 재사용성을 높여줌
      • ex-사용자의 이름을 여러 곳에서 사용
    • 프로그램의 상태 관리
      • 변수는 프로그램의 상태를 관리하는 데 사용
      • ex-게임에서 현재 점수를 저장하거나 애플리케이션에서 사용자가 마지막으로 방문한 페이지를 저장
    • 변수를 사용하면 코드의 재활용성과 가독성을 높여주고, 중복을 제거하여 유지보수를 쉽게 해준다는 장점이 있음

 

5. 명명규칙

이름 설명 예시
낙타 표기법(Camel Case)
= 소문자 카멜 표기법
- 각 단어의 첫 문자를 대문자로 표기하되 이름의 첫 문자는 소문자로 작성
- 변수명, 함수명
camelCase
userName
파스칼 표기법(Pascal Case)
= 대문자 카멜 표기법
- 각 단어의 첫 문자를 대문자로 표기하며 이름의 첫 문자 또한 대문자로 작성 
- 클래스명
PascalCase
UserName
뱀 표기법(Snake Case) - 각 단어 사이를 언더바로 구분
- 데이터베이스 테이블명, 컬럼명
snake_case
user_name
케밥 표기법(Kebab Case) - 각 단어 사이를 하이픈으로 구분
- HTML 태그 id, class 속성
kebab-case
헝가리안 표기법
(Hungarian Notation)
- 이름 앞에 변수의 타입을 접두어로 넣어주는 표기법
- ch(char), str(string), i(int), db(double), b(boolean) 
strUserName
iUserAge
  • 이름은 낙타 표기법으로 작성해야 함
  • 이름은 설명적이고 의미가 있어야 함
    • 이름은 분명하고 정확하게 변수, 함수, 혹은 다른 개체가 무엇을 나타내는지/하는지를 묘사할 수 있어야 함
  • 약어(abbreviation)나 두문자어(acronym)는 피해야 함
    • 전체 단어를 사용하는 것이 좋음
    • 다른 개발자들이 읽고 이해하기 쉽도록
  • 변수와 상수에는 명사를, 함수나 메소드에는 동사를 사용
    • 코드베이스 전체에서 각 개체의 목적을 분명하고 일관성 있게 지정할 수 있음
  • 이니셜과 두문자어를 구별하기 위해서는 대문자 사용
    • HTTP, URL, HTML
  • 부울값에는 소문자 사용
    • isDone, hasError, isEnabled
  • 변수와 상수 이름에는 낙타 표기법 사용, 타입명에는 파스칼 표기법 사용
    • 타입과 타입의 인스턴스를 구분하기 위해
  • 예외
    • 단 다음과 같은 예외 경우에는 사용 불가
    • 미리 정한 예약어 또는 키워드
    • 해당 코드 범위 내에서 미리 사용되는 기존 이름과 동일한 이름
    • 연산자로 사용될 수 있는 기호(+,-,*,/)
    • 숫자로 시작하는 이름
    • 공백이 포함된 이름
    • 함수, 메서드, 인스턴스 이름은 첫글자를 소문자로 사용하는
// Variables and Constants
let numberOfItems: Int
var firstName: String

// Functions and Methods
func calculateTotal() -> Double
func showErrorMessage(message: String)

// Types
struct Person {
    var firstName: String
    var lastName: String
}

enum Result {
    case success
    case failure
}

 

6. 선언

  • Swift에서 변수를 선언하려면 데이터 타입을 명시하고 변수 이름을 지정
var num: Int  // 정수형 변수 num을 선언 
var pi: Float  // 실수형 변수 pi를 선언 
var ch: Character // 문자형 변수 ch를 선언
  • Swift는 변수 선언 시 변수의 데이터 타입을 지정하지 않아도 됨
    • 이 경우 컴파일러가 변수의 데이터 타입을 자동으로 추론
    • 타입 추론(Type Inference)
var num = 10  // num이라는 변수에 정수형 데이터 10을 할당하고, 타입 추론을 통해 Int 타입으로 지정됩니다. 
var pi = 3.14  // pi라는 변수에 실수형 데이터 3.14를 할당하고, 타입 추론을 통해 Float 타입으로 지정됩니다. 
var ch = "a"  // ch라는 변수에 문자형 데이터 'a'를 할당하고, 타입 추론을 통해 Character 타입으로 지정됩니다.
  • 변수를 선언한 후, 변수에 값을 할당하거나 변수를 참조하여 사용할 수 있음
    • 변수의 값은 언제든지 변경할 수 있습니다
num = 20  // num 변수에 20을 할당합니다. 
pi = 3.14159  // pi 변수에 3.14159를 할당합니다. 
ch = "b"  // ch 변수에 'b'를 할당합니다.

 

7. 변수의 타입과 메모리

변수의 타입

정수

Int 일반적인 정수. 32bit 또는 64bit의 값이 됨 (실행하는 CPU에 따라 달라짐)
UInt Int와 동일하지만 +,- 부호가 없음 → 음수가 아닌 정수
Byte 8bit 폭의 값
Int8, Int16, Int32, Int64 - 값의 크기를 지정하고 변수를 사용하는 것과 같은 경우, 이것들을 이용하는 것이 알기 쉬움
- 각 변수의 bit수를 나타냄
- 부호 없는 정수 “UInt8~” 등도 갖추어짐
  • 각 비트별로 표현 가능한 정수 자릿수 크기가 다르며, .min .max를 통해 표현 가능한 정수 범위 확인 가능

실수

Float 32bit 폭의 부동 소수점 값. 소수점 6자리까지.
Double 64bit 폭의 부동 소수. 소수점 15자리까지.
Float32, Float64, Float80, Float96 - 값의 크기를 지정하여 부동 소수점을 취급하고 싶은 경우에 사용함
- Double에서도 정밀도가 부족한 경우 96bit 폭까지 사용할 있음

 

텍스트

String - 일반적인 텍스트
- 큰 따옴표 (”)로 둘러서 표현 
- +연산자, ==비교 등이 가능함
Character - 1개의 문자 텍스트 ・ 큰 따옴표 (”)로 둘러서 표현
- 유니코드9 문자를 사용하기 때문에 특수기호도 사용할 수 있음

 

부울(이진)

Bool - 논리 값
- true 또는 false
- false/true 대신 0,1을 넣어서 사용할 수 없음
- 1bit(0 or 1)

 

옵셔널

Optional - 값이 있을 수도 있고, 없을 수도 있는 변수
-  var str : String? = nil 
-  var nums : [Int]? = nil 

 

Any

Any - 모든 타입을 저장함
- 자료형을 Any으로 명시해주면, Any타입에는 Value 타입(구조체, 열거형), Reference 타입(클래스, 클로저) 상관없이 저장 가능함
var things: [Any] = []
 
things.append(1)
things.append(1.0)
things.append("sodeul")
things.append(false)        
things.append(Human.init()))        
things.append({ print("I am Sodeul!") })

 

AnyObject

AnyObject - 모든 class 타입을 저장
- 저장하려는 객체의 타입이 클래스이기만 하면 됨
var things: [AnyObject] = []
 
things.append(1)                                // Argument type 'Int' expected to be an instance of a class
things.append(1.0)                              // Argument type 'Double' expected to be an instance of a class
things.append("sodeul")                         // Argument type 'String' expected to be an instance of a class
things.append(false)                            // Argument type 'Bool' expected to be an instance of a class
things.append(Teacher.init()))        
things.append({ print("I am Sodeul!") })        // Argument type '()->()' expected to be an instance of a class

 

 

비트 bit 🆚 바이트 Byte

비트 bit 바이트 Byte
0과 1 두가지만 가질 수 있는 측정 단위 8개의 비트로 구성된 데이터의 양을 나타내는 단위
  • 1 byte = 256개의 정보 내포
    • 1 byte = 2(0과 1 두 개) ^ 8 bits = 256

 

변수의 메모리

  • Bool: 1 byte
  • Int8: 1 byte
  • UInt8: 1 byte
  • Int16: 2 bytes
  • UInt16: 2 bytes
  • Int32: 4 bytes
  • UInt32: 4 bytes
  • Int64: 8 bytes
  • UInt64: 8 bytes
  • Float: 4 bytes
  • Double: 8 bytes
  • Character: 16 bits (2 bytes)
  • String: 16 bits (2 bytes)
반응형

'⌨️ Language > swift' 카테고리의 다른 글

[Swift] 조건/반복문  (1) 2024.03.17
[Swift] 콜렉션 타입  (0) 2024.03.16
[Swift] 변수와 프로퍼티1  (0) 2024.03.15
[Swift] Escaping Closure  (1) 2023.05.20
[Swift] 접근 제어 (Access Control)  (0) 2023.02.07

댓글