<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>yuhun do IT</title>
    <link>https://jrepository.tistory.com/</link>
    <description>IT를 좋아하고 하고 싶은 게 많은 유훈입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 16 Apr 2026 16:04:09 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>유훈 | Yuhun</managingEditor>
    <image>
      <title>yuhun do IT</title>
      <url>https://tistory1.daumcdn.net/tistory/5132734/attach/53281cb0d023401693a35e826a1b957f</url>
      <link>https://jrepository.tistory.com</link>
    </image>
    <item>
      <title>2023/24 겨울학기 교환학생 회고</title>
      <link>https://jrepository.tistory.com/171</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 2023년 9월~ 독일로 교환학생을 다녀왔습니다. &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;다시 한국에 돌아온 지금 생각해보면 한순간의 꿈 같은 생활인데 정말 얻은 것도 많고 많은 경험과 생각을 할 수 있는 시간이었습니다.&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; 아마 인생에서 가장 기억에 남는 일들 중 하나로 남을 것 같네요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;교환학생을 신청할 때, 가지고 있었던 목표도 있고 생각치 못했던 것들을 얻기도 했는데 이런 이야기들을 기록해보려 합니다. 보통 교환학생 하면 영어실력, 해외경험을 이유로 삼는데 저는 이런 이유도 있었지만 다른 목표들도 있었습니다.&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;먼저 제가 원래 예상하고 얻어오고 싶었던 것은 크게 자신감, 자립심, 심적 변화, 영어, 해외겨주 경험입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;자신감과 자립심입니다. 혼자 있을때는 없지 않았지만 사람들과 함께 있을 땐 매우 소극적이었습니다. 한국에서는 누구나 그렇긴 하지만 주변의 영향을 받을 수 밖에 없고 아무래도 저는 조금 더 받는 편이었다고 생각합니다. 그리고 자취를 할 여건이 되지 않아 완전 분리된 생활 속에서 얻을 수 있는 부분은 깨닫기 힘들었습니다. 그래서 해외에 나가 아무도 모르는 곳에서 새로운 마음으로 뭐든 스스로 하면서 자신감을 얻고 자립심을 키우자는 기대를 가졌었습니다. 혼자 살고 매 일상이 새로운 경험인 시간을 보내기도 했고 주변 사람들과 영어로 문법이 다 틀리더라도 일단 부딫이고 말이 통하지 않더라도 해결해가는 과정 속에서 결론적으로는 원하던 바를 얻을 수 있었습니다. &lt;/span&gt;뭐 지금도 자신감이 200%인 사람이라고&amp;nbsp; 할 수는 없지만 매사 꼼꼼하고 진지한 성격에 충분히 장점으로 어울릴 수 있는 정도가 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 심적 변화는 사실 한국에 있을 때 우울감도 많이 겪고 혼자 힘들어했습니다. 공감되시는 분들도 있겠지만 단순히 다른 사람들에게 이야기하면서 해결되는 단순한 문제는 아니었습니다. 그래서 남들에게 말하지 않은 교환학생을 가는 이유중 이 부분이 큰 비율을 차지했습니다. 계속된 우울감이 저를 상당히 갉아먹고 있다는 생각이 들었었기 때문입니다. 우울감이 교환학생이랑 무슨 상관이냐고 생각하시는 분들도 계실거라 생각하는데 저는 어떤 일들이 벌어질 지는 예상할 수 없지만 바쁜일상, 완전히 다른 환경, 즐거운 추억들이 이를 바꿔줄 수 있다고 생각했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다행히 이는 제가 교환학생을 다녀오고 얻은 것 중 매우 큰 소득이 되었습니다. 자주, 그리고 깊이 느끼던 우울감의 90% 이상이 해결되었습니다. 제 인생에서 가장 행복했던 시기가 되었고 이는 앞으로의 우울감에도 맞설 수 있는 무기가 되었습니다. 지난 2~3년간의 우울을 겪고 회복해낸 이 과정은 앞으로 또 힘든 일이 찾아오더라도 저를 버티고 극복하게 해줄 수 있을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 영어, 해외거주 경험은 모든 교환학생의 공통사항일텐데 저도 기대한 부분이고 실제로 많이 경험했습니다. 영어는 실력 자체가 엄청나게 향상되는 것은 아니어도 자신감있게 말을 할 수 있고 일단 부딫일 수 있었고 해외경험도 많이 했습니다. 독일에 살면서 학교를 다니며 얻은 경험들도 많고 주변 국가를 여행하며 얻은 부분도 많았습니다. 이 부분은 짧게 줄이겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 기존에 생각하지 못했는데 얻은 부분에 대해 크게 이야기해보면 자극으로의 분리, 나를 알아가는 과정, +a의 여행이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무언가 단어로 보면 이상하다고 생각되실 수 있는데 먼저 자극으로부터의 분리부터 이야기해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 어느순간부터 한국에서 인스타그램을 지웠습니다. 물론 sns는 장점도 많다고 생각하지만 우울감을 안고 살아가던 저에겐 더 정신건강을 안좋게 만드는 수단이었고 컨텐츠를 만들지 않고 소비만 하던 저에게는 쓸모가 없다고 생각했기 때문입니다. 이후 지인의 소식을 접할 기회가 줄어드는 등의 부작용도 있었지만 생각보다 장점도 많았습니다. 그리고 한국은 인스타그램이 남들에게 내 생활을 보여주는, 자랑하는 문화가 나쁜건 아니지만 우리나라에서는 조금 심하다는 느낌이 들었는데 분리되니 좋았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 맥락에서 생각치 못한 자극으로부터의 분리가 있었습니다. 나도 모르게 하고있던 과열된 경쟁, 배달음식 등의 자극이 자연스레 멀어지는 경험이었습니다. 물론 우리나라로 돌아와서는 다시 받아들여야할 부분이지만 한번 이런 부분들에서 벗어나서 생각을 정리하는 과정은 제게 의도치 않게 긍정적인 영향을 미친 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나를 알아가는 과정으로 넘어가서 이야기해보면 저는 원래 먹을것을 그리 좋아하지 않고 대부분의 상황에 호불호가 없는 편이라고 생각했었습니다. 하지만 여러 나라를 여행하고 다양한 음식을 먹고 새로운 문화를 두 눈으로 보며 내가 나에대해 아는게 많이 없었다는 생각을 하게 되었습니다. 여행지에서 맛있는 음식을 먹으면 정말 행복했고, 호불호는 그냥 갈등을 만드는 것을 매우 싫어하는 성격이 만든 회피였습니다. 약 5개월의 시간이지만 여유롭고 자유로운 삶을 살며 무얼 좋아하고 싫어하는지 등 내가 나에대해 모르던 것들을 많이 알게 되었습니다. 전혀 생각하지 못했던 부분인데 나를 아는 것의 중요성에 대해 다시 생각해보았고 앞으로의 삶에 긍정적인 영향을 미칠것이라는 생각을 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 +a의 여행이네요.사실 여행은 어느정도 갈 생각이었지만 엄청난 우선순위는 아니었습니다. 하지만 반 이상의 시간이 흐르고 여행을 다니면서 이 부분이 매우 중요한 부분이었음을 깨달았습니다. 쉴 수 있는 거철를 두고 여행을 다니면서 보고 느낄 수 있는건 달랐습니다. 조금 더 천천히 주위를 둘러볼 수 있었고 세계는 정말 내가 알던 것과는 다른게 많다는 생각을 하며 교환학생을 할 때의 여행은 가능한 많이 하는게 좋다는 생각을 했습니다. 미리 알 수 없는 사안이긴 헸지만 이를 나중에 깨달아서 아쉽네요. 만약.. 이 글을 여기까지 읽고 교환학생을 가실 분이 있으시다면 돈이 조금 들더라도 아끼면서 최대한 많은 여행을 하고 후회없이 여행을 하는게 중요하다 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반년간의 교환학생을 큰 맥락으로 정리해 보았고 &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;사실 교환학생이라는 주제로 이야기하면 정말 끝도 없을테지만 이 글은 여기서 마무리해야겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여담으로 요즘 취미로 영상편집을 공부해보는데 사진도 사진이지만 영상을 많이 남겼다면 좋았을 것 같네요.&lt;/p&gt;</description>
      <category>일상</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/171</guid>
      <comments>https://jrepository.tistory.com/171#entry171comment</comments>
      <pubDate>Mon, 1 Apr 2024 01:49:35 +0900</pubDate>
    </item>
    <item>
      <title>블로그 개편</title>
      <link>https://jrepository.tistory.com/170</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;오랜만에 블로그에 들어와서 글을 다시 써보려고 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전에 블로그를 쓰다가 퀄리티가 부족 + 시간 없음 때문에 그만두었는데 꾸준히 글을 써보고 싶기도 하고&lt;br /&gt;이런저런 주제에 대해 올려보고 싶다는 생각에 다시 들어와서 블로그를 정리했네요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;개편이라고 쓰긴 했지만 사실 테마를 바꾸고 카테고리 통합 및 정리를 했습니다. 그래도 정리 좀 하니까 뭔가 기분은 좋네!&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;개발은 iOS를 메인으로 하니까 진짜 옛날에 썼던 글들은 그냥 카테고리 하나로 합치고 iOS를 세분화해봤습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음은 개발블로그로 시작했지만 일상이나 리뷰 처럼 다양하게 글을 써 나가야겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/170</guid>
      <comments>https://jrepository.tistory.com/170#entry170comment</comments>
      <pubDate>Wed, 20 Mar 2024 17:09:10 +0900</pubDate>
    </item>
    <item>
      <title>[iOS] SwiftLint 사용</title>
      <link>https://jrepository.tistory.com/169</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코드 컨벤션을 지키기 위해 추가로 SwiftLint를 사용해보려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 SwiftLint github입니다.&lt;/p&gt;
&lt;figure id=&quot;og_1666451350423&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.&quot; data-og-description=&quot;A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/realm/SwiftLint&quot; data-og-url=&quot;https://github.com/realm/SwiftLint&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dPWd2E/hyQbyTgP1c/wvvs76P9529D5KTSpeHP01/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/realm/SwiftLint&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/realm/SwiftLint&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dPWd2E/hyQbyTgP1c/wvvs76P9529D5KTSpeHP01/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; 한국어 버전의 README도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1666452864730&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.&quot; data-og-description=&quot;A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/realm/SwiftLint/blob/main/README_KR.md&quot; data-og-url=&quot;https://github.com/realm/SwiftLint&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cgCn1D/hyQbr7ImAR/DlSz9QdEqPOhXK12dDyYsK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/realm/SwiftLint/blob/main/README_KR.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/realm/SwiftLint/blob/main/README_KR.md&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cgCn1D/hyQbr7ImAR/DlSz9QdEqPOhXK12dDyYsK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - realm/SwiftLint: A tool to enforce Swift style and conventions.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A tool to enforce Swift style and conventions. Contribute to realm/SwiftLint development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;SwiftLint를 사용하기 위해선 다음의 순서가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. SwiftLint 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 프로젝트의 Script에 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. .swiftlint.yml 파일 추가 및 커스텀&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;+ SwiftLint 규칙&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;설치&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서를 보면 Brew, Pod, Mint를 사용할 수 있는데 저는 Brew를 사용했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 다음 명령어로 설치해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1666451566508&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;brew install swiftlint&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로젝트에 추가&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 파일에 들어가 Build Phases에 들어갑니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-10-23 오전 12.14.03.png&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5154N/btrPlIaOtkz/qju8BAvRGTDdjckpAskhQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5154N/btrPlIaOtkz/qju8BAvRGTDdjckpAskhQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5154N/btrPlIaOtkz/qju8BAvRGTDdjckpAskhQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5154N%2FbtrPlIaOtkz%2Fqju8BAvRGTDdjckpAskhQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1768&quot; height=&quot;584&quot; data-filename=&quot;스크린샷 2022-10-23 오전 12.14.03.png&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ 버튼을 눌러 &lt;b&gt;New Run Script Phase&lt;/b&gt;를 클릭해 &lt;b&gt;Run Script&lt;/b&gt;를 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 코드 창에 다음을 복사 및 붙여넣기합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Pod으로 설치했다면 첫번째 줄은 쓰지 않으셔도 됩니다. Brew로 설치시엔 경로를 알려줘야 인식하기에 추가해 주어야합니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1666451786227&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export PATH=&quot;$PATH:/opt/homebrew/bin&quot;
if which swiftlint &amp;gt; /dev/null; then
  swiftlint
else
  echo &quot;warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint&quot;
fi&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IBaO5/btrPgLUpoiK/PXSJmme8xpLKAjktvInPs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IBaO5/btrPgLUpoiK/PXSJmme8xpLKAjktvInPs1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;424&quot; data-filename=&quot;스크린샷 2022-10-23 오전 12.14.46.png&quot; style=&quot;width: 39.4154%; margin-right: 10px;&quot; data-widthpercent=&quot;39.88&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IBaO5/btrPgLUpoiK/PXSJmme8xpLKAjktvInPs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBaO5%2FbtrPgLUpoiK%2FPXSJmme8xpLKAjktvInPs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;538&quot; height=&quot;424&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bV6qIo/btrPjkBvJU0/ExKarAwXH1ujnyFVW6RKs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bV6qIo/btrPjkBvJU0/ExKarAwXH1ujnyFVW6RKs1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;712&quot; data-filename=&quot;스크린샷 2022-10-23 오전 12.15.25.png&quot; style=&quot;width: 59.4219%;&quot; data-widthpercent=&quot;60.12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bV6qIo/btrPjkBvJU0/ExKarAwXH1ujnyFVW6RKs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbV6qIo%2FbtrPjkBvJU0%2FExKarAwXH1ujnyFVW6RKs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1362&quot; height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름을 &lt;b&gt;Swift Lint Script로 &lt;/b&gt;바꾸고 Complile 위로 올려주었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-10-23 오전 12.17.27.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dskKWa/btrPfWPz9oc/CyUNg9fBDZL8mo0KMGOdCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dskKWa/btrPfWPz9oc/CyUNg9fBDZL8mo0KMGOdCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dskKWa/btrPfWPz9oc/CyUNg9fBDZL8mo0KMGOdCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdskKWa%2FbtrPfWPz9oc%2FCyUNg9fBDZL8mo0KMGOdCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1448&quot; height=&quot;576&quot; data-filename=&quot;스크린샷 2022-10-23 오전 12.17.27.png&quot; data-origin-width=&quot;1448&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;규칙 설정&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 규칙이 있지만 원하는 규칙을 설정할 수 있고 원하는 파일에만 지정할 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;.swiftlint.yml&lt;/b&gt; 파일을 만들고 지정해 주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 경로에 파일을 추가해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/skAJe/btrPgpc1hlp/POjmVXOGlx78bUqSUpKjBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/skAJe/btrPgpc1hlp/POjmVXOGlx78bUqSUpKjBk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;1036&quot; data-filename=&quot;스크린샷 2022-10-23 오전 12.21.20.png&quot; style=&quot;width: 30.9623%; margin-right: 10px;&quot; data-widthpercent=&quot;31.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/skAJe/btrPgpc1hlp/POjmVXOGlx78bUqSUpKjBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FskAJe%2FbtrPgpc1hlp%2FPOjmVXOGlx78bUqSUpKjBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;784&quot; height=&quot;1036&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUPCu5/btrPgWBg0vk/oPtnBh9OFCanPIbrjtNmC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUPCu5/btrPgWBg0vk/oPtnBh9OFCanPIbrjtNmC1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;950&quot; data-filename=&quot;스크린샷 2022-10-23 오전 12.21.45.png&quot; style=&quot;width: 67.8749%;&quot; data-widthpercent=&quot;68.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUPCu5/btrPgWBg0vk/oPtnBh9OFCanPIbrjtNmC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUPCu5%2FbtrPgWBg0vk%2FoPtnBh9OFCanPIbrjtNmC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1576&quot; height=&quot;950&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 AppDelegate와 SceneDelegate에 에러가 많이 뜸으로 다음을 .yml 파일에 작성해 Lint에서 제외해 주었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1666452175447&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;excluded:
  - &amp;lt;프로젝트 이름&amp;gt;/AppDelegate.swift
  - &amp;lt;프로젝트 이름&amp;gt;/SceneDelegate.swift&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 설치 과정은 끝났고 커스텀해서 사용하시면 됩니다. 이제 Build시에 Lint에 어긋난 부분에 경고메세지가 뜨게됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;SwiftLint 규칙&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;disabled_rules&lt;/b&gt;: 기본규칙에서 비활성화합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;opt_in_rules&lt;/b&gt;:&amp;nbsp; 기본규칙에 없는 규칙 활성화합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;only_rules&lt;/b&gt;: 목록에 지정된 규칙만 활성화.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;disabled_rules&lt;/b&gt;또는 &lt;b&gt;opt_in_rules&lt;/b&gt;와 함께 지정할 수 없습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;analyzer_rules&lt;/b&gt;: &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;analyze 명령으로만 실행되는 별개의 규칙입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;included:&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;규칙에 포함할 경로&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt; &lt;b&gt;excluded:&amp;nbsp; &lt;/b&gt;규칙에서 제외할 경로 (위에서 예제로 사용)&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 한국어버전 SwiftLint README에서 가져온 룰 설정 예시입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1666453010433&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;disabled_rules: # 실행에서 제외할 룰 식별자들
  - colon
  - comma
  - control_statement
opt_in_rules: # 일부 룰은 옵트 인 형태로 제공
  - empty_count
  - missing_docs
  # 사용 가능한 모든 룰은 swiftlint rules 명령으로 확인 가능
included: # 린트 과정에 포함할 파일 경로. 이 항목이 존재하면 `--path`는 무시됨
  - Source
excluded: # 린트 과정에서 무시할 파일 경로. `included`보다 우선순위 높음
  - Carthage
  - Pods
  - Source/ExcludedFolder
  - Source/ExcludedFile.swift

# 설정 가능한 룰은 이 설정 파일에서 커스터마이징 가능
# 경고나 에러 중 하나를 발생시키는 룰은 위반 수준을 설정 가능
force_cast: warning # 암시적으로 지정
force_try:
  severity: warning # 명시적으로 지정
# 경고 및 에러 둘 다 존재하는 룰의 경우 값을 하나만 지정하면 암시적으로 경고 수준에 설정됨
line_length: 110
# 값을 나열해서 암시적으로 양쪽 다 지정할 수 있음
type_body_length:
  - 300 # 경고
  - 400 # 에러
# 둘 다 명시적으로 지정할 수도 있음
file_length:
  warning: 500
  error: 1200
# 네이밍 룰은 경고/에러에 min_length와 max_length를 각각 설정 가능
# 제외할 이름을 설정할 수 있음
type_name:
  min_length: 4 # 경고에만 적용됨
  max_length: # 경고와 에러 둘 다 적용
    warning: 40
    error: 50
  excluded: iPhone # 제외할 문자열 값 사용
identifier_name:
  min_length: # min_length에서
    error: 4 # 에러만 적용
  excluded: # 제외할 문자열 목록 사용
    - id
    - URL
    - GlobalAPIKey
reporter: &quot;xcode&quot; # 보고 유형 (xcode, json, csv, codeclimate, checkstyle, junit, html, emoji, sonarqube, markdown, github-actions-logging)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 룰 종류가 있는 링크인데 종류가 정말 많네요... 적당한 규칙을 골라 커스텀하는 게 중요할 것 같습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1666453339610&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Rule Directory  Reference&quot; data-og-description=&quot;&quot; data-og-host=&quot;realm.github.io&quot; data-og-source-url=&quot;https://realm.github.io/SwiftLint/rule-directory.html&quot; data-og-url=&quot;https://realm.github.io/SwiftLint/rule-directory.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://realm.github.io/SwiftLint/rule-directory.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://realm.github.io/SwiftLint/rule-directory.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Rule Directory Reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;realm.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS/Swift</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/169</guid>
      <comments>https://jrepository.tistory.com/169#entry169comment</comments>
      <pubDate>Sun, 23 Oct 2022 00:42:41 +0900</pubDate>
    </item>
    <item>
      <title>[Mac] Blackhole로 OBS studio로 영상 소리 녹화</title>
      <link>https://jrepository.tistory.com/167</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;전에 비슷한 포스팅을 했는데 잘 안될 때도 있어 Blackhole을 이용한 방법으로 개선해서 업로드합니다.&lt;br /&gt;(OBS 녹화를 하는데 맥북 마이크 소리 없이 컴퓨터 소리만 녹화하고 싶을 때 사용)&lt;br /&gt;&lt;a href=&quot;https://jrepository.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jrepository.tistory.com/145&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1662395910313&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Mac] 녹화 소리 녹음(OBS 스튜디오 녹화)&quot; data-og-description=&quot;&amp;nbsp;-현재 다른 녹화는 잘 되는데 줌에서 발표자의 목소리는 녹음이 안됩니다.- -&amp;gt; 해당 이슈는 blackhole을 사용하면서 해결했습니다. 적용 방법은 본문과 비슷한데 추후 포스팅하겠습니다. 맥에서 OB&quot; data-og-host=&quot;jrepository.tistory.com&quot; data-og-source-url=&quot;https://jrepository.tistory.com/145&quot; data-og-url=&quot;https://jrepository.tistory.com/145&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cVxk96/hyPHmZmQ3W/nlJV3K20VQgUbNhkHDgu91/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bcP76I/hyPHqtVJ3E/yvKMANfLLKJhGiFdUhv2JK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/6HU5L/hyPHmLOMNX/0zR4g03mRKKGi1tjFK3mY1/img.png?width=1093&amp;amp;height=866&amp;amp;face=0_0_1093_866&quot;&gt;&lt;a href=&quot;https://jrepository.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jrepository.tistory.com/145&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cVxk96/hyPHmZmQ3W/nlJV3K20VQgUbNhkHDgu91/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bcP76I/hyPHqtVJ3E/yvKMANfLLKJhGiFdUhv2JK/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/6HU5L/hyPHmLOMNX/0zR4g03mRKKGi1tjFK3mY1/img.png?width=1093&amp;amp;height=866&amp;amp;face=0_0_1093_866');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Mac] 녹화 소리 녹음(OBS 스튜디오 녹화)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-현재 다른 녹화는 잘 되는데 줌에서 발표자의 목소리는 녹음이 안됩니다.- -&amp;gt; 해당 이슈는 blackhole을 사용하면서 해결했습니다. 적용 방법은 본문과 비슷한데 추후 포스팅하겠습니다. 맥에서 OB&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jrepository.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 제 맥은&amp;nbsp;&lt;b&gt;M1 Air - Moterey&lt;/b&gt;를 사용하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;과정은 OBS는 설치되어 있다는 가정 하에 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. blackhole 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. MIDI 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. OBS 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. 맥 사운드 설정 변경 후 녹화&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. blackhole 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 다음의 링크에서 blackhole을 다운받아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://existential.audio/blackhole/?pk_campaign=github&amp;amp;pk_kwd=readme&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;블랙홀 다운로드&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;링크에 들어가면 다음과 같은 창이 뜨고 이메일을 입력하면 다운받을 수 있는 링크를 보내줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wwIgR/btrLr2S8H6x/HDn546Q8e36UfP7p19CGf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wwIgR/btrLr2S8H6x/HDn546Q8e36UfP7p19CGf1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;742&quot; data-filename=&quot;스크린샷 2022-09-06 오전 1.31.14.png&quot; width=&quot;450&quot; height=&quot;588&quot; style=&quot;width: 48.3461%; margin-right: 10px;&quot; data-widthpercent=&quot;48.91&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wwIgR/btrLr2S8H6x/HDn546Q8e36UfP7p19CGf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwwIgR%2FbtrLr2S8H6x%2FHDn546Q8e36UfP7p19CGf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;568&quot; height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba1WQp/btrLtXRAXFJ/nJlibeeaxoNJATyncBdZO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba1WQp/btrLtXRAXFJ/nJlibeeaxoNJATyncBdZO0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;743&quot; data-filename=&quot;스크린샷 2022-09-06 오전 1.32.08.png&quot; width=&quot;450&quot; height=&quot;563&quot; style=&quot;width: 50.4911%;&quot; data-widthpercent=&quot;51.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba1WQp/btrLtXRAXFJ/nJlibeeaxoNJATyncBdZO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba1WQp%2FbtrLtXRAXFJ%2FnJlibeeaxoNJATyncBdZO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;594&quot; height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러면 다음과 같은 화면이 나오게 되는데 저는 2ch을 선택했습니다.&lt;br /&gt;이후에는 설치를 진행했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JaZS4/btrLwAAQY4S/MMYHYIhmdmZHujpC7kaiik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JaZS4/btrLwAAQY4S/MMYHYIhmdmZHujpC7kaiik/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;583&quot; data-filename=&quot;edited_스크린샷 2022-09-06 오전 1.32.53.png&quot; width=&quot;450&quot; height=&quot;583&quot; data-widthpercent=&quot;36.9&quot; style=&quot;width: 36.4756%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JaZS4/btrLwAAQY4S/MMYHYIhmdmZHujpC7kaiik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJaZS4%2FbtrLwAAQY4S%2FMMYHYIhmdmZHujpC7kaiik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;583&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwMBFn/btrLqXkdD4h/y5u9WYMPSMXiLgeMwlAxAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwMBFn/btrLqXkdD4h/y5u9WYMPSMXiLgeMwlAxAk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;341&quot; data-filename=&quot;edited_스크린샷 2022-09-06 오전 1.34.20.png&quot; width=&quot;450&quot; height=&quot;342&quot; data-widthpercent=&quot;63.1&quot; style=&quot;width: 62.3616%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwMBFn/btrLqXkdD4h/y5u9WYMPSMXiLgeMwlAxAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwMBFn%2FbtrLqXkdD4h%2Fy5u9WYMPSMXiLgeMwlAxAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. MIDI 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Command + Space를 눌러 Spotlight를 켜주시고 &lt;b&gt;MIDI&lt;/b&gt;를 찾아줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 왼쪽 아래 + 버튼을 눌라 &lt;b&gt;다중 출력 기기&amp;nbsp;&lt;/b&gt;를 선택한 후에 다음처럼 세팅을 맞춰줍니다.&lt;br /&gt;(제 오디오 설정이기에 화면은 약간 다를 수 있습니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 오전 1.36.28.png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ObwaG/btrLuw0drse/mO7KIK7FyyaqImAurL7FL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ObwaG/btrLuw0drse/mO7KIK7FyyaqImAurL7FL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ObwaG/btrLuw0drse/mO7KIK7FyyaqImAurL7FL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FObwaG%2FbtrLuw0drse%2FmO7KIK7FyyaqImAurL7FL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;763&quot; height=&quot;580&quot; data-filename=&quot;스크린샷 2022-09-06 오전 1.36.28.png&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. OBS 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 OBS의 &lt;b&gt;설정 &amp;gt; 오디오 &amp;gt; 광역 오디오 장치 목록&amp;nbsp;&lt;/b&gt;으로 들어가서 약간의 설정만 건드리면 끝납니다. 다음과 같이 설정해주시면 되는데&lt;br /&gt;저는 맥북 마이크도 녹화에 쓸 일이 있어 마이크/보조오디오 에는 Blackhole, 마이크/보조오디오 2 에는 MacBook Air 마이크를 선택했습니다.&lt;br /&gt;만약 나는 영상만 잘 녹화되면 된다 하시면 Blackhole만 지정해주셔도 괜찮습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 오전 1.39.24.png&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YK6AO/btrLu2EBbLa/1Kg9KRIJkGnPejIv6on4Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YK6AO/btrLu2EBbLa/1Kg9KRIJkGnPejIv6on4Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YK6AO/btrLu2EBbLa/1Kg9KRIJkGnPejIv6on4Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYK6AO%2FbtrLu2EBbLa%2F1Kg9KRIJkGnPejIv6on4Uk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1093&quot; height=&quot;866&quot; data-filename=&quot;스크린샷 2022-09-06 오전 1.39.24.png&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;866&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 맥 사운드 설정 변경 후 녹화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 설정은 끝났고 녹화하는 방법만 남았습니다.&lt;br /&gt;저희는 다중 출력 기기를 설정했기 때문에 맥의 &lt;b&gt;사운드&lt;/b&gt;를 바꿔주어야 합니다.&lt;br /&gt;다음과 같이 다중 출력 기기로 바꿔주시는데 주의사항이 있습니다.&lt;br /&gt;&lt;b&gt;* 다중 출력 기기로 바꾸면 소리 크기 설정이 먹히지 않기에 바꾸기 전에 적당한 소리 크기를 정하고 다중 출력 기기로 바꾼후 녹화를 해야합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2022-09-06 오전 1.42.03.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JI8oa/btrLtZoimAC/EncZDhYRDEqqCMkNKIAKsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JI8oa/btrLtZoimAC/EncZDhYRDEqqCMkNKIAKsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JI8oa/btrLtZoimAC/EncZDhYRDEqqCMkNKIAKsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJI8oa%2FbtrLtZoimAC%2FEncZDhYRDEqqCMkNKIAKsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;296&quot; height=&quot;289&quot; data-filename=&quot;edited_스크린샷 2022-09-06 오전 1.42.03.png&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3의 OBS 설정에서 두 가지 마이크를 설정했기에 OBS 메인화면의 오디오 믹서에 두 개가 나타난 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;저는 이름을 다음처럼 바꿔주었습니다.&lt;br /&gt;마이크/보조오디오 -&amp;gt; 녹화용 출력&lt;br /&gt;마이크/보조오디오 2 -&amp;gt; 맥북 마이크로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맥북 마이크는 아래 사진처럼 소리를 꺼놔야 제 목소리나 주변 소리가 녹화영상에 들어가지 않음으로 주의해주시면 되고 설정은 끝났습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-09-06 오전 1.44.59.png&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M4i27/btrLsryFmaV/7OWYtyWHIO6bt3LPwuPbwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M4i27/btrLsryFmaV/7OWYtyWHIO6bt3LPwuPbwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M4i27/btrLsryFmaV/7OWYtyWHIO6bt3LPwuPbwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM4i27%2FbtrLsryFmaV%2F7OWYtyWHIO6bt3LPwuPbwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;280&quot; height=&quot;182&quot; data-filename=&quot;스크린샷 2022-09-06 오전 1.44.59.png&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 모르니 아무거나 녹화 테스트를 진행하시고 실제 필요할 때 적용하시길 바랍니다.&lt;/p&gt;</description>
      <category>기타</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/167</guid>
      <comments>https://jrepository.tistory.com/167#entry167comment</comments>
      <pubDate>Tue, 6 Sep 2022 01:48:55 +0900</pubDate>
    </item>
    <item>
      <title>부스트캠프 웹 모바일 7기(iOS) 챌린지 회고, 멤버십 합격</title>
      <link>https://jrepository.tistory.com/166</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;링크드인_웹모.png&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b66pNr/btrKA2ZVSeZ/jxTASC6wbXDr958knGJQJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b66pNr/btrKA2ZVSeZ/jxTASC6wbXDr958knGJQJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b66pNr/btrKA2ZVSeZ/jxTASC6wbXDr958knGJQJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb66pNr%2FbtrKA2ZVSeZ%2FjxTASC6wbXDr958knGJQJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1584&quot; height=&quot;396&quot; data-filename=&quot;링크드인_웹모.png&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멤버십 결과가 나오고 회고를 작성하는 게 좋을 것 같아 챌린지가 끝나고 2주 만에 작성하네요. 다행히 멤버십에 붙고 쓰게 되어 기쁩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 챌린지부터 정리하고 멤버십 합격 후기로 넘어가 보겠습니다!&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 주차별 체감&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. 챌린지 기간의 생활&lt;/b&gt;&lt;br /&gt;&lt;b&gt;3. 챌린지 소감&lt;/b&gt;&lt;br /&gt;&lt;b&gt;4. 멤버십 합격&lt;/b&gt;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 주차별 체감&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 4주간의 시간을 보내면서 힘들었던 주를 정리해보면 제가 느끼는 체감 난이도는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2주 차 &amp;lt; 1주 차 &amp;lt; 3주 차 =&amp;lt; 4주 차였습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 1주 차는 지금 생각해보면 엄청 어려운 미션은 아니지만 챌린지의 스케줄에 적응한다는 점에서 쉽지만은 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 2주 차는 좀 적응은 한 상태고 미션도 나름 재밌게 진행해서 4주 중에선 가장 편안한 주였습니다.(근데 비교적인 거라 힘들긴 합니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 3주 차는 새롭고 어려운 개념이 많이 나와 미션을 해결하기 전 학습하는 시간이 점점 길어지기 시작한 주였습니다. 이때는 공부를 먼저 하&amp;nbsp; &amp;nbsp; &amp;nbsp;고 구현을 해서 구현 시작 자체가 정말 늦었네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 4주 차는 그냥 어려웠습니다. 진짜 마지막 날은 해결을 하기 전 한참 동안 갈피를 못 잡아 밤을 새웠네요 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 챌린지 기간의 생활&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;잠&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠은.. 주차가 지날수록 점점 줄어들었습니다. 원래 잠을 좀 많이 자는 사람이라 그런가 한 3주 차부터는 왼쪽 눈꺼풀이 떨리더라고요. 근데 이건 나중에 잘 자니까 바로 괜찮아졌습니다! 잠 시간은 부족해도 기상 생활 패턴이 일정한 건 좋았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 전날 너무 늦게까지 해서 도저히 집중이 안 되는 날은 잠깐 낮잠을 자기도 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;점심&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점심시간은 따로 시간이 없고 원하는 방식으로 해결하면 되는데 캠퍼분 마다 정말 다른 것 같았습니다. 약간 호들갑으로 보일 수 있는데 제가 가장 많이 이용한 방식은 평일 점심은 거의 매일.. 김밥을 먹었습니다. 그냥 김밥 먹으면서 미션을 보고 이해한 날이 가장 많았습니다. 설거지도 거의 없고 간편해서 좋더라고요. 물론 그냥 밥을 든든하게 먹고 미션을 보거나 미션을 먼저 이해하고 밥을 먹는 등의 날도 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;저녁&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저녁은 항상 7시에 먹었습니다. 7시가 정규 시간으로 중간 평가가 이루어지니 이때까지 열심히 하고 저녁은 여유롭고 든든하게 먹었습니다. 항상 저녁 먹고 약간의 휴식을 취한 듯합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잠과 마찬가지로 점심과 저녁 시간이 항상 일정한 게 좋았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;b&gt;전체 생활&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전반적으로 제 생활은 9시 20분 기상 / 10시~12시 오전 활동 / 19시까지 미션 해결 / 저녁 식사 및 휴식 / 평균 20시 반부터 다시 미션 해결 / 11시 반쯤 휴식 / 이후 가능한 시간까지 미션 해결 및 정리 등이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중반까진 늦게 자도 3시 전에는 자야지라고 생각했는데 이게 제 마음대로 되는 게 아니더라고요 ㅎㅎ 이 부분은 캠퍼 분마다 자신만의 기준을 세우고 하셔서 워낙 개인차가 있는 듯합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 챌린지 소감&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스스로 챌린지 기간동안 열심히 살았다고 생각합니다. 솔직히 가장 불태웠던 한 달이 아니었을까 라는 생각도 듭니다. 이렇게 오래 앉아있을 수 있구나도 느낄 수 있었고.. 힘든 기간이었지만 재미도 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(시작하기 전 힘들다는 얘기는 들었는데 2일 차가 지나고 몸소 느길 수 있었습니다.. ㅎㅎ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;챌린지 한 달을 혼자서 하라고 했다면 하기 힘들었을 것 같습니다. 주위의 열정있는 분들이 함께했고 해결해가는 과정에서 재미를 찾을 수 있었기에 이 기간을 잘 보낸 듯합니다. 저는 부스트 캠프의 큰 장점이 이런 환경 조성이라고 생각합니다. 솔직히 개인이 같은 주제로 열정 있는 사람들을 모은다는데 쉬운 일은 아니니까요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지식적 측면에서 얘기해 보면 제게는 학교에서 배웠던 CS 지식이 상당히 도움이 되었고 이를 기반으로 지식을 더 채워나갈 수 있었습니다. 물론 새로운 개념이나 키워드도 많이 접했고 다양한 경험을 할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누군가 챌린지를 겪으며 성장을 했느냐 라고 묻는다면 분명하게 성장했다고 말할 수 있습니다. 지식의 측면에서만이 아니라 공부를 하는 방법에 대해서도 생각해볼 수 있는 시간이었기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 원래는 학교에서 과제가 나오거나 뭔가를 구현하려 할 때 일단 해보는 경향이 있었는데 설계하고 구조를 고민하는 과정의 중요성을 느꼈고 초반과 비교하면 시간이 지날수록 고민의 깊이가 점점 깊어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음엔 챌린지에선 실제 개발을 하지 않아 아쉬웠지만 끝나고나니 이 과정이 왜 필요한 것이었는지 알 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 생각과 습관을 돌아볼 수 있는 좋은 경험이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 부스트캠프를 고민하고 있는 분이 계시다면 저는 추천합니다. 하지만 가볍게 해 볼까? 하는 마음가짐이면 추천하지 않습니다. 내가 하는 만큼, 소통하는 만큼 성장하기 때문입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 멤버십 합격&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;열심히 했지만 합격 기준은 아무도 모르기에 마음을 졸이며 기다렸습니다. 메일을 새로고침하며 기다리니 다행히 멤버십 합격 소식을 받을 수 있었습니다. (TMI긴 하지만 플랜B였던 수강신청이 망해서 휴학을 한 상태로 기다렸습니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2022-08-24 오후 7.22.05.png&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfen12/btrKHc9rrxU/rJPSKkhZ1JzUncCMARnPkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfen12/btrKHc9rrxU/rJPSKkhZ1JzUncCMARnPkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfen12/btrKHc9rrxU/rJPSKkhZ1JzUncCMARnPkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcfen12%2FbtrKHc9rrxU%2FrJPSKkhZ1JzUncCMARnPkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;565&quot; height=&quot;134&quot; data-filename=&quot;edited_스크린샷 2022-08-24 오후 7.22.05.png&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합격 기준은 운영진 분들 빼고는 모르지만 제가 어떻게 했는지를 말씀드릴게요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 출석은 한 번도 빼먹지 않았습니다. 간혹 출석체크 시간을 못 맞추신 분들이 계신데 정말 까딱 넘어가기 쉽습니다.&lt;br /&gt;그리고 시간이 정해져있고 이제 맞춰야 하는 활동이 많은데 딱 한 번 조금 늦었습니다.&lt;br /&gt;결론적으로 출석과 시간 지킴 관련해서는 총 한 번의 실수가 있었습니다. (근데 저 같은 분들은 엄청 많으셨을 듯)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미션은 새벽까지 달려서 한 달 기준으로 보면 95% 이상 해결했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외의 활동은 빠짐없이 했는데 워낙 잘하시는 분이 많으셔서 다 잘했다고는 못 할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실... 합격 기준을 모르고 챌린지의 목표가 멤버십 합격만이 됨은 안된다고 생각하기에 당연한 소리지만 그냥 열심히 하는 게 답이라고 말씀드리고 싶습니다. 물론 멤버십에 같이 가지 못하시는 분들이 열심히 하지 않았다는 게 아닙니다. 충분히 열심히 하셨지만 시간이 아주 조금 부족했거나 저희가 모르는 기준을 아쉽게 맞추지 못하셨을 거라 생각됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멤버십 시작도 며칠 안 남았는데 기대되네요. 화이팅!!&lt;/p&gt;</description>
      <category>기타</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/166</guid>
      <comments>https://jrepository.tistory.com/166#entry166comment</comments>
      <pubDate>Fri, 26 Aug 2022 17:43:45 +0900</pubDate>
    </item>
    <item>
      <title>네이버 부스트캠프 iOS 7기 1차, 2차 코딩테스트 및 챌린지 합격 후기</title>
      <link>https://jrepository.tistory.com/165</link>
      <description>&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4KCGS/btrHp2ik8Os/CklWAiT9KjpedKOvtG0fp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4KCGS/btrHp2ik8Os/CklWAiT9KjpedKOvtG0fp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4KCGS/btrHp2ik8Os/CklWAiT9KjpedKOvtG0fp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4KCGS%2FbtrHp2ik8Os%2FCklWAiT9KjpedKOvtG0fp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;198&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요. 2022년 네이버 부스트캠프 웹 모바일 7기 iOS 챌린지에 합격해 후기와 제가 준비한 방법을 써보려 합니다.&lt;br&gt;사실 오늘이 챌린지 시작 이틀 남은 시점인데 후기를 쓸까 고민하다가 이번 부스트캠프를 준비하면서 이전 기수분들의 글을 찾아보며 도움이 되었기에 저도 써보자고 생각했습니다. ㅎㅎ&lt;br&gt; &lt;br&gt;&lt;b&gt;모든 내용은 주관적입니다.&lt;/b&gt;&lt;br&gt;&lt;b&gt;물론 부스트캠프 정책상 문제 유형이나 자세한 정보는 언급할 수 없는 점 유의해주세요!&lt;/b&gt;&lt;br&gt; &lt;br&gt;테스트 일정은 다음과 같이 진행되었습니다.&lt;br&gt; &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1613&quot; data-origin-height=&quot;647&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blUwPt/btrHo7kmWKg/JQM7bNFkKue1Kk6ATjccG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blUwPt/btrHo7kmWKg/JQM7bNFkKue1Kk6ATjccG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blUwPt/btrHo7kmWKg/JQM7bNFkKue1Kk6ATjccG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblUwPt%2FbtrHo7kmWKg%2FJQM7bNFkKue1Kk6ATjccG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;580&quot; height=&quot;233&quot; data-origin-width=&quot;1613&quot; data-origin-height=&quot;647&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1차 코딩테스트 후기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지원서를 접수하고 응시료를 납부하면 메일을 받게 됩니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LjkRE/btrHpDwjHdE/foVP9YkEh4uYs1zqvK1kc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LjkRE/btrHpDwjHdE/foVP9YkEh4uYs1zqvK1kc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LjkRE/btrHpDwjHdE/foVP9YkEh4uYs1zqvK1kc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLjkRE%2FbtrHpDwjHdE%2FfoVP9YkEh4uYs1zqvK1kc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;580&quot; height=&quot;100&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;저는 iOS 파트를 지원한 만큼 Swift로 코딩테스트를 진행했습니다. Swift로 한다고 이득이 있는 건 아닐 거라 생각되지만 결국 쓸 언어로 하는 게 좋을 거라 생각했습니다. 문자열 처리가 좀 불편하긴 하지만 배열이나 딕셔너리 같은 부분은 엄청 편리하다고 생각합니다. 그래도 가장 자신 있는 언어로 응시하는 게 좋다고 생각합니다.&lt;br&gt; &lt;br&gt;문제를 봤을 땐 작년 기준 글을 찾아보면 보통 프로그래머스 1~2 단계로 쉬웠다고 하는데 개인적으로 1단계 수준은 아니었다고 생각합니다. 그렇다고 손을 못 대는 문제는 절대 아닙니다. 시간만 많으면 다 풀 수는 있는데 제한시간 안에 전부 푸는 건 힘들었습니다. (이걸 시간 안에 다 푸신분들은 대단..)&lt;br&gt;다행히 1차 테스트는 합격이었습니다. 하지만.. 같이 도전한 친구는 떨어져서 너무 아쉬웠습니다.. 분야는 달라도 같이 했으면 좋았을 텐데..&lt;br&gt;아무튼 이후에 오픈 톡방 여론을 보면 생각보다 합격 기준이 여유로웠습니다. 하지만 코딩테스트 기준이고 지원서는 지원자마다 모두 다르기에 적게 푸신 분들은 지원서나 다른 스펙이 좋았을 거라 생각됩니다.&lt;br&gt; &lt;br&gt;&lt;b&gt;여기서 하고 싶은 말은! 이전 기수를 중심으로 판단하지 말고 문제가 어떻게 나올지 모르니 최대한 열심히 준비하라고 말씀드리고 싶습니다.&lt;/b&gt;&lt;br&gt; &lt;br&gt;TMI: 떨리는 마음으로 코딩테스트를 들어가기 전 테스트를 준비하는데 정말 당황스러웠습니다. 비가 엄청나게 많이 오는 날이었는데 테스트 준비를 세팅해두고 기다리는 중 시작 30분 전에 갑자기 정전이 나고 인터넷이 끊겼습니다. 나중에 알고보니 주변 공사장에서 작은 크레인이 넘어져서 그랬다네요.. 다행히 제 시간에 시험은 볼 수 있었는데 시험 시작 전까지 좀 바빴습니다. ㅎㅎ&lt;br&gt; &lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2차 코딩테스트&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chldS2/btrHoG8l50R/nY3aOGIGtL4F9MGilN7O90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chldS2/btrHoG8l50R/nY3aOGIGtL4F9MGilN7O90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chldS2/btrHoG8l50R/nY3aOGIGtL4F9MGilN7O90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchldS2%2FbtrHoG8l50R%2FnY3aOGIGtL4F9MGilN7O90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;580&quot; height=&quot;103&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;2차 테스트 준비 메일이 왔습니다! 메일을 받고 바로 며칠 후에 테스트가 있기에 빠르게 문제를 풀기 위해 문법을 점검하고 머리를 식혔습니다. 이때는 문제를 열심히 풀기보다는 컨디션 조절에 더 신경을 쓴 것 같습니다.&lt;br&gt; &lt;br&gt;당일에는 진짜 떨렸는데 시험 한 시간 전에 들어가서 미리 준비해두고 긴장되는 마음을 추슬렀습니다.&lt;br&gt;문제가 나오고 3시간 동안 풀이를 했는데 최근에 그렇게 집중한 적이 없었던 것 같습니다. 정말 3시간이 녹아버렸네요.&lt;br&gt;조금 아쉬웠던 것은 35~40분 정도만 더 있었으면 좋겠다는 생각을 했습니다. 그럼 다 풀었을 텐데.. (물론 모든 예외처리까지 고려하려면 더 필요했겠지만요) 아무튼 시험이 끝나니까 엄청 피곤했습니다. 그래도 이젠 11일을 기다리는 수밖에 없으니 떨리기도 하고 시험이 끝나 홀가분하기도 했습니다.&lt;br&gt;2차 문제도 엄청 어렵다고는 할 수 없지만 까다롭다고 표현하는 게 맞을 것 같습니다. 작년에는 3솔이 많았다고 하는데 이번에는 많지는 않았을 거라 생각되는 정도였습니다.&lt;br&gt; &lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;최종 합격&lt;/b&gt;&lt;/h4&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fj7Z5/btrHpEaSVQ3/U4xaoNTm2sJap0bmvL5vHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fj7Z5/btrHpEaSVQ3/U4xaoNTm2sJap0bmvL5vHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fj7Z5/btrHpEaSVQ3/U4xaoNTm2sJap0bmvL5vHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFj7Z5%2FbtrHpEaSVQ3%2FU4xaoNTm2sJap0bmvL5vHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;580&quot; height=&quot;132&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;정말 며칠 전부터 혹시 조기 발표가 날까..? 하고 기다리다가 전날 저녁 6시가 지나도 오지 않기에 당일 발표인가 보다 했는데 7시가 조금 넘어서 합격 메일이 도착했습니다! 와!!!&lt;br&gt;사실 이런 메일은 떨리는 마음으로 눌러보는 맛도 있는데 다른 일을 하는데 갑자기 메일 배너로 최종합격자 등록이라고 와서 긴장감은 덜 했지만 기분은 좋았습니다. ㅎㅎ 기분 좋은 마음으로 입과 등록을 했습니다.&lt;br&gt;아직 이틀 남았는데 같이 챌린지에 도전하실 분들을 만나는 것도 설레고 무조건 멤버쉽까지 가겠다고 생각하고 있어 열심히 각오를 다지는 중입니다. 휴학하고 멤버쉽 가자!&lt;br&gt; &lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;준비 과정&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 학교에서 3학년 1학기를 다니고 있었기에 1차 코딩테스트가 기말고사 시험 후 1주일 후 였습니다. 그래서 시간이 부족할거라 생각해 기말고사 기간에 코딩테스트를 준비했습니다. 사실 코딩테스트가 처음이기도 했어서 감을 잡을 필요도 있었습니다. (대신 기말고사 점수를 조금 희생.. ㅎㅎ)&lt;br&gt;여기서 중요한 건 IDE 없이 문제를 풀어내는 것이었습니다. 처음에는 평소 쓰던 언어더라도 IDE 없이 순수 작성하려고 하니 얼음이 되었습니다. 먼저 프로그래머스 모든 1단계 문제를 풀면서 Swift를 IDE없이 작성할 수 있도록 연습했습니다. 처음에는 문법을 찾아보며 문제를 풀고 프로그래머스 창에서 도저히 해결이 안 되면 Xcode에 코드를 복사해 문제를 찾아내 익혔습니다. 그리고 중요하거나 자주 사용되겠다 싶은 메서드는 따로 정리했습니다. (주관적임으로 필요한 것만 골라서 사용하세요!)&lt;br&gt;&lt;a href=&quot;https://jrepository.tistory.com/161&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://jrepository.tistory.com/161&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[Swift] PS에 유용하게 사용할 것들 정리&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;IDE를 사용하지 않고 PS문제를 푸는 연습을 하는 중입니다. Swift는 parameter 이름도 method에 써줘야해서 조금 까다롭습니다. 물론 구현해서 써도 되지만 너무 기본적인 것도 전부 구현하면 코드 길이&quot; data-og-host=&quot;jrepository.tistory.com&quot; data-og-source-url=&quot;https://jrepository.tistory.com/161&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/baPneG/hyO7uJFCWM/wG254VyxHCZg1cskrSIkE1/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bIsz6D/hyO5OJLxju/aaxbzMNTA7WnDS68Ho1OWk/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600&quot; data-og-url=&quot;https://jrepository.tistory.com/161&quot;&gt;
 &lt;a href=&quot;https://jrepository.tistory.com/161&quot; target=&quot;_blank&quot; data-source-url=&quot;https://jrepository.tistory.com/161&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/baPneG/hyO7uJFCWM/wG254VyxHCZg1cskrSIkE1/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600,https://scrap.kakaocdn.net/dn/bIsz6D/hyO5OJLxju/aaxbzMNTA7WnDS68Ho1OWk/img.jpg?width=800&amp;amp;height=600&amp;amp;face=0_0_800_600')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[Swift] PS에 유용하게 사용할 것들 정리&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;IDE를 사용하지 않고 PS문제를 푸는 연습을 하는 중입니다. Swift는 parameter 이름도 method에 써줘야해서 조금 까다롭습니다. 물론 구현해서 써도 되지만 너무 기본적인 것도 전부 구현하면 코드 길이&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;jrepository.tistory.com&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 1단계 문제들을 풀다 보니 IDE 없이도 나름 코드를 작성할 수 있었습니다.(이게 되네..?)&lt;br&gt;어느 정도 IDE 없이 문제를 풀게 된 후에는 남은 1단계는 생각보다 빠르게 풀 수 있었습니다. 1단계를 다 푼 후에는 2단계 문제도 풀면서 조금 더 어려운 문제를 풀었습니다. 2단계는 다 풀지는 못했고 풀다가 혼자서는 포기한 문제도 있었지만 2단계를 풀었던 경험이 코딩테스트에는 도움이 많이 되었습니다. 저는 3단계까지는 풀지 못했지만 여건이 되신다면 3단계도 연습하시면 좋을 것 같습니다.&lt;br&gt; &lt;br&gt;1단계에서 얻은 것 : IDE 없이 풀기, 사용하고 있는 언어에 대한 이해(몰라서 찾아보게 되니까)&lt;br&gt;2단계에서 얻은 것 : 요구사항 구현 능력, 조금 더 복잡한 문제 풀이&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;온보딩 키트&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입과 신청을 마치면 며칠 후에 온보딩 키트를 보내주십니다. 이걸 받고 슬랙에 들어가니 시작도 안 했는데 막 자신감이 차오르는 느낌!!&lt;/p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFryRj/btrHrvqiAWZ/oa59FXRHwQsBMt2mRxBLMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFryRj/btrHrvqiAWZ/oa59FXRHwQsBMt2mRxBLMK/img.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;862&quot; style=&quot;width: 30.8342%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFryRj/btrHrvqiAWZ/oa59FXRHwQsBMt2mRxBLMK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFryRj%2FbtrHrvqiAWZ%2Foa59FXRHwQsBMt2mRxBLMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byfqin/btrHtwJgFKQ/WbRGu12frNxQvc9QgSjBMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byfqin/btrHtwJgFKQ/WbRGu12frNxQvc9QgSjBMK/img.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;808&quot; style=&quot;width: 32.8949%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byfqin/btrHtwJgFKQ/WbRGu12frNxQvc9QgSjBMK/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyfqin%2FbtrHtwJgFKQ%2FWbRGu12frNxQvc9QgSjBMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZ3Ycy/btrHo66RJRg/klhA5MmK4qhYeyV1a2fg8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZ3Ycy/btrHo66RJRg/klhA5MmK4qhYeyV1a2fg8k/img.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;783&quot; style=&quot;width: 33.9452%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZ3Ycy/btrHo66RJRg/klhA5MmK4qhYeyV1a2fg8k/img.png&quot; alt=&quot;&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZ3Ycy%2FbtrHo66RJRg%2FklhA5MmK4qhYeyV1a2fg8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;783&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;br&gt;작년에는 부스트코라는 간식 세트였다는데 이번엔 슬리퍼를 보내주셨습니다. 전 마음에 들어요~ 슬리퍼 조금 귀여움ㅎㅎ&lt;br&gt;약간 크긴 하지만 동네 나갈 때 신어야지 &lt;br&gt;이제 진짜 시작만 남았으니 열심히 해보겠습니다!! 이번 기회에 좋은 동료분들도 많이 만나면 좋겠네요. 혹시 동료 캠퍼분이 이 글 보시면.. 조금 부끄럽지만 반갑습니다~ &lt;br&gt;챌린지가 끝나면 챌린지 후기와 아마도 멤버쉽 합격 후기로 돌아오겠습니다. (멤버쉽 가자!!)&lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;/p&gt;</description>
      <category>기타</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/165</guid>
      <comments>https://jrepository.tistory.com/165#entry165comment</comments>
      <pubDate>Sat, 16 Jul 2022 16:10:38 +0900</pubDate>
    </item>
    <item>
      <title>[Git] Github Gist (깃허브 기스트)</title>
      <link>https://jrepository.tistory.com/164</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;깃허브에 코드를 업로드하고 공유하기 좋은 기능이 있어서 써보려 합니다.&lt;br&gt; &lt;br&gt;&lt;b&gt;Github Gist : &lt;/b&gt;&lt;a href=&quot;https://gist.github.com/&quot; target=&quot;_self&quot;&gt;&lt;span&gt;&lt;b&gt;https://gist.github.com/&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt; &lt;br&gt;깃허브 계정이 있으면 해당 계정으로 로그인할 수 있습니다.&lt;br&gt;먼저 Github Gist에 들어가면 다음과 같은 화면에서 코드를 추가할 수가 있습니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2860&quot; data-origin-height=&quot;1590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pCEXz/btrHoHFwyjH/nSTszjj5ZoH4UPSyalNT8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pCEXz/btrHoHFwyjH/nSTszjj5ZoH4UPSyalNT8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pCEXz/btrHoHFwyjH/nSTszjj5ZoH4UPSyalNT8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpCEXz%2FbtrHoHFwyjH%2FnSTszjj5ZoH4UPSyalNT8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2860&quot; height=&quot;1590&quot; data-origin-width=&quot;2860&quot; data-origin-height=&quot;1590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 업로드하기 위해 Gist description, Filename, Code 에 각 예시를 쓰고 create secret gist를 누르면 다음 화면이 나옵니다.&lt;br&gt;- Create에는 Secret과 Public이 있는데 Secret은 URL이 있으면 누구나 코드를 확인할 수 있습니다.&lt;br&gt;(개인적으론 Secret을 이용해 다른 사람들과 코드 공유를 많이 할 것 같습니다.)&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2852&quot; data-origin-height=&quot;1010&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emRfnm/btrHoH6Fme7/KfwmJKTknBEtVgmpWlZBK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emRfnm/btrHoH6Fme7/KfwmJKTknBEtVgmpWlZBK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emRfnm/btrHoH6Fme7/KfwmJKTknBEtVgmpWlZBK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemRfnm%2FbtrHoH6Fme7%2FKfwmJKTknBEtVgmpWlZBK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2852&quot; height=&quot;1010&quot; data-origin-width=&quot;2852&quot; data-origin-height=&quot;1010&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;해당 코드에 코멘트를 달 수가 있어 공유와 의견 공유에 유용해 보입니다.&lt;br&gt;오른쪽 상단의 Embed를 보면 공유를 위한 여러 옵션이 있습니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOvAlx/btrHppEkkWL/4wMh2qU4lHQJM3n7FxNagK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOvAlx/btrHppEkkWL/4wMh2qU4lHQJM3n7FxNagK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOvAlx/btrHppEkkWL/4wMh2qU4lHQJM3n7FxNagK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOvAlx%2FbtrHppEkkWL%2F4wMh2qU4lHQJM3n7FxNagK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;315&quot; height=&quot;334&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;br&gt;Embed는 기본 성정으로 HTML을 이용해 다음처럼 tistory 글을 쓸 때 HTML 모드로 해서 코드 추가가 가능합니다. -&amp;gt; (HTML 선택)&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QaJJC/btrHoHlclpS/gblm5MQE6FknRvE66xJNdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QaJJC/btrHoHlclpS/gblm5MQE6FknRvE66xJNdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QaJJC/btrHoHlclpS/gblm5MQE6FknRvE66xJNdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQaJJC%2FbtrHoHlclpS%2Fgblm5MQE6FknRvE66xJNdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;105&quot; height=&quot;149&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;br&gt; &lt;br&gt;HTML 모드로 변경 후에 Embed에서 복사한 코드를 삽입하면 다음과 같이 코드가 출력 가능합니다.&lt;br&gt;(참고로 GIST에서 코드를 수정하면 블로그 글에도 반영됩니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;script src=&quot;https://gist.github.com/juhoon-lee/65e9ec8429df686c4ed01e6e4db59cf1.js&quot;&gt;&lt;/script&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Share는 URL을 복사해 코드 공유를 원하는 사람들에게 공유할 수 있습니다.&lt;br&gt;나머지 두 Clone은 github를 clone하는 것 처럼 로컬에 clone이 가능하고 커밋과 푸쉬도 가능합니다.&lt;br&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/p&gt;
&lt;pre data-ke-type=&quot;codeblock&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;// clone
git clone &quot;복사한 https나 ssh&quot;

// 이후는 깃 사용과 비슷
git add &quot;파일&quot;
git commit -m &quot;커밋메세지&quot;
git push&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개발/Git</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/164</guid>
      <comments>https://jrepository.tistory.com/164#entry164comment</comments>
      <pubDate>Fri, 15 Jul 2022 21:51:34 +0900</pubDate>
    </item>
    <item>
      <title>[iOS-Error] 카메라를 사용하려 할 때 에러 해결 UIImagePickerController()</title>
      <link>https://jrepository.tistory.com/163</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱에서 카메라를 통해 사진을 가져오려고 UIImagePickerController()를 사용하는데 에러가 발생했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플의 프라이버시 규정 때문인데&amp;nbsp;권한 문제를 해결해보겠습니다!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;에러메세지&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[access] This app has crashed because it attempted to access privacy-sensitive data without a usage description.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The app's Info.plist must contain an &lt;b&gt;NSCameraUsageDescription&lt;/b&gt; key with a string value explaining to the user how the app uses this data.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Infoplist에 가서 권한을 설정해 주면 되는데&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-07-12 오전 12.43.22.png&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr2dQY/btrG24nkR67/YXGTppSkwvKKjp3mQ8GkB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr2dQY/btrG24nkR67/YXGTppSkwvKKjp3mQ8GkB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr2dQY/btrG24nkR67/YXGTppSkwvKKjp3mQ8GkB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr2dQY%2FbtrG24nkR67%2FYXGTppSkwvKKjp3mQ8GkB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1730&quot; height=&quot;212&quot; data-filename=&quot;스크린샷 2022-07-12 오전 12.43.22.png&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 에러메세지에 있는 &lt;b&gt;NSCameraUsageDescription &lt;/b&gt;를 그대로 써줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 엔터를 치면 자동으로 Privacy - Camera Usage Description로 바뀝니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이대로 해도 괜찮지만 정확히는 Value에 YES를 써주는 것이 좋아보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-07-12 오전 12.44.41.png&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ojjxY/btrG3jqSRoc/BKbu5qS8GkoLNJ9stuuSR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ojjxY/btrG3jqSRoc/BKbu5qS8GkoLNJ9stuuSR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ojjxY/btrG3jqSRoc/BKbu5qS8GkoLNJ9stuuSR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FojjxY%2FbtrG3jqSRoc%2FBKbu5qS8GkoLNJ9stuuSR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1720&quot; height=&quot;428&quot; data-filename=&quot;스크린샷 2022-07-12 오전 12.44.41.png&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Privacy를 보면 다양한 권한이 있는데 예를 들어 앨범에 접근하더라도 권한 부여가 필요합니다.&lt;br /&gt;이런 경우에는 때에 따라 에러메세지를 보고 권한을 추가해주도록 하겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS/Errors</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/163</guid>
      <comments>https://jrepository.tistory.com/163#entry163comment</comments>
      <pubDate>Tue, 12 Jul 2022 00:47:46 +0900</pubDate>
    </item>
    <item>
      <title>[Swift] protocol에 대하여(개념 정리)</title>
      <link>https://jrepository.tistory.com/162</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜을 다시 보면서 제대로 사용해야겠다는 생각이 들어 요점을 정리해보려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iOS개발을 하면서 프로토콜은 정말 많이 사용됩니다. 특히 delegate 패턴에서도 아주 많이 보이는 유형입니다.&lt;br /&gt;자바를 해보신 분이라면 스위프트의 프로토콜은 자바의 인터페이스와 아주 유사하다고 할 수 있겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로토콜 protocol&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜을 만들고 정의하는 기본 틀입니다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;protocol &amp;lt;이름&amp;gt; {
	// 명세들
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜을 구현할 수 있는 구현체는 다음과 같습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구조체 2. 클래스 3. 열거형 4. 익스텐션&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;struct,class,enum,extension 객체:protocol {}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로토콜 프로퍼티&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장 프로퍼티와 연산 프로퍼티 프로토콜 (차이점 주의)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 프로토콜에서 프로퍼티를 명세하는 부분인데 get과 set을 적절히 사용해 주어야합니다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;protocol namePro {
	var lastName:String {get set} // 저장 프로퍼티는 둘 다 필수
	var firstName:String { get } // 연산 프로퍼티는 get 만 있어도 된다.
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로토콜 메소드&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선언 뒤에 중괄호 없음 주의!&lt;/li&gt;
&lt;li&gt;외부 매개변수명은 그대로 따라야함(내부는 임의로 설정 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;protocol exp {
	func a(cmd: String)
	func b(c:Int) -&amp;gt; String // 명세를 구현할 때는 c라는 매개변수를 그대로 써야합니다.
}

// 만약 c가 아닌 다른 것을 사용하고 싶다면 내부 매개변수는 바꿔줄 수 있습니다.
func b(c d:Int) -&amp;gt; Stirng {} // 이런 구현은 가능&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜에서 mutating을 사용하지 않을 때는 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구조체나 열거형 등 값 타입의 객체에서 내부 프로퍼티의 값을 변경하기를 원치 않을 때&lt;/li&gt;
&lt;li&gt;주로 클래스의 대상으로 간주하고 작성된 프로토콜일 때&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 설명을 반대로 말하면 mutating은 struct에서 내부 프로퍼티를 변경할 때 꼭 써줘야한다라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(protocol의 func 앞과 구현할때의 func 앞 모두)&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;protocol A {
	mutating func ex(param:String) // mutating 작성 필요
}

struct AA: A {
	var parameter:String?
	
	mutating func ex(param:String) {
		self.parameter = param // 이 코드가 없으면 mutating 생략 가능
		print(parameter)
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;타입 프로퍼티나 타입 메서드 작성시에는 static을 붙이면 된다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;mutating에 대해 class는 조금 다르다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조타입은 내부 프로퍼티와 상관없이 mutating이 필요없다.&lt;br /&gt;(struct에서 값 수정에 mutating을 쓰고 class에선 신경쓰지 않는 맥락과 같네요.)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로토콜 초기와 메소드&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의사항&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구현되는 초기화 메소드의 이름과 매개변수명은 프로토콜의 명세에 작성된 것과 완전 일치 필요&lt;/li&gt;
&lt;li&gt;프로토콜 명세에 선언된 초기화 메소드는 기본 제공되는 초기화 메소드라도 구현해야 함&lt;/li&gt;
&lt;li&gt;클래스에서 초기와 메소드를 구현할 때는 required 키워드 필수(init에서만 사용!!)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;// 프로토콜
protocol A {
	init()
	init(cmd:String)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;// 구조체
struct St:A {
	var cmd:String

	init(){
		self.cmd = &quot;start&quot;
	}

	init(cmd:String){
		self.cmd = cmd
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;//클래스

class Cl:A {
	var cmd:String

	required init() {
		self.cmd = &quot;start&quot;
	}

    required init(cmd:String) {
		self.cmd = cmd
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스에서 주의점 - 상속과 프로토콜 구현이 모두 이루어질 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 부모 클래스에서 구현되었더라고 프로토콜에 있다면 ovveride 해주어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 즉 override required init() {} 이 필요 (순서는 상관X)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 상속은 프로토콜보다 먼저 선언!(상속은 단일 프로토콜은 다중이니까)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;A: 상속,프로토콜1,프로토콜2...&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;타입으로서 프로토콜(delegate에 사용됨으로 잘 알아두자)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로토콜 자체로는 인스턴스를 만들 수 없고 할 수있는 일도 없다. 하지만 자료형으로도 받을 수 있는데 사용은 예를 들면 프로토콜을 상위 클래스 타입으로 간주해 사용하는 것과 유사하다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상수나 변수, 프로퍼티 타입으로 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;함수 메소드 또는 초기화 구문에서 매개변수 타입이나 반환 타입으로 프로토콜을 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;배열이나 사전 혹은 다른 컨테이너의 타입으로 사용할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3을 이용해 프로토콜 이외의 프로퍼티나 메소드를 은닉이 가능하다.&lt;/p&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;protocol A {
    func a()
    func b()
}

class exC: A {
    var boolType = false
    
    func a() {
        self.c()
    }
    func b() {
        self.d()
    }
    
    func c(){
        self.boolType = true
    }
    func d() {
        self.boolType = false
    }
}

// 이렇게 상위 클래스로 간주해 대입
let ex:A = exC()
// 사용할 때는 아래만 사용 가능하다. (은닉)
ex.a()
ex.b()&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로토콜을 두 개 채택하고 이를 모두 포함하는 객체 타입이 가능..!&lt;/h3&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;// 두 개의 프로토콜을 채택한 클래스가 있다고 하자
protocol A {}
protocol B {}
class C: A,B {}

// 다음과 같이 사용함으로 A,B에 구현된 것만 사용을 제약할 수 있다..!!!!
let ex: A &amp;amp; B = C()&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로토콜의 활용&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체에 프로토콜 추가 -&amp;gt; (tableView delegation 등에서 많이 사용했었다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;extension &amp;lt;기존 객체&amp;gt;: &amp;lt;구현할 프로토콜&amp;gt; {
	// 프로토콜 구현 내용
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로토콜 상속&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로토콜은 상속이 가능하다 &amp;rarr; 여러개의 프로토콜을 하나로 합치는 것도 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;swift&quot; data-ke-language=&quot;swift&quot;&gt;&lt;code&gt;protocol A {
    func a()
}

protocol B {
    func b()
}

protocol C: A,B {
    func c()
    // 사실은 doA, doB, doC가 다 있는 상태라 할 수 있다.
}

class ABC: C {
    func a() {
    }
    func b() {
    }
    func c() {
    }
}

// 이는 프로토콜을 상위 클래스로 생각해 제한 가능
let abc:C = ABC() // 전부 활성
let a:A = ABC() // doA()만 활성

func ff(abc:C) {}
ff(abc: ABC())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 만약 프로토콜을 이용해 캐스팅한다면 다운캐스팅에서는 as? 같은 것으로 잘 처리할 것&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;클래스 전용 프로토콜&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 클래스만 구현할 수 있도록 제한된 프로토콜&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 다른 프로토콜 상속시 class를 가장 먼저 써야함&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;protocol A: class {}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로토콜 옵셔널&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;optional 키워드를 이용해 구현을 필수가 아니게 할 수 있다. (이거 자바에서 EventAdaptor 에 사용된 내용이랑 비슷하군)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의 - @objc가 필요함 (Objective-C 코드에서 참조할 수 있도록 한 것)&lt;/p&gt;
&lt;pre class=&quot;swift&quot;&gt;&lt;code&gt;import Foundation

@objc
protocol optionalProtocol {
	@objc optional func onReceive() {}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 사용시 옵셔널 체이닝으로 onReceive?()로 사용해야 하고 반환값도 옵셔널임의 주의&lt;/p&gt;</description>
      <category>iOS/Swift</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/162</guid>
      <comments>https://jrepository.tistory.com/162#entry162comment</comments>
      <pubDate>Thu, 30 Jun 2022 23:49:51 +0900</pubDate>
    </item>
    <item>
      <title>[Swift] PS에 유용하게 사용할 것들 정리</title>
      <link>https://jrepository.tistory.com/161</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;IDE를 사용하지 않고 PS문제를 푸는 연습을 하는 중입니다.&lt;br /&gt;Swift는 parameter 이름도 method에 써줘야해서 조금 까다롭습니다.&lt;br /&gt;물론 구현해서 써도 되지만 너무 기본적인 것도 전부 구현하면 코드 길이와 시간이 비약적으로 늘어나기에.. 정리해보려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 쭉 써놓고 코테가 끝나면 String, Array 등 확실히 정리해서 구분해보는걸로!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;pow(_ p1: Double, _p2: Double)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- p1의 p2승&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 양쪽을 float이나 double로 써줘야한다. 리터럴은 타입캐스팅 해주는듯 하지만.. 변수는 에러 (숫자라면 소수점 3.0 / 변수라면 Double() 사용)&lt;/p&gt;
&lt;pre id=&quot;code_1653632937486&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var a: Int = 3
var result: Double = pow(2.0, 3); // 8

var result2: Double = pow(2.0, a) // 에러 (a가 Int이기 때문)
var result3: Double = pow(2.0, Double(a)) // 이렇게 써야 안전&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;sqrt(p1:float또는Double)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pow()와 비슷하게 float이나 double 제곱근을 구함&lt;/p&gt;
&lt;pre id=&quot;code_1653679344692&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let a = 16
print(sqrt(a)) // Error
print(sqrt(Double(a))) // 4.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;reversed()&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;- String, Array 모두 사용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;- String이나 Array 객체를 반환하지 않아 타입을 바꿔 사용할 필요가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653632526563&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var a: String = &quot;abcd&quot;

var b = a.reversed()
var c: [String] = [&quot;a&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&quot;]

print(Array(c.reversed())) // [&quot;d&quot;, &quot;c&quot;, &quot;b&quot;, &quot;a&quot;]
print(String(b)) // dcba - reversed()의 반환 타입이 String이 아님이로 String으로..&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문자열 나누기 split(separator: Character)과 components(separatedBy: CharacterSet)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;split은 [subString]을 반환하고 components는 Foundation에 속하고 [String]을 반환한다는 차이점이 있으니 사용에 주의!&lt;br /&gt;이 둘이 무엇인지는 예시를 보면 바로 알 수 있고 추가로 components는 문자열 여러개를 기준으로 문자열을 나눌 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(components는 오버로딩 되어있어 문자 하나도 괜찮고 CharacterSet도 괜찮다는 것!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+ split과 components의 파라미터 이름은 다름 주의&lt;/p&gt;
&lt;pre id=&quot;code_1656026833994&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import Foundation

let ex:String = &quot;1+2-3/4*5&quot;
let s:[Substring] = ex.split(separator: &quot;-&quot;)
// split과 let c:[String] = ex.components(speratedBy: &quot;-&quot;)는 반환 값만 다르지 비슷하다.
let c:[String] = ex.components(separatedBy: [&quot;+&quot;,&quot;-&quot;,&quot;/&quot;,&quot;*&quot;])

print(s) // [&quot;1+2&quot;, &quot;3/4*5&quot;]
print(c) // [&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;String Index 처리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;string은 Int로 접근이 불가능함으로(strA[0] 같은거 x) Index로 접근해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDE를 못 쓴다면 index method의 파라미터를 잘 외우자 -&amp;gt; 문자열.index(_ : offsetBy:)&lt;/p&gt;
&lt;pre id=&quot;code_1653684280111&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Index로 접근
var strA: String = &quot;01234567&quot;
print(strA[strA.index(strA.startIndex, offsetBy: 2)]) // 2
// 뒤에서부터도 가능 (endIndex는 마지막 인덱스 다음인 것을 주의)
print(strA[strA.index(strA.endIndex, offsetBy: -2)]) // 6

// index로 구간
strA[strA.index(strA.startIndex, offsetBy: 1)...strA.index(strA.startIndex, offsetBy: 3)] //123

// String을 구간으로 접근하고 싶을땐 배열을 이용하는 방법도 있음
String(Array(strA)[1...3]) // 123&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;String -&amp;gt; 아스키코드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;string 값을 아스키코드로 변환하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1655972098635&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;A&quot;.unicodeScalars.first!.value // 65&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아스키코드 -&amp;gt; String&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1655972302123&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let A = Character(UnicodeScalar(65)) // A&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;진법 변환&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10진수 Int에서 다른 것으로 변경할 때는 String(_:Int, radix: Int )을 사용해서 변환할 수 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 것을 10진수로 변환할 때는 Int(:String, radix:Int)를 사용합니다. (사실 String은 아니지만.. 편의상)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** Int()를 사용할 때는 String-&amp;gt;Int임으로 ! 옵셔널을 벗겨줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10진수 -&amp;gt; 다른것은 변환할 진법을 알려줬지만 다른것-&amp;gt;10진법은 주어진 String의 진법을 radix에 써줍니다,&lt;/p&gt;
&lt;pre id=&quot;code_1653684903128&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var a:Int = 16 // 10-&amp;gt;2 진법
print(String(a,radix: 2)) // 10000
print(String(a,radix: 8)) // 20
print(String(a,radix: 16)) // 10

var b:String = &quot;1100&quot; // 2-&amp;gt;10진법
print(Int(b,radix: 2)!) // 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;max(_p1,_p2), min(_p1,_p2) / 배열의 max(), min()&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 그냥 max()는 두 개의 파라미터 중 큰것을 리턴하고 min은 작은것을 리턴합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 배열에서 최댓값과 최소값을 찾는 method입니다.&lt;br /&gt;근데 배열에 값이 비교가능한 값이 아닐 수 있음으로 optional을 반환한다! -&amp;gt; ps에서는 그냥 ! 하자&lt;/p&gt;
&lt;pre id=&quot;code_1653725657367&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 비교 max(), min()
let a:Int = 1
let b:Int = 5
print(max(a,b)) // 5
print(min(a,b)) // 1

// 배열의 method
let arr: [Int] = [1,2,3,4,5]
print(arr.max()!) // 5
print(arr.min()!) // 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Character의 대소문자 구분 isLowercase , isUppercase&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 대소문자를 구분하는 것은 ()이 없음을 주의..&lt;/p&gt;
&lt;pre id=&quot;code_1653914845061&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let ch:Character = &quot;A&quot;
ch.isUppercase // true&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;String의 대소문자 변환 lowercased(), uppercased()&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDE를 쓸 때에는 lowerCase() 일거라고 생각했는데 case가 소문자인 것, ed 형인것을 주의해야겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1653819260203&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let str:String = &quot;AaBbCcDd&quot;
str.lowercased() // aabbccdd 리턴
print(str.uppercased()) // AABBCCDD 리턴&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;String에서 맨 앞 문자, 뒷 문자 제거&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;subString으로 구현해도 괜찮지만 간단한 메서드를 제공합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1655801807667&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var str:String = &quot;aaaaa&quot;

// subString으로(before나 after사용도 가능) - 앞 뒤 모두 제거한 예
str = str[str.index(str.startIndex, offsetBy: 1)..&amp;lt;str.index(str.endIndex, offsetBy: -1)]

// 메서드를 이용(코테에선 이걸 사용하자)
str.removeFirst()
str.removeLast()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;enumerated() 배열의 인덱스와 값을 한번에 받아올 수 있는 메서드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열의 index와 value를 쌍으로 받아와 for문에서 처리가 용이합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법으 array.enumerated()&lt;/p&gt;
&lt;pre id=&quot;code_1653841150457&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let arr:[String] = [&quot;a&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&quot;,&quot;e&quot;]

for (index, value) in arr.enumerated() {
    print(&quot;인덱스는 \(index)이고, 값은 \(value)입니다.&quot;)
}

// 결과
// 인덱스는 0이고, 값은 a입니다.
// 인덱스는 1이고, 값은 b입니다.
// 인덱스는 2이고, 값은 c입니다.
// 인덱스는 3이고, 값은 d입니다.
// 인덱스는 4이고, 값은 e입니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;배열에서 String의 index 구하기 firstIndex(of: )&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열에서 주어진 문자열의 index를 구해주는 함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 리턴값이 Optional임으로 언래핑 필요&lt;/p&gt;
&lt;pre id=&quot;code_1653915050899&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let arr:[String] = [&quot;hello&quot;, &quot;world&quot;, &quot;hi&quot;, &quot;hello&quot;]
arr.firstIndex(of: &quot;world&quot;) // Optional(1)
arr.firstIndex(of: &quot;world&quot;)! // 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Set 선언과 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;set이 유용한데 다른 collection type과 약간 선언과 사용법이 달라 간단하게 정리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(알기만 해도 은근 유용할 때가 있음)&lt;/p&gt;
&lt;pre id=&quot;code_1654460600927&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 선언(Int 타입 set)
var exSet1:Set&amp;lt;Int&amp;gt; = []
// 또는 다음처럼 초기화도 가능
var exSet2:Set&amp;lt;Int&amp;gt; = [1,2,3,4,5]

// 배열과 같은 프로퍼티들
exSet2.count // 5
exSet2.isEmpty // false
exSet2.contains(3) // true

// 삽입 삭제
exSet2.insert(6)
exSet2.remove(4)
exSet2.removeAll()

// 다음은 집합(이걸 몰라서 직접 구현해서 사용했네요.. 하하)
// 부분집합 확인
exSet1.isSubset(of:exSet2) // true or false 리턴
// 교집합
exSet1.intersection(exSet2) // 교집합 set 리턴
// 합집합
exSet2.union(exSet2)// 합집합 set 리턴

// 일단 위까지 알면 무난하게 사용할 수 있을듯 합니다.
// 아래는 추가로 알면 좋은?

// 여집합
exSet1.symmetricDifference(exSet2) // 여집합 리턴

// 차집합
exSet1.a.subtracting(exSet2) // 차집합 리턴&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;크기 비교&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크기를 비교할 때 1 &amp;gt; 2는 당연히 false이다.&lt;br /&gt;그런데 &quot;1&quot; &amp;gt; &quot;2&quot; 로 해도 결과는 같다&lt;/p&gt;</description>
      <category>iOS/Swift</category>
      <author>유훈 | Yuhun</author>
      <guid isPermaLink="true">https://jrepository.tistory.com/161</guid>
      <comments>https://jrepository.tistory.com/161#entry161comment</comments>
      <pubDate>Thu, 23 Jun 2022 17:31:39 +0900</pubDate>
    </item>
  </channel>
</rss>