Swift/기초 카테고리에 업로드한 모든 내용은 KxCoding 기초 강의를 토대로 작성하였습니다.

⎮ CustomData Type
스위프트에서 기본적으로 제공하는 다양한 Type이 있지만 우리에게 필요한 모든 Type을 제공하는 것은 아님
따라서 필요한 타입을 직접 만들어서 쓸 수 있음(CustomData Type)
사용자가 Data Type을 만들 때 3가지 타입으로 만들 수 있음 (Enumeration / Structure / Class)
⎮ Programming Paradigm
- 현대적인 프로그래밍 언어는 멀티 패러다임 언어
- Swift는 그 중 3가지 패러다임을 구현하고 있음(Object-Oriented, Protocol-Oriented, Functional Programing)
- Object-Oriented Programing : 객체 지향(모든 데이터를 객체로 만들고, 객체의 상태와 동작을 조작해서 원하는 기능 구현)
* 추상화(Abstraction) : 객체가 가진 여러가지 특징 중, 프로그램이 처리할 특징을 도출하는 과정
ex) 다이어트 프로그램 : 키, 몸무게, 등록일 등의 데이터를 저장하도록 추상화
- 클래스(Class) : 추상화의 결과를 코드로 표현하는 것
객체의 특징과 상태는 속성으로, 객체의 동작은 Method로 구현
Class는 객체를 만들때 사용하는 설계도 같은 개념
Class 하나를 만들어두고 필요한 수만큼 객체(Instance)를 만들 수 있음.
클래스가 만든 하나의 객체를 'Instance'라 부르며,
모든 Instance는 똑같은 이름의 속성을 가지고 있지만 저장되는 값은 다를 수 있음.
마찬가지로 똑같은 이름의 Method를 가지고 있더라도, Method의 실행결과는 Instance마다 차이가 있음.
객체들은 서로 메시지를 보내고(Sender) 받으면서(Receiver) 기능을 수행(Sending Messages)
- 구조체(Structure)
객체 지향에서는 보통 Class로 새로운 Type을 구현하지만,
비교적 작은 데이터를 사용하거나 간편식이 필요할 때는 Structure(구조체)을 사용
Class가 가진 대부분의 기능을 Structure도 가지고 있음.
(RXSwift, SwiftUI에서 함수형 프로그래밍 / 프로토콜 지향 프로그래밍에서 새로운 타입을 만들 때는 Structure로 만듦.)
⎮ Structure (구조체)
1. 구조체 문법 * 구조체의 이름은 UpperCamelCase로 작성
struct StructName {
property(속성)
method(메소드)
initializer(생성자) // 구조체는 자동으로 생성자를 제공함(memberwise initializer)
subscript(서브스크립트)
}
/*
property ~ subscript까지를 member라고 부름. member의 요소는 lowerCamelCase로 작성
멤버는 필요한만큼 선언하고, 불필요한 요소는 생략해도 됨
Type 선언에서 첫번째 Level에는 선언만 와야함.
property(속성) : Global Scope나 Local Scope에서 선언하면 변수, Type 안에서 선언하면 property
method(메소드) : Global Scope나 Local Scope에서 선언하면 함수, Type 안에서 선언하면 method
*/
struct Person {
// 속성 선언
var name: String
var age: Int
// Method 선언
func speak() {
print("Hello")
}
}
* 구조체를 선언했다고 해서 Instance가 자동으로 만들어지는 것은 아님. (설계도를 만들었다고해서 상품이 자동으로 나오는 것 X)
2. Instance 만들기(생성자 문법)
let p = Person(name: "Uddt", age: 25)
/*
위처럼 선언하면 새로운 메모리 공간이 만들어지고, 전달한 이름과 나이가 Person이라는 Type으로 저장됨.
새로운 Instance가 생성
p가 Instance의 이름이 되는 것
*/
3. 속성에 접근하기
/*
상수의 이름에 접근할 때
let name = "Paul"
name
*/
/*
속성에 접근할 때는 Instance의 이름으로 접근해야 함.
InstanceName.property
*/
p.name
p.age
4. 메소드에 접근하기
p.speak()
// Hello
* 호출할 때 이름 앞에 아무 것도 없으면 함수, 만약 .이 있으면 Method
⎮ Class (클래스)
1. 클래스 문법
class ClassName {
property(속성)
method(메소드)
initializer(생성자) // Class에서는 init이 반드시 필요함
deinitializer(디이니셜라이저)
subscript(서브스크립트)
}
/*
property ~ subscript까지를 member라고 부름. member의 요소는 lowerCamelCase로 작성
멤버는 필요한만큼 선언하고, 불필요한 요소는 생략해도 됨
initializer에서는 모든 저장 속성을 초기화 해야함
*/
class Person {
var name: String
var age: Int
func speak() {
print("Hello")
}
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let p = Person(name: "Uddt", age: 25)
2. 구조체와 동일하게 코드를 작성하면 에러가 발생함. * class는 initializer가 필수

* initializer(생성자) : Instance를 초기화하는 특별한 Method, 특정 조건을 만족할 때만 자동으로 제공.
3. 생성자 추가
init() {
name = "Uddt"
}

4. name과 age 둘다 초기화해줘야 함.
class Person {
var name: String
var age: Int
func speak() {
print("Hello")
}
init() {
name = "Uddt"
age = 25
}
}
5. Instance 만들기
let p = Person()
/*
함수와 Method는 이름으로 호출하는데, Initializer는 이름이 없음.
따라서 호출할 때 Type의 이름으로 호출함
*/
* 만약 여기서 p = person()이라고 쓰면 함수를 호출하는 코드로 오인지할 수 있음. 글자 표현 규칙을 잘 따라야함
6. 구조체처럼 parameter 2개를 전달받는 Instance로 바꾸기
class Person {
var name: String
var age: Int
func speak() {
print("Hello")
}
init(name: String, age: Int) {
self.name = name //self를 붙임으로써, 맨 위의 name 속성으로 접근하도록 명령
self.age = age //self를 붙임으로써, 맨 위의 age 속성으로 접근하도록 명령
}
}
let p = Person(name: "Uddt", age: 25)
* 만약 parameter 이름과 속성의 이름이 다르다면, self를 붙이지 않아도 됨.
'Swift > 기초' 카테고리의 다른 글
| 34. 스위프트 기초 문법[Type(3) - 클래스, 열거형 활용] (0) | 2025.02.07 |
|---|---|
| 33. 스위프트 기초 문법[Type(2) - Enumeration] (0) | 2025.02.07 |
| 31. 스위프트 기초 문법[계산기(10) - 함수 표기법, View Animation] (0) | 2025.02.06 |
| 30. 스위프트 기초 문법[계산기(9) - 문법 최적화] (0) | 2025.02.04 |
| 29. 스위프트 기초 문법[계산기(8) - 코드 분석] (0) | 2025.02.04 |