관계란 무엇인가. 객체 지향이란 무엇인가.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/024.gif)
swift라는 객체 지향의 세계에서는 관계 맺기를 잘해야 코딩을 잘 할 수 있다고 합니다.
경험이 쌓일수록 이해도가 높아지겠지만, 일단은 현 수준에서 OOP에 대해 다시 정리해 봅니다.
객체란 무엇인가
메세지를 전달 받을 수 있는 대상, object.
푸바오에게 "일어나!"라고 한다면 푸바오를 객체라 할 수 있다.
말 그대로 대상을 나타내는 단어라고 생각해도 된다.
4월 3일 푸바오가 유학을 떠난 간 쓰촨성 선수핑 기지에는
나이도 출신도 다른 90여 마리의 판다들이 있는데 이들도 모두 객체가 될 수 있다.
(부디 우리 푸바오가 여러 객체들과의 관계를 잘 맺으며 객체 지향적인 삶을 살기를.. )
푸바오의 친구 판다들 모두 각자의 데이터, 타입(상태)와 메서드(행위)를 가지고 있는데,
클래스라는 형태(틀)로 사용해 각 친구들의 상태와 행위를 실체화 할 수 있다.
객체가 될 수 있는 것 - 세 가지
struct, class, enum
objective-c 에도 struct와 enum가 있긴 하지만,
class 또는 class 인스턴스만 객체가 될 수 있고 struct와 enum은 객체가 될 수 없었다.
(이 사실은 Cocoa와 objective-C가 어떻게 서로 연동되어있는지를 파악할 때 상당히 중요하다.)
object-c 만 존재했던 과거와 달리
swift 의 객체 지향 세계에서는 struct 와 enum 도 객체가 될 수 있다.
객체에게 메세지를 전달하는 방법
객체.메세지
객체에 .을 찍고 메세지를 입력하면 된다.
푸바오에게 일어나!라는 메세지를 전달할 때는 fubao.wakeup() 과 같은 표현이 된다.
"fubao"라는 string 뿐만 아니라 int 1도 객체가 될 수 있는데,
int 1은 인스턴스화 된 struct로 객체가 될 수 있기에 아래와 같은 메세지 전달(호출)이 가능하다.
extension Int {
func hi() {
print("hi, I'm \(self)")
}
}
1.hi() // outputs: "hi, I'm 1"
변수와 객체의 관계
변수(variable)는 객체의 이름 또는 객체를 담는 상자라고 표현할 수 있는데,
기술적으로는 객체를 참조한다고 표현한다.
변수가 객체일 때 “값을 바꾼다(mutation)”는 두 가지 의미가 있을 수 있다.
객체의 속성을 바꾸는 것도 될 수 있고, 변수가 가리키는 인스턴스를 바꾸는 것도 될 수 있다.
// 1. 객체의 속성을 바꾼다.
var person = Person(name: "John")
person.name = "Jane"
// 2. 변수가 가르키는 인스턴스를 바꾼다.
var person = Person(name: "John")
person = Person(name: "Jane")
'iOS 앱 개발자 프로젝트 > Swift 문법 정복하기' 카테고리의 다른 글
[Swift] HOF == My HOPE (High-order function) (5) | 2024.05.02 |
---|---|
[Swift] String interpolation (0) | 2024.04.27 |
[Swift] Inheritance & Override (2) (0) | 2024.04.10 |
[Swift] Closure, Higher Order Function (2) (0) | 2024.03.31 |
[Swift] Struct vs. Class (2) | 2024.03.28 |