본문 바로가기

iOS 앱 개발자 프로젝트/Swift 문법 정복하기

[Swift] 객체 지향 프로그래밍 (Object-Oriented Programming)

관계란 무엇인가. 객체 지향이란 무엇인가.

 

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")