ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift) 스위프트에서 '모든 것은 객체다'
    Swift 2019. 7. 2. 15:50
    728x90

    안녕하세요. 삼쓰 입니다.

     

    오늘부터 Swift의 기본 개념을 제대로 잡아볼까해요. 요즘 개발하는데 기초적인 개념이 너무 부실하다는 느낌이 많이 드네요. 기초가 탄탄해야 높게 쌓을 수 있겠죠?! OReilly 에서 나온 Programming iOS 책을 기본으로해서 하나씩 하나씩 정리해 나가려고 합니다. 현재는 12까지 나온 것 같은데 저는 9 한글판을 많이 참고할 것 같아요. 기본적인 개념은 거의 같을테니 빠르게 정리하고 이후 최신버전과 비교하면서 정리해나갈 예정입니다! 혹 문제가 있거나 수정이 필요한 부분은 댓글로 남겨주시면 감사하겠습니다 :D

     

    스위프트에서 '모든 것은 객체다'

    스위프트는 애플이 14년도에 발표한 비교적 최신 언어입니다. 모든 것이 객체라는 철학은 현대 객체 기반 프로그래밍 언어의 두드러진 공통점이라고 할 수 있습니다. 그렇다면 도대체 '모든 것은 객체다' 라는 말은 정확히 어떤 뜻일까요? 

    짧은 문장이지만 '모든 것' 과 '객체' 라는 개념이 무엇이냐에 따라 다르게 정의될 수 있을 것 같습니다.

     

    '객체'부터 간단하게 정리해보죠. 

    객체: 메세지를 전달할 수 있는 그 무엇

    메세지: 반드시 처리해야 할 명령

     

    한마디로 우리 프로그래머 입장에서 객체란 나의 명령을 전달할 대상, 전달할 수 있는 그 무엇이 되겠네요.

    예를 들어, 키우는 강아지에게 "짖어!", "앉아" 와 같이 명령을 내리는 상황이라면

    강아지는 객체, "짖어", "앉아"는 메세지라고 할 수 있습니다.

     

    스위프트에서 메세지 전송 문법에서 가장 간단한 것 중 하나는 점표기법 (dot-notation) 입니다. 객체 뒤에 점을 찍고 메세지를 전달하는 방식인데요. 다른 언어에서도 쉽게 볼 수 있습니다. 이를 이용해 앞서 강아지에게 내렸던 명령을 다시 내리면 이런식으로 할 수 있겠네요.

     

    fido.bark()

    rover.sit()

     

    다음으로는 '모든 것' 의 의미를 한번 생각해보겠습니다. 

    '모든 것은 객체다' 라는 아이디어는 매우 원초적인 표현을 통해서도 메세지를 전달할 수 있음을 의미합니다. 앞서 강아지 객체에게 내렸던 명령을 모든 대상에게도 내릴 수 있다는 의미입니다. 1 이라는 숫자를 생각해보죠. 

    스위프트에서, 또 뿐만아니라 여타 다른 언어에서도 숫자 1은

     

    let sum = 1 + 2

     

    와 같은 방식으로 흔히 사용될 수 있습니다. 이는 정확한 문법 표현입니다. 

    스위프트에서는 1에 다음과 같은 방식으로도 명령을 내릴 수 있습니다.

     

    let x = 1.successor()

     

    여기선 잠시 코드의 의미는 무시하고 이 또한 올바른 스위프트 문법 표현 입니다. 

     

     좀 더 자세히 알아보죠. 스위프트에서는 객체 타입의 확장이 가능하며, 메세지에서 타입을 바꿔 전달이 가능합니다. 

    보통의 경우엔 1과 같은 숫자에 sayHello 라는 명령을 전달할 수는 없습니다. 하지만 스위프트에서는 다음과 같이 객체 타입의 확장이 가능합니다. 

     

    extension Int {
      func sayHello() {
        print("Hi, I'm \(self)")
      }
    }
    
    1.sayHello() // "Hi, I'm 1"

    이제 '모든 것은 객체다' 라는 말의 표현이 조금 이해 되시나요?

    보통 객체 타입 데이터 뿐만 아니라 숫자 데이터 역시 객체의 역할을 수행할 수 있음을 의미합니다.

    스위프트에서는 숫자 전용 데이터 타입은 없으며, 숫자를 포함한 모든 데이터는 객체 타입입니다. 

     

    참고: Oreilly iOS Programming

    'Swift' 카테고리의 다른 글

    KVO(Key-Value-Observing)  (0) 2019.09.20
    Swift) 배열의 중복체크  (0) 2019.07.25
    Swift) 소수점 다루기  (0) 2019.07.22
    열거형 (Enumerations)  (0) 2019.06.26
    Swift) 집합 (Set)  (0) 2019.05.18

    댓글

Designed by Tistory.