Swift
스위프트(Swift) - Raw String
스위프트에서 큰 따옴표(")나 백 슬래시( \ )를 표현하기 위해선 반드시 앞에 백슬래시를 붙여 주어야한다. 다른 언어는 그런지 모르겠지만 기억상 C언어와 리눅스 또한 그러했다. 그렇다면 도대체 왜 백슬래시(\)를 붙여줘야 하는 걸까? 그 이유는 바로 큰 따옴표(")와 백슬래시( \ )가 문자열의 시작과 끝을 나타내주는 경계 문자(String delimeters)와 이스케이프 문자(Escape characters)로 사용되기 때문이다. 우리가 자주 사용해서 알겠지만 이 두 기호는 자주 쓰이며 어떠한 역할을 한다는 특징을 가지고 있다. 큰 따옴표(")는 문자열의 범위의 경계를 파악하기 위한 기호로 사용되고 백슬래시( \ )는 이스케이프 문자로 문자열 안에서 기능을 처리하기 위해 사용된다 // ""와 \가 ..
스위프트(Swift) - 구조체와 클래스 Ⅱ. 프로퍼티 - 연산 프로퍼티
스위프트에선 앞서 소개한 저장프로퍼티 외에 연산 프로퍼티를 정의하여 사용할 수 있다. 연산 프로퍼티(computed property)는 필요한 값을 제공한다는 점에서 저장 프로퍼티와 같지만, 실제 값을 저장했다가 반환하지는 않고 다른 프로퍼티의 값을 연산처리한 후 간접적으로 값을 제공한다. 이 때 프로퍼티의 값을 참조하기 위해 내부적으로 사용하는 구문이 get 구문이다. 함수와 비슷해 내부적으로 return 키워드를 사용해 값을 반환하는데, 여기서 반환되는 값이 프로퍼티가 제공하는 값이된다. 또한, 연산 프로퍼티는 선택적으로 set 구문을 추가할 수도 있다. 이는 연산 프로퍼티에 값을 할당하거나 변경하고자 할 때 실행되는 구문이다. 연산 프로퍼티 자체가 값을 저장하지 않기 때문에 이 때 할당되는 값은 연..
스위프트(Swift) - 구조체와 클래스 Ⅱ. 프로퍼티 - 저장프로퍼티
이전 포스팅에서 프로퍼티는 값을 저장하기위해 클래스나 구조체 내에서 정의된 변수나 상수라고 말한 적이 있다. 사실 이 것은 프로퍼티 역할의 일부에 불과하다. 자세히 말하자면 프로퍼티의 역할은 값을 제공하는 것이다. 굳이 저장이 아니라 제공한다고 한 것은 프로퍼티 중 일부는 값을 저장하진 않지만 값을 제공하는 특성을 가지기 때문이다. 여기서 값 저장 여부를 기준으로 프로퍼티가 나뉘게 되는데 저장 프로퍼티(Stored Property)와 연산 프로퍼티(Computed Property)이다. 이 뿐만 아니라 구조체나 클래스를 만들 때 인스턴스를 생성하는데 이 인스턴스에 소속되는 프로퍼티를 인스턴스 프로퍼티(Instance Property), 클래스나 구조체 자체에 소속되어 값을 가지는 프로퍼티를 타입 프로퍼티..
스위프트(Swift) - 구조체와 클래스 Ⅰ. 기본 개념
구조체와 클래스는 하나의 큰 코드 블록이다. 이 안에 변수나 상수를 넣어 값을 저장할 수도, 함수를 넣어 기능을 저장할 수도 있다. 값을 저장할 수는 없지만 특정 기능을 실행할 수 있는 함수와, 값을 저장할 수 있지만 혼자서 특정 기능을 실행할 수 없는 변수 상수의 특성을 모아놓은 것이라고 이해하면 쉽다. 구조체와 클래스 내에서 정의된 변수와 상수, 그리고 함수는 부르는 명칭이 조금 다르다. 변수, 상수가 구조체나 클래스 내부에 정의되면 프로퍼티(Property)라는 이름을 가지게 된다. 마찬가지로 함수 또한 구조체와 클래스 내부에 정의되면 펑션(Function)이 아니라 메소드(Method)라고 불린다. 그 이유는 변수와 상수, 함수가 구조체나 클래스 내에 들어가면 특별한 성격을 가지기 때문이다. 프로..
스위프트(Swift) - 함수(Fuction) Ⅹ. @escaping, @autoescape
@escaping @escaping 속성은 인자값으로 전달된 클로저를 저장해 두었다가, 후에 다른 곳에서 실행할 수 있도록 허용해주는 속성이다. 예제를 보자. func callback(fn: () -> Void) { fn() } callback { print("Closure가 실행되었습니다.") } /* 실행결과 Closure가 실행되었습니다. 정의된 함수 callback(fn:)은 매개변수를 통해 전달된 클로저를 함수 내부에서 실행하는 역할을 한다. 이번엔 코드를 다음과 같이 바꿔보자. func callback(fn: () -> Void { let f = fn // 클로저를 상수 f에 대입 f() // 대입된 클로저 실행 } 전달된 클로저를 다음과 같이 실행하면 'Non-escaping paramete..
스위프트(Swift) - 함수(Function) Ⅸ. 트레일링 클로저(Trailing Closure)
클로저를 다른 함수의 인자값으로 전달할 때엔 가독성을 해치는 복잡한 구문이 만들어질 수 있다. 이와 같이 말이다. value.sort(by: { (s1, s2) in return s1 > s2 }) 그래서 스위프트는 인자값으로 클로저를 전달하는 상황에서 문법을 변형할 수 있도록 지원는 문법이 있는데, 바로 트레일링 클로저 문법이다. 트레일링 클로저(Trailing Closure)는 함수의 마지막 인자값이 클로저일 때, 이를 인자값 형식으로 작성하는 대신 함수의 뒤에 꼬리처럼 붙일 수 있는 문법을 의미한다. 이 때 인자레이블은 생략되고 이 문법은 함수의 마지막 인자값에만 적용이된다는 특징이 있다. 실제 적용한 예를 살펴보자. value.sort() { (s1, s2) in return s1 > s2 } 인..