* 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 |
댓글