클로저 (Closure)


정확한 개념은 아직 이해하지 못했지만.. 함수를 그대로 변수로 리턴이 가능한 구조를 이용하여


함수가 함수를 리턴하는 방식을 더욱 간결하게 표현한 것으로 이해하고 있다.

(..뭔소리냐 이게..)


확실한 건 함수는 하나의 클로저형태 중 하나라는 것..



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//    func helloGen (message : String) -> ((String, String) -> String)
//    {
//        func hello (n1 : String, n2 : String) -> String
//        {
//            return n1 + n2 + message;
//        }
//
//        return hello;
//    }
    
    // helloGen 클로저 적용
    func helloGen (message : String-> ((StringString-> String)
    {
        return {(n1 : String, n2 : String-> String in
            return n1 + n2 + message;
        }
    }
cs


위에 주석처리된 helloGen에 클로저를 적용한 모습이다. 더욱 줄일 수 있지만 그까지 하기엔 내가 못알아보겠다..


(String, String) -> String 함수인 hello를 그대로 리턴형태로 적용한 모습이다.


, 내가 이해하기로는 단발성인 기능을 구현할 때귀찮게스리 함수로 만들어 적용할 필요 없이, 파라미터에 그대로 해당 함수를 간단하게 사용할 때


쓰기 좋은 것으로 이해가 된다.


만약 클로저를 적용한 해당 함수가 다른 곳에서도 써야할 것이라면, 따로 함수를 적용한 뒤 함수를 리턴해주는 것이 더욱 실용적이라는 생각이다.


...라고 생각은 하지만 제대로 이해한 것이 맞는 지 모르겠다..



1
2
        var funcHelloGen = helloGen(message: "하이용");
        NSLog("%@", funcHelloGen("N1""N2"));
cs


helloGen 사용법.






생각해보니 클로저를 함수에 사용하는 것 보다는 아마도 파라미터로서 활용하는 방법이 더 나아보인다.


1
2
3
4
func testClosureMethod (testClosure : ((_ name1 : String, _ name2 : String-> String), Msg : String-> String
    {
        return testClosure(Msg, "[TEST1]");
    };
cs


(String, String) -> String 인 함수를 리턴받는 파라미터를 넣는다.


이 파라미터를 가지고 최종적인 결과를 리턴하는 함수가 testClosureMethod 되겠다.


1
NSLog("%@", testClosureMethod(testClosure:{  (name1, name2) -> String in name1 + name2 + name1 + name2}, Msg: "[PMSG]"));
cs


(String, String) -> String을 따로 함수로서 만든게 아니라 클로저를 사용해 그냥 변수처럼 선언한다.



결과값 출력..


조금 더 이해할 수 있게 많이 노력해봐야겠다. 역시 쉽지 않다..ㅎㅎ

'Developer > Swift' 카테고리의 다른 글

지정 생성자 (Initializer), 편의 생성자 (Convenience Initializer)  (0) 2018.04.13
서브스크립트 (subscript)  (0) 2018.04.11
클로저 (Closure)  (0) 2018.04.09
return func  (0) 2018.04.09
프로퍼티 감시자  (0) 2018.04.05
연산 프로퍼티  (0) 2018.04.05

이 글을 공유하기


댓글(0)

Designed by CMSFactory.NET