- 필요한 기능을 객체로 구현하여 사용한다는 것이 바로 객체지향 언어의 핵심
- 객체를 만들어내는 주요 대상이 바로 구조체와 클래스이다
- Swift는 객체지향 언어라는 것을 명심할 것 ❗️
struct 구조체_이름 {
//구조체 정의 내용
}
class 클래스_이름 {
//클래스 정의 내용
}
- 프로퍼티: 구조체와 클래스 내부에서 정의된 변수나 상수
- 메서드: 함수를 정의하여 특정 기능을 정의(구조체나 클래스 내부에서 작성된 함수라고 생각하면 됨)
//해상도 정보 관리 구조체
struct Resolution {
var width = 0 //프로퍼티
var height = 0 //프로퍼티
//메서드
func desc() -> String {
return "Resolution 구조체"
}
}
//비디오에 대한 정보 관리 클래스
class VideoMode {
var interlaced = false //프로퍼티
var frameRate = 0.0 //프로퍼티
var name: String? //프로퍼티
//메서드
func desc() -> String {
return "VideoMode 클래스"
}
}
- 우리가 정의한 클래스나 구조체를 그대로 사용하여 값을 저장하거나 메서드를 실행할 수 없음.
- 값을 저장하거나, 메서드를 실행하는 데에 필요한 메모리 공간을 할당받지 못했기 때문
- 이때 메모리 공간을 할당받은 것이 바로 인스턴스
let insRes = Resolution()
let insVMode = VideoMode()
📚 insRes
, insVMode
는 인스턴스
let width = insRes.width
print("insRes 인스턴스의 width 값은 \(width)입니다")
//insRes 인스턴스의 width 값은 0입니다
- 객체의 프로퍼티를 초기화하기 위해, 구조체나 클래스 이름 뒤에 인자값을 넣어주기도 함
- ❗️옵셔널 타입으로 선언되지 않은 모든 프로퍼티❗️는 초기화가 필요
- 클래스나 구조체의 모든 프로퍼티는 적어도 인스턴스가 생성되는 시점까지는 반드시 초기화되어야 함
let defaultRes = Resolution()
📚 인스턴스 생성 역할만
📚 객체의 모든 프로퍼티는 선언과 동시에 초기값이 지정되어 있어야 함
let defaultRes = Resolution(width: 1024, height: 700)
print("width: \(defaultRes.width). height: \(defaultRes.height)")
//width: 1024, height: 700
📚 Resolution
구조체의 width
, height
프로퍼티 초기화를 위한 인자값을 받음
📚 내부적으로 프로퍼티 초기화
let defaultVMode = VideoMode()
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
cinema.width = 2048
print("cinema 인스턴스의 width 값은 \(cinema.width)입니다")
//cinema 인스턴스의 width 값은 2048입니다.
print("hd 인스턴스의 width 값은 \(hd.width)입니다")
//hd 인스턴스의 width 값은 1920입니다
let video = VideoMode()
video.name = "Original Video Instance"
print("video 인스턴스의 name 값은 \(video.name!)입니다.")
//video 인스턴스의 name 값은 Original Video Instace입니다.
let dvd = video
dvd.name = "DVD Video Instance"
print("video 인스턴스의 name 값은 \(video.name!)입니다.")
//dvd 인스턴스의 name 값은 DVD Video Instace입니다.
출처)
꼼꼼한 재은씨의 스위프트: 문법편