상견례 로맨틱 성공적

나에게 이번달 가장 큰 행사를 꼽아보라면 나는 당연히 상견례를 꼽을 것이다. 그동안 기억에 남는 상견례를 만들어보겠다며 동분서주했었는데 결론은 만족한다. 아마 이런 상견례를 내가 다시하진 않겠지만 혹여나 아직 준비중이라면 참고하시라!

상품화된 상견례

요즘에는 상견례도 결혼 상품에 낑겨서 팔고 있다는 느낌을 지울수가없다. 대표적인 것들이 상견례 음식으로 검색하면 나오는 레스토랑들이다. 주로 한식이나 코스요리가 대부분인데, 왜 이런 것들이 나왔을까 생각해보면 분명 이해는 간다. 그래서 그렇게 검색된 곳 중에 한곳을 찍어서 데이트겸 미리 가봤다. 결론은 실패! 결정적인것은 그날 여자친구와 다툰이유도 있지만 솔직히 음식 퀄러티가 비용에 비해 너무 처진다는 생각이 들었다. 역시 시스템에 맡기면 안되겠군!

시작은 항상 그래.

‘그래 나는 이런 상품화된 시스템에 굴복하지 않으리!’라고 다짐하면서 어떻게 할까 고민하기 시작했다. 그냥 세미나실 잡아서 우리 결혼 발표하고 그냥 삽겹살 좀 꿔먹으면 안돼? 라고 던졌는데, 여자친구가 훅 받았다. 그래 좋아 그렇게 하자! 했다가 왠걸.. 막상 그런 세미나실을 잡으려고하니 만만치가 않다. 비용도 비용이지만 동선이 꼬여버렸다. 갑자기 모든게 하기 싫어진다. 그냥 시스템에 맡겨버릴까? 하는 생각도 잠시 스쳤다. 괜히 특별하게 만들어보겠다고 했다가 괜한 기대감만 부풀린건 아닌가하는 생각도 들었다. 고민 끝에 세미나실은 포기하고 조용한 카페로 눈을 돌렸다. 예전에 삼청동의 조용한 찻집이 생각나 삼청동에 있는 몇몇 찻집을 물색했다. 그리고 여자친구가 엄청난 곳을 물색해왔다. “가예헌” 우리는 그곳을 가게됐다. 오~! 첫인상이 너무 좋았다. 라일락 꽃향기가 흩날리고 저절로 이문세의 “라일락 꽃향기 맡으며~~”를 반복했다. 그러다가 결국 이곳으로 결정했다!

틀을 깨다.

그런데 장소를 결정하면서 모든 것이 꼬였다. 장소 대관료도 사실 만만치 않은데다가 밥까지 먹으려니 비용이 어마어마해졌다. 그리고 동선도 사실 최적은 아니었다. 많이 걸어야하고 택시타도 과연 그 교통체증을 이겨낼수있을까? 확신이 안섰다. 하지만 이미 주사위는 던져졌다. 그 다음 스텝을 고민해야했다. 비용 문제와 동선 문제로 고민하다가 결국 중대한 결정을 하기 이르렀다! “밥은 각자 먹고 오자!” 잉? 처음엔 좀 망설였는데.. “그래 밥은 맘 편하게 식성에 따라 맛있는거 먹고 오는게 낫지”라며 위안을 삼고 결국엔 “상견례=코스요리”라는 틀을 깼다며 체면을 걸기 시작했다.

내 맘대로 결혼식

나에게 결혼은 막연함도 있지만 남들과 똑같이 하는게 그냥 싫은 삐닥이도 마음 한켠에 있었다. 하지만 시스템에 맡기는게 편하긴 하겠다는 생각에 이젠 동의한다. ㅋㅋㅋ 그래도 놓고 싶지 않은 자존심이라고 할까? 굳은 심지라고 표현해야 할까? 부모님 도움없이 온전히 우리 힘으로 시작하고 싶다. 이 마음은 지금도 변함없다. 따라서 모든 비용은 부족하지만 우리가 낼 것이고 때문에 결혼식도 우리 맘대로 할꺼다. 이 엄청난 논리아닌가? ㅋㅋ 드디어 내맘대로 할수있는 일이 하나 생긴거다. 사실 대학 다닐때도 없는 집안에서 학비 얻어쓰는게 영불편해서 장학금을 받기 위해 피터지게 공부했다. 하지만 나보다 뛰어난 녀석들이 많터라… -_-;; 그래서 부모님 몰래 학자금 대출을 받고 나서 통보했다. 그랬더니 얼마나 홀가분한지. 이젠 저 따분한 수업따위 듣지 않겠어! 라는 마인드로 바뀌고 점점 내맘대로 듣고 싶은 수업만 들어야지가 됐다. 결혼도 마찬가지다. 그냥 내 인생인데 내 맘대로 하고 싶다.

상견례 왜 하나요?

다시 돌아와서 상견례, 상견례의 틀은 이미 깨졌다. 때로는 정말 이렇게 해도 되는 건가? 불안해서 자꾸 여자친구에게 “이거 왜 해야되는 거지?” 라고 되물었다? 어느 누구도 이렇게 한사람이 없으므로 레퍼런스도 없고 불안하니까 자꾸 초심을 잃어간다 그럴때마다 이거 왜 이렇게 해야되는지를 스스로에게 되물었다. 나에게 상견례의 목적은 간단했다.

  1. 양가부모님을 서로 소개하고
  2. 불안해 하는 부모님들을 위해 우리의 멋진 계획을 설명하는 거다.

이렇게 두가지를 적어놓고 보니 이게 정말 왜에 해당하는 답인가 의문이 들었다. 소개란? 안녕하세요. 나는 누구입니다. 라고 두마디하면 끝 아닌가? 그리고 우리의 계획도 이렇습니다. 라고 떠들면 끝! 아닌가? 이것이 왜라는 질문의 답변이 되면 안될꺼 같았다. 그래서 또다른 이유를 찾기 시작했다. 양가 부모님 소개는 왜 할까? 소개라는 행위는 왜 하는 것인가? 이런 질문을 혼자하다가 이른 결론은 이랬다. 서로 다른 환경에서 자란 우리 둘도 이렇게 다른데 하물며 한번도 만나보지 못한 양가 부모님들은 어떨까? 살아온 발자취에 따라 삶을 바라보는 태도와 이해도가 다른데 이런 간극을 제대로 이해하지 못한다면 오해가 발생할수있고 문제가 생기면 결국 우리가 불행해진다. 그렇다면 나는 어떻게 해야하는가? 나의 행복을 위해서라도 “나는 두 가족의 간극을 메꿔주는 자리를 만들어줘야한다.” 라는 결론에 이르렀다.

"당신은 나의 반, 같습니다 " 장인어른이 내게 처음 해주신 말씀을 슬라이드 첫장으로 만들었다.
“당신은 나의 반, 같습니다 ” 장인어른이 내게 처음 해주신 말씀을 슬라이드 첫장으로 만들었다.

가족 비교 연표

그래서 생각해낸 첫번째 아이디어가 가족 연표를 만들어보는 것이었다. 그래서 일단 우리 가족의 대소사를 적기 시작했다. 아버지는 어디서 태어났고, 언제 어디로 이사했으며 어머니는 어디서 태어났고 둘은 언제 결혼했으며 나는 언제 태어났고 등등등.. 적고 보니 우리 아버지가 충청도 태생이었다는 사실을 알았다. 헐… 난 내가 경상도에서 태어났기 때문에 당연히 경상도 분인줄 알았는데, 충청도 분이었다니 그것도 태어나기만 충청도에서 태어난게 아니라 어린시절을 통으로 충청도에서 보내셨다. 그리고 부모님 결혼 기념일도 알게 됐다. 아빠는 기억 못하시는데 엄마는 바로 아시더라. ㅎㅎㅎ 다행히 우리 결혼은 11월 1일이니까 나는 아빠처럼 잊어버리진 않겠지. 후훗. (깨알 결혼 홍보ㅋ) 우리가족 연표를 표로 정리하고 여자친구의 가족사도 같은 표의 오른쪽 칸에 정렬했다. 그리고 두 가족 연표를 비교해보니 흐뭇해졌다. 놀라운 사실은 양가 부모님이 1년 차이로 같은 날에 결혼하셨다!. 아버지가 장인어른과 동년배인 사실은 알고 있었지만 결혼기념일이 같다니… 후일담이지만 이 사실은 나중에 상견례 자리에서도 자연스레 알게되서 결혼기념일날 같이 놀러가면 어떻겠냐라는 얘기가 나왔다. 이렇게 가족 비교 연표를 만들어 당일에 한부씩 나눠드렸더니 이만저만 편한게 아니다. 장인 장모님 생신을 여쭤볼 필요도 없고 부모님들도 물어보지 않아도 알게 되니까 좋았다는 피드백을 받았다.

MBTI 간이 테스트

두번째로 준비한 것은 MBTI 간이 테스트였다. 아무래도 개인 성향을 좀 알아야 대화가 수월할 것 같아 인터넷으로 테스트할 수 있는 링크를 보내드렸다. 본래 세미나 실에서 한다면 당일날 시험치듯 할려고 했었는데 귀찮을것 같아서, 미리 테스트하고 결과를 해설해주는 방향으로 각을 잡았다. 가족별로 결과를 놓고 PPT를 만들기 시작했다. 이것도 연표처럼 비교해보니 신기하게 너무나 잘 맞았다. 특히나 나도 몰랐던 우리 가족에 대해 이해하는 계기가 됐다. 아.. 이래서 울엄마가 아빠랑 사는구나. 아빠는 엄마 없으면 못 살겠꾸나 싶었다. ㅋㅋㅋ MBTI와 관련된 해설도 인터넷에 참 많기 때문에 단시간동안 엄청난 학습을 하기 시작했다. 역시나 단기간의 학습은 오래 남지 않는다. 글을 쓰고 있는 지금 시점에서 내가 무슨 성향인지 벌써 다 잊었다. ㅋㅋ MBTI 성향으로 내가 깨달은 몇가지가 있었다. 장모님을 처음 뵜을때 느낌을 엄마가 물어보길래,.. 음.. 그냥 엄마랑 비슷한 느낌이야. 라고 말했던 적이 있었는데 정말 신기하게도 엄마랑 장모님이 같은 성향으로 나왔다. 물론 지표를 나타내는 그래프의 크기는 조금 달랐지만 사람의 감정을 중시하는 F 성향과 그밖에 성향들이 모두 일치했다. 장인어른과 여자친구는 붕어빵처럼 그래프가 거의 비슷하게 나왔다. 오~~ 부전자전이라더니… 어쩜 이렇게 똑같을수가~ +++.

mbtislide 애석하게도 자유분방한 P 성향을 가지고 있는 사람은 나와 처남밖에 없었다. ㅜㅜ.. 아무래도 양가 부모님들에게 이해를 받기 힘든 부분이다. 아.. 갑자기 외로워지는데, 처남이라도 내가 이해해줘야지. 동변상련의 느낌….여튼 이런 저런 나의 해석을 더해 MBTI에 대한 가족 설명회를 모두 마쳤다.

우리의 여행 계획!

마지막으로 결혼후 1년간 세계 여행을 떠날꺼라고 이미 오래전부터 공표했지만 얘네들이 도대체 어떻게 살려고 그러는지 특히나 우리 부모님의 걱정이 엄청났다. 그런 걱정을 조금이라도 덜어들이기 위해 우리는 여행후 돌아와서 이렇게 살 것입니다.라고 말은 사실 제대로 못했다. 왜냐면 나도 모르니까. ㅎㅎ 어떻게든 되겠지가 나의 P성향 아닌가? -_-; 하지만 철저한 계획이 있어야 안심하는 J성향의 나머지 분들을 위해 여행후 돌아와서 전세든 월세든 구해서 살 자금정도는 남겨두고 떠난다는 말과 함께 코앞에 닥친 결혼식과 1년의 장기 여행 준비를 설명했다. 이 여행을 위해 사실 지금 나는 엄청 바쁘다. 수업도 듣고 모임도 나가고 가서 굶지 않으려고 지금 뭔가를 열심히 만들고 있기도 하다. 여자친구도 마찬가지다 우리는 지금도 좀더 나은 삶을 살기 위해 부단히 노력하고 있으니 일단 믿고 지켜봐달라!!

엔딩.

이렇게 모든 프로그램이 끝나고 화기애애한 분위기속에 여러대화들이 오갔고, 상견례가 끝난 뒤에는 우리가 예약한 예식장 견학을 다녀왔다. 여기서 분명한 사실은 우리는 기억에 남는 상견례를 만들었다는 것이다. 그리고 앞으로 우리는 이렇게 기억에 남는 일들로 채워갈 것이다.

덧,

추가로 사진과 쓸 내용이 있지만 일단 글쓰다 지쳐서 오늘은 여기까지!!

Read More

유쾌한 혁명을 작당하는 공동체 가이드 북

이책은 독서모임에 나가기 위해 구입하고 읽기 시작한 책이지만 읽기 시작하면서 몇번을 실패했다. 이유는 내가 그냥 여유가 없었다. 바쁘고 피곤하고 집중도 안되고, 몇번을 읽다가 접었다. 일단 초반부 내용이 너무 평이해서 건질게 없거나 재미가 없거나 아님 내가 집중을 못하고 있거나…

책을 한참 읽어 제끼는데 페이지 수만 증가하는 그 느낌을 아는가? 딱 그랬다. 역시 내가 아직 책을 받아들일 준비가 안되어 있구나 싶다. 그래서 한 2주일간 책의 한글자도 읽지 않았다. 그리고는 결국 모임을 1주일 앞두고 다시 처음부터 머릿말과 번역자의 말부터 읽기 시작했다. 음… 아.. 그렇구나.

나는 늘 닥쳐야하는 성격인지라 날짜가 다가오니 집중력이 살아나기 시작한다. 평소엔 자차로 출퇴근하느라 도통 책 읽을 시간이 없었는데 저녁 수업에 대중교통을 이용하게 되면서 책읽을 짬이 나기 시작했다. 읽어보니 또 금방 잘 읽힌다. 뭥미~

여튼 생각나는 구절만 적어본다. 사실 아직도 다 못읽었다. ㅎㅎㅎ

행복을 만드는 4대 요소

이 책에서는 행복을 만드는 4대요소로 관계와 소명, 유희 그리고 통제라는 키워드를 꼽았는데 그중에서 인상적이었던 것은 유희와 통제였다. 유희란 그냥 재밌으면 되는거 아니야? 생각했는데 여기서는 지금 이 순간을 즐기라는 뜻이 강했다. 첨엔 뭔소린가 했다. 음악 감상하면서 딴생각하고 영화보면서 딴생각한다면 그것은 그 순간을 즐기지 못한다는 것이다. 그리고 이런 유희의 유례도 그런가 싶을정도로 설득력이있다. 일하면 천국간다라는 믿음을 지배했던 청교도 문화권보다 카르페디엠이 지배한 남미 문화권이 훨씬 더 행복하다는 것이다. 안그래도 오늘 여행 스터디 댕겨왔는데 남미를 그렇게 찬미하더라. 한국과는 정반대인 남미는 한국에서 가장 먼 곳이라 인생에 2번가기 힘든 곳이라니 이번에 꼭 가봐야겠다는 생각이 든다. 아직 11월이 되려면 시간이 좀 남았지만 그동안 막연하게 세계여행을 꿈꾸면서 구체적인 플랜은 가서 짜지뭐~ 했는데, 론니 플래닛으로 일정 짜는 방법을 듣다보니 지름신이 도졌다. 나 킨들 살꺼다!! 킨들에선 론니 플래닛이 무료란다. 언제까지 할런지는 모르겠지만 당장 구매해야겠다.

다시 돌아와서 대부분 어떤 문제에 통제를 가한다면 개인적인 문제로 치부하기 마련인다. 이 책의 저자는 개인이 속한 공동체의 문제로 보고 그것을 해결하라고 주장한다. 이것이 이책의 핵심인듯 싶다. 그래서 공동체의 문제를 해결하기 위한 방안으로 작은 공동체를 어떻게 만들고 이끌어가는지에 대한 얘기를 하는 것 같다. 아직은 다 안읽은 상태에서 섣부른 전망이겠지만.. ㅎㅎ 동구밭이란 모임도 그렇고 맥주파티도 그렇고 패치패치도 그렇고 뭔가 맘맞는 사람들과 놀다보면 이사람들과 평생 같이 하고 싶다는 생각이 드는데,.. 이 저자도 같은 마음으로 책을 쓰지 않았나 싶다.

유쾌한 공동체 만들기

책을 읽다보면 요즘 나의 생활과 대입해서 보게된다. 매번 적자를 내면서도 맥주파티를 기획하고 사람들과 두런두런 이야기하며 여유롭게 노는게 좋다. 복잡한건 싫고 작은 모임을 선호한다. 가장 좋은 호스트는 손님을 신경쓰지 않고 내버려두는 사람이라한던데 딱 나다. 이 책에서 가이드 하듯이 다음 모임을 만든다면 모임에 오는 사람들을 반갑게 맞이하는 스탭을 구성해봐야겠다. 그리고 강의를 나가면 꼭 서너 명씩 작은 그룹으로 모아놓고 피드백도 받아봐야겠다. 책에 집중을 잘 못하는지 책 읽으면서 자꾸 잡다구리 생각이 떠올라 트랠로에 메모를 하고 폰에 메모를 하고 머리속에 생각을 정리하면 다시 책으로 돌아오니 진도가 잘 안나간다. ㅎㅎㅎ

나와 타인을 위한 대화법

요즘 한꺼번에 엄청 많은 일들을 처리하고 있는데 그중 하나가 비폭력 대화라는 수업이다. 이책에서는 비폭력 대화라는 단어를 쓰지는 않았지만 비폭력 대화에서 가르치는 대화법과 굉장히 유사한 내용이 많다. 결국 사람과 사람이 모이는 곳에는 대화가 중요하기 때문에 의미있는 대화를 효과적으로 이끌어내는 대화법을 소개한다. 비폭력 대화도 늘 내 입말 속에 평가의 말이 들어가 있진 않은지 내가 제대로 관찰하고 있는지 나의 느낌은 어떻고 내재된 욕구는 무엇인지 자꾸 의식적으로 생각하며 대화하는 연습을 하는데 책에서도 같은 맥락의 이야기가 여러번 나온다.

Read More

Swift 공부하면서 새롭게 알게된 내용 정리

sorted VS. sort

“자바스크립트 같은 스크립트 언어를 기존에 써왔던 사람이라면 Swift라는 언어는 비교적 쉽게 배울수있는 것 같다.” 라고 생각했다가 뒤통수 맞는 것들이 몇가지 있는데 그중에 하나가 바로 sorted 함수와 sort 함수다. 둘의 차이는 정렬을 해서 반환값이 있냐? 없냐의 차이!

mutating func sort(isOrderedBefore: (T, T) -> Bool)
func sorted(isOrderedBefore: (T, T) -> Bool) -> [T]

함수 시그니처만 봐도 sort는 반환값이 없다. -_-;;

참고, Javascript 에서 sorted 함수는 당연히 없고, sort 함수는 본래 배열을 정렬시키고 정렬된 값을 slice해서 새로운 값으로 반환한다. 즉, Swift의 sort 와 sorted 두가지 역할을 모두 수행한다.

극강의 타입 추론 능력!

Swift 의 또 다른 매력이라고 하면 타입 추론을 빼놓을수없다. 얼마나 똑똑한 언어인지 개발자의 귀차니즘을 많이 줄여준다(?) 하지만 단점은 이게 뭔소린가하는 느낌을 줄정도다. 하지만 타입 추론 방식을 좀 이해하고 나니 지금은 꾀나 익숙해졌다.

var arr = [6,2,1,2,3,3]
arr.sort(<)   <--- 이게 뭐얌?             --- 1번
println(arr)   // "[1, 2, 2, 3, 3, 6]"

arr.sort(<) 이게 도대체 뭔소리야 하는 사람도 있겠지만 결과는 오름차순 정렬이다. sort 함수는 인자로 오퍼레이터를 받는건가? 라고 생각할수도 있겠지만 사실 위 코드는 아래와 같이 풀어 쓸수도 있다.

var arr = [6,2,1,2,3,3]
arr.sort{$0 < $1} <--- 이건 또 뭐얌?      --- 2번
println(arr)  

당연히 2번은 1번과 같은 코드다. 2번에서 $0과 $1이라는 변수는 Swift에서 인자의 타입이 무엇이 정확하게 추론이 가능할때 타입 이름을 특별히 지정하지 않아도 쓸수있는 키워드 정도로 이해하면 된다. 물론 인자가 3개라면 $2도 쓸수있다. 그렇다면 이 함수의 원형은 어떻길래 추론이 가능한걸까? 추론 되기전 상태로 좀 더 거슬러 올라가보자.

var arr = [6,2,1,2,3,3]
arr.sort{                              --- 3번
   (t1, t2) -> Bool in
   t1 < t2  
}
println(arr)  

3번에서 sort 다음에 {} 중괄호는 일단 넘어가자. 괄호안에 in 이라는 키워드는 이 함수가 클로저 함수임을 나타낸다. 즉 in 앞에 내용이 이 함수의 시그니처다. 그러니까 인자 2개를 받아서 Bool형으로 반환한다는 이야기!! 뚜둥~!! 그런데 또 여기에 return 문이 없다. Swift 에서 함수의 마지막 문장은 return 문이 없어도 그 문장의 결과값이 return 문으로 반환된다. 그러니까 4번 처럼 된다는 얘기다.

var arr = [6,2,1,2,3,3]
arr.sort{                              --- 4번
   (t1, t2) -> Bool in

   return t1 < t2  
}
println(arr)  

그런데 여기서 또 의문이 생겼다. 도대체 t1과 t2는 어떤 타입이길래 서로 비교가 가능한걸까? 이걸 추론해 내는 것이 Swift 컴파일러의 능력인것이다!! arr 변수는 숫자형 배열이기때문에 바로 위에 문장을 기반으로 sort 내부에서 수행되는 t1과 t2가 Int형임을 알수있는 것이다. 그러니까 5번처럼 인식한다는 얘기!

var arr = [6,2,1,2,3,3]
arr.sort{                              --- 5번
   (t1:Int, t2:Int) -> Bool in

   return t1 < t2  
}
println(arr)  

맨위에 sort 함수 시그니처를 보면 sort 함수는 같은 제네릭타입 T를 인자로 받는다. 따라서 t1과 t2는 같은 타입이 된다. 만약 t2를 Int가 아닌 다른 타입으로 캐스팅 한다면 어떻게 될까?

arr.sort{                              --- 5-1 번 
   (t1:Int, t2:Float) -> Bool in
   return t1 < t2  
}

당연한 얘기지만 sort 함수의 인자 타입이 달라서 실행할수없다고 에러를 낸다. 역시 똑똑한 녀석!!

“Cannot invoke ‘sort’ with an argument list of type ‘((Int, Float) -> Bool)’

마지막으로 저 뜬금없는 sort 다음에 {} 중괄호!! 너는 도대체 뭐냐? 아래 6번 코드를 보자!

var arr = [6,2,1,2,3,3]
arr.sort() {                              --- 6번
   (t1:Int, t2:Int) -> Bool in
   return t1 < t2  
}
println(arr)  

잉? 이건 또 모야? 앞에 () 괄호를 써도 되는 거네? 맞다! {} 중괄호 앞에 괄호가 와도 된다. 6번에 괄호가 생략된 이유는 괄호 안에 들어가는 마지막 인자가 함수일 경우 Swift는 마지막 함수를 괄호 밖으로 끄집어 내서 쓸수있도록 허용한다. 정리하면 괄호안에 들어가는 인자가 여러개 일때, 중간에 함수가 들어가는 경우는 뺄수없다.

// p는 변수, f는 함수라고 가정한다. 
// 이런 함수는 f1을 끄지어 내지 못한다. 
x.method(p1, f1, p2) ---> X

//  이렇게 맨 마지막 인자가 함수면 끄집어 낼수있다. 
x.method(p1, p2, f1) ---> x.method(p1, p2) {} 

제네릭 타입의 형변환

클로저 함수를 다루다 보면 타입 추론에 의해서 생략되는 녀석들이 많아 가끔씩 헷갈릴때가 있는데 이럴때는 꼭 해당 함수에 마우스를 올리고 커맨드 키와 함께 문서를 열어보는 것이 좋다. 여튼 Swift에서 제공하는 많은 내장 함수들이 Typealias나 제네릭 같은 타입을 많이 쓰고 있어서 클로저 함수에 인자를 받아서 쓰다보면 다음과 같은 에러가 종종 발생한다.

(!) Cannot invoke ‘predicate’ with an argument list of type ‘(T)’

extension Array {
  func myFilter<T>(predicate:(T) -> Bool) -> [T] {
    var result = [T]()

    for i in self {
      if predicate(i) {      // <----- 여기가 문제!!
        result.append(i)
      }
    }
    return result
  }  
}

위에서 myFilter 함수는 predicate 라는 클로저 함수를 인자로 받아서 제네릭 타입인 T를 요소로 갖는 배열을 반환하는 함수다. 내부에서 쓰이는 self는 Array 클래스를 확장했으므로 당연히 내부에서 관리되는 배열일 것이라는 추측을 할수있다. 실제로 출력을 해봐도 배열값은 맞다. 하지만 컴파일러는 self 배열에서 꺼낸 i 타입이 사실 뭔지 모르고, predicate가 T 타입을 받아야한다는 사실만 알고 있기 때문에 “i가 뭔지 모르겠는데 T타입은 아닌거 같아. 제대로 넣어줘~!” 라는 메세지를 준다.

extension Array {
  func myFilter<T>(predicate:(T) -> Bool) -> [T] {
    var result = [T]()

    for i in self {
      if predicate(i as! T) {      // <----- 해결!!
        result.append(i as! T)     // <----- 해결!!
      }
    }
    return result
  }  
}

그래서 이럴때 as! 를 이용해 타입을 확실히 명시해주면 해결된다!

Read More