Swift 튜플 및 접근 제어자

스위프트 튜플

  • 튜플은 정해지지 않은 데이터 타입의 묶음을 말한다.
  • 소괄호 () 안에 여러가지 타입을 묶어서 새로운 튜플 타입을 생성할 수 있다.
(Int, Int)
(Int, String, Int)
  • 또, 각 타입마다 이름을 지정해 줄수도 있다.
(name: String, height: Double)

튜플 예시

var person: (name:String, age: Int, height: Double)
    
print("이름 : " + person.name)
print("나이 : \(person.age)")
print("키 : \(person.height)")

스위프트의 특이 타입

  • 스위프트에는 다른 프로그래밍 언어에는 존재하지 않는 특이한 타입이 존재한다.
  • Any, AnyObject, nil이 그것이다.
  • Any는 스위프트 내의 모든 타입을 나타낸다.
  • AnyObject는 스위프트 내의 모든 객체 타입을 나타낸다.
  • 즉, 모든 클래스의 상위에 위치한다.
  • Objectiv-C NSObject를 대체하기 위해 만들어졌다.
  • nil은 데이터가 아예 없음을 나타내는 키워드이다.
  • Any의 사용 예시는 다음과 같다.
var a: Any = 3
var b: Any = 5
var c = a + b // 에러 발생. Any 타입은 + 연산자가 지원하지 않음

모듈 & 소스파일

  • 모듈이란 배포할 코드의 묶음 단위로써, 프레임워크, 라이브러리, 어플리케이션 등이 모듈의 단위이다.
  • 소스파일은 하나의 스위프트 파일을 일컫는다.

스위프트 접근 제어자

  • 스위프트의 캡슐화와 은닉화를 위해 사용되는 접근 제어자는 5가지 종류가 있다.
  • Open은 모듈 외부까지 접근 가능하다.
  • public도 모듈 외부까지 접근 가능하다.
  • internal은 모듈 내부에서 접근 가능하고, 기본 지정 값이다.
  • fileprivate은 파일 내부에서만 접근 가능하다.
  • private은 기능 정의 내부에서만 접근 가능하다.

Open vs public

  • 위의 설명에서는 Open과 public의 차이점을 알 수 없었다.
  • Open과 public 모두 전체 공개 접근 제어자이기 때문이다.
  • 단, Open은 모듈 밖에서도 클래스 및 클래스 멤버가 상속될 수 있고,
  • public은 모듈 밖에서 클래스 상속 및 클래스 멤버 재정의가 될 수 없다.

스위프트 함수 추가 문법

  • 지난 글에서 함수에 대해 알아본적이 있다.
  • 사실, 함수의 모든 문법에 대해 알아본것은 아니다.
  • 당시에는 인수 레이블(argument label)을 생략했다.

swift-function-additional

  • 인수 레이블은 함수 호출시 사용되는 이름표이고,
  • 매개변수는 함수 내부에서 사용되는 변수명이다.
  • 인수 레이블은 생략이 가능하고,
  • 생략 되었을때는 매개변수명이 인수 레이블로 사용된다.

스위프트 In-Out 키워드

  • 기본적으로 함수의 매개변수는 상수값이다.
  • 그러나 In-Out 키워드를 통해 매개변수의 값을 변수로 변경할 수 있다.
  • 다음과 같이 말이다.
func swapInts(_ a: inout Int, _ b: inout Int)
{
	let temp = a
	a = b
	b = temp
}
  • 그리고 In-Out 키워드가 적용된 함수는 함수를 호출할때 인수 앞에 & 키워드를 붙여줘야 한다.
var someInt = 2
var anotherInt = 4
swapInts(&someInt, &anotherInt)

관련 글