2019-04-26 08:51:20 (2019-04-26 08:53:12)

어제는 열흘간의 대장정을 끝내고 홀가분한 마음으로 출근한 날이었다. 새벽 다섯시까지 일했던 데다가 갑자기 기침이 심해져서 더 늦게 잠들었던 터라 제시간에 출근하지는 못했지만 그 짧은 시간 자면서도 내일 당장 눈 뜨자마자 할 일이 있다는 조급한 마음으로 잠들지 않아도 된다는 사실이 어찌나 즐거웠는지 모른다.

 

오늘부터 꼭 설렁설렁 근무하면서 저건 뭐하는 인간인가 싶은 직장인으로 돌아가 정시되면 퇴근해서 놀다가 잠드는 사람이 되겠다 결심했지만 이 프로젝트를 하느라 미뤄뒀던 잡다한 일을 처리하고 프로젝트 막바지 작업 좀 조율하고 나니 바로 퇴근시간이더라. 제시간에 남은 일 없이 퇴근하는 게 어디인가. 기쁜 마음으로 집에 왔고 초저녁에 누워있어도 된다는 사실에 행복해하다 잠들었다. 원래 퇴근하고 와서 잠들었다 깨면 여가 시간을 낭비하는 기분이라 기분이 별로인데 마음 편히 잘 수 있었다는 사실 하나가 너무 행복하더라. 이래서 사람은 하던 일을 해야 한다. 안 하던 걸 하면 이렇게 피폐해진다.

 

원래는 집에 와서 청소를 할 생각이었던 터라 잠도 안 오겠다 밤새 청소를 했다. 이유 없이 기침이 심해지면 보통 먼지 아니면 곰팡이 때문이라 (그것도 가족들은 다 멀쩡하고 나만 아프다) 예전부터 본의 아니게 환절기 대청소를 도맡았었다. 올해는 작년에 구입한 가전제품이 많아서 좀 고생했다. 특히 에어 서큘레이터. 미니 선풍기는 앞 부분을 돌리면 빠지길래 이것도 그럴 줄 알았는데 흔들리지 않길래 뒤돌려보니까 나사가 있어서 분해했더니 뒤만 빠지고 앞의 망은 분리가 안 되어서 모터니 옆부분이니 다 분리해서 어찌저찌 청소했는데 다 씻고 나니까 망 부분에 나사가 하나 있더라. 나사만 빼면 똑같이 앞 부분을 돌려서 뺄 수 있는 거였어. 가전제품 윗부분도 다 청소하고 나니 한 서너시쯤 되어있었다.

 

잘까말까 고민하다 도무지 잠이 안 와서 카카오에게 노래 틀어달라고 말하고 마냥 누워있었다. 이렇게 아무 생각 없이 시간을 보내는 데도 좋더라. 진짜 삶의 여유가 필요한 며칠이었다. 그러다 자연스레 내일 출근하면 뭘 해야하는지, 보완이 덜 끝난 부분이 무엇인지 생각하다 초반에 objc에 대한 이해가 부족한 상태에서 짰던 코드가 걸리적거린다는 생각이 들었다. 언제 할 지 모르겠지만 미리 정리라도 해두면 할 시간이 됐을 때 조금이라도 빨리 할 수 있지 않을까 싶어서 코드를 처음부터 떠올려 보았다.

 

실무를 시작하고 종종 있는 일로, 머리로만 이해하고 있던 개념에 대한 본질을 갑작스레 깨닫는 일이 있다. 이런 이유 때문에 이게 존재했구나 싶은 생각이 든달까. 이럴 때마다 단순히 아는 것으로는 한계가 있다는게 실감난다. 오늘은 델리게이트 패턴이다.

 

지금까지 내게 델리게이트 패턴이란 iOS에서나 가끔 쓰는 머리로만 아는 패턴이었다. 테이블 뷰 말고는 딱히 쓸 일도 없어서 패턴 자체를 이해한다기보다 테이블 뷰를 사용하기 위한 하나의 공식과도 같았다. 헤더 파일에 델리게이트 이름을 명시해주면 메인 파일에서 오류가 나니까 오류 메시지가 시키는 대로 함수를 설정해주면 알아서 돌아가니까 그런가보다 하는 내용이었다.

 

이번에 프로젝트를 다시 개발하면서 하고 싶었던 것 중 하나가 중구난방으로 섞여 있던 통신 부분에 DAO 패턴을 적용하는 거였는데, 이 과정에서 공통 메소드를 만들고 필수적으로 구현해야 하는 함수를 명시하고 싶어 찾아보니까 protocol이라는 개념이 적합하다길래 어찌저찌 고생해서 구현하는 과정에 델리게이트가 무엇인지 깨달았다. 덕분에 델리게이트 패턴에 대한 이해도가 갑자기 올라가서 아이폰 자체 코드를 분석해 볼 수 있게 됐었다.

 

필수로 구현해야 할 함수를 protocol에 명시하고 공통적으로 사용할 함수를 클래스로 만들었더니, 자식 클래스에 프로토콜과 공통 클래스를 동시에 받아야 한다는 걸 강제할 수 없다는 단점이 있었다. 이 문제를 해결하기 위해 공통 클래스에 프로토콜을 연결했더니 프로토콜에 필수로 작성하라고 명시되어 있는 함수를 구현하지 않으면 warning이 발생하는 문제가 있었다. 이 과정에서 warning을 없애겠다고 필요없는데 굳이 구현해두고 혹시나 호출됐을시 사용하지 말라고 안내하는 내부 메시지를 출력하도록 해놓긴 했는데 이게 계속 신경쓰였었다.

 

그러다 여유가 생기니 갑자기 깨닫게 됐다. 나중에 추가되기도 했고 얼마 전에 알게 된 블록 개념이 초기에 없었던 이유가 이 델리게이트 패턴 때문이라는 걸 말이다. 싱글톤 방식도 제공은 하지만 메모리 문제가 있어 권장하는 방식이 아니라는 걸 알고는 있지만 편의상 쓰고 있는 부분이 있었는데 이 모든 내용이 델리게이트 패턴을 잘 만들면 해결 가능한 범위였다. 물론, 또 해봐야 알겠지만 말이다.

 

애플도 처음에는 자기들 나름의 오리지널 방식만 강제하더니 이제는 안되겠는지 이런저런 방식이 많이 추가되었다. 대표적으로 string replace 같은 거 말이다. 얼마전에 필요해서 찾아보니까 이제는 contain 함수가 생겼는데 예전에는 뭐더라 range 어쩌구 뭐? 정말 string쪽 초기 함수들 보고 있다보면 애플이 원하는 바는 알겠지만 진짜 어디에서도 안 쓰는 신기한 방식을 잘도 고안해놨다 싶은게 많다. 이제는 그나마 어느 정도 이해할 수 있을 정도가 되었다는게 얼마나 감사한지 모른다. 늘 제자리 같지만 뭔가 늘고는 있나부다.

 

그런 의미에서 주말에 다시 맥 들고와서 일 좀 해야겠드아.


번호 분류 제목 글쓴이 날짜
575 일반 친구란 좋은 거야 19/07/26 01:27
574 일반 격조했다 19/07/24 23:59
573 일반 윈도우 업데이트가 세상 거창하네 19/05/01 06:57
개발 갑자기 델리게이트 패턴을 이해하게 됐다 19/04/26 08:51
571 개발 이걸 어디에 적어놔야 기억을 할까 19/04/24 03:47
570 일반 사람은 바깥 바람도 쐬고 살아야 해 19/04/24 02:18
569 개발 드디어 코드 블럭을 제대로 쓸 수 있게 됐다 19/04/22 10:25
568 개발 아 진짜 재밌네 19/04/20 05:49
567 개발 점 표기법과 대괄호 표기법 19/04/19 02:52
566 개발 하 수학 공부를 좀 더 열심히 했어야 했어 19/04/15 16:07
565 개발 이번에는 통신부 함수를 분리하기로 했다 19/04/10 18:41
564 개발 알게 된 거 조금씩 적어야지 19/04/09 18:35
563 개발 진짜 별 걸 다 알게된다 19/04/09 17:32
562 개발 이게 최선인 걸까 싶다 19/04/08 16:35
561 개발 가끔은 재부팅도 필요하다고 한다 19/04/05 14:06
560 일반 사람은 바쁘게 지내야 하나 봐 19/03/26 15:09
559 일반 영웅 넘버는 언제 들어도 참 좋다 19/03/24 01:53
558 기록 나는 어떤 사람이 되어야 할까 19/03/23 02:37
557 기록 우울하다 말하기 전에 몸이 아픈 건 아닌가 생각해보자 19/03/21 02:17
556 일반 눈이 오고 있어요 여러분 19/03/15 19:17