전체 글

전체 글

    Xcode에서 알고리즘 문제 풀기 전 설정하기

    처음에 알고리즘 문제를 풀기 시작하려고할 때 어떻게 시작해야할지 막막했던 경험이 있다. 어떻게 환경을 세팅하고 시작해야하는지 알아봅시다. 가장 먼저 파일을 하나 만들어야합니다. 파일을 만들 때에는 macOS에서 Command Line Tool로 파일을 만듭니다. 플레이 그라운드로 하면 안됩니다!!! 파일을 만들었으면 이렇게 Newgroup으로 새로운 폴더를 만들어 줍니다.(백준, 프로그래머스 등등...) 폴더로 만들어 문제들 관리하기 위해서!!! 그 후 메인 파일에서 코드를 작성후 실행시켜주면 잘 실행되는 것을 확인할 수 있습니다. main.swift 파일에서 문제를 풀고나면 파일 이름을 문제 번호로 바꾸고 해당 문제 폴더에 옮겨줍니다. 이렇게 옮겼으면 다시 새로운 main파일을 만들어 문제를 풀어나가면..

    스위프트(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 } 인..

    스위프트(Swift) - 함수(Function) Ⅷ. 클로저(Closure)

    전 포스팅에서 마지막에 언급한 클로저는 지금 말하는 클로저와 조금 다른 의미의 객체이다. 실제로 스위프트에서 클로저(Closure)라 객체를 지칭하는 것은 대부분 지금부터 이야기할 클로저를 의미한다. 스위프트에서 클로저는 '일회용 함수'를 작성할 수 있는 구문이다. 일회용 함수란 한 번만 사용할 구문들의 집합이며, 그 형식은 함수로 작성되어 있어야한다는 제약조건이 있을 때 사용하는 함수로 굳이 함수의 이름을 작성할 필요가 없다는 특징을 가져 익명(Anonymous) 함수라고 부르기도 한다. 스위프트에서 제공하는 클로저는 이전 포스팅에서 학습했던 클로저와 그렇게 다른 개념은 아니다. 앞에서 학습했던 개념을 모두 포함한다고 생각하면 된다. 따라서 클로저는 자신이 정의되었던 문맥(Context)으로부터, 모든..

    스위프트(Swift) - 함수(Function) Ⅶ. 함수의 중첩

    스위프트에서 함수는 중첩하여 사용이 가능하다. 함수 내에 다른 함수를 작성해 사용할 수 있다는 뜻이다. 이렇게 작성된 함수를 중첩함수(Nested Function)라고 하고 중첩함수 중 함수의 내부에 작성된 함수를 내부함수(Inner Fuction), 내부 함수를 포함하는 바깥 함수는 외부함수(Outer Function)으로 구분한다. 함수를 중첩해서 정의하면 내부함수는 외부함수가 실행되는 순간 생성되고, 종료되는 순간 소멸하게된다. 외부함수는 프로그램이 실행될 때 생성되고 프로그램이 종료될 때 소멸하지만, 내부함수는 외부함수의 실행과 종료 사이에서 생겼다가 사라진다. 즉, 외부함수가 종료되면 내부함수도 더는 존재하지 않는 것이다. 이것이 내부 함수의 생명주기(Life Cycle)이다. 내부함수는 일반적..

    스위프트(Swift) - 함수(Function) Ⅵ. 일급 함수의 특성

    스위프트는 객체지향 언어이자 동시에 함수형 언어이다. 함수형 언어를 학습하면 반드시 일급 객체(First-Class Object)라는 용어를 접하게 되는데 객체가 다음의 조건을 만족하는 경우 이 객체를 일급 객체로 간주한다. 객체가 런타임에도 생성이 가능해야 한다. 인자값으로 객체를 전달할 수 있어야한다. 반환값으로 객체를 사용할 수 있어야한다. 변수나 데이터 구조 안에 저장할 수 있어야한다. 할당에 사용된 이름과 관계없이 고유한 구별이 가능해야한다. 함수가 이런 조건을 만족하면 이를 일급 함수(First-Class Function)라고 하고 그 언어를 함수형 언어로 분류한다. 즉, 함수형 언어에서는 함수가 일급 객체로 대우받는다는 뜻이다. 지금부터 일급함수의 특성에 대해 하나씩 살펴보자. ✅ 일급함수의..