<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dev_sangau20.log</title>
        <link>https://velog.io/</link>
        <description>🐢 기초부터 천천히 하고픈 고등학생 개발자 🐢</description>
        <lastBuildDate>Thu, 22 Sep 2022 00:15:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. dev_sangau20.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev_sangau20" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[테스트 왜함 ㅋㅋ]]></title>
            <link>https://velog.io/@dev_sangau20/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%99%9C%ED%95%A8-%E3%85%8B%E3%85%8B</link>
            <guid>https://velog.io/@dev_sangau20/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%99%9C%ED%95%A8-%E3%85%8B%E3%85%8B</guid>
            <pubDate>Thu, 22 Sep 2022 00:15:45 GMT</pubDate>
            <description><![CDATA[<h3 id="tdd의-개념">TDD의 개념</h3>
<blockquote>
<p>TDD는 매우 짧은 개발 사이클을 반복하는 software 개발 프로세스 중 하나이다.</p>
</blockquote>
<h3 id="tdd와-기존-개발-프로세스의-차이점">TDD와 기존 개발 프로세스의 차이점</h3>
<p><img src="https://velog.velcdn.com/images/dev_sangau20/post/0c7c71bd-f857-460d-b33e-a6edf4a56baf/image.png" alt=""></p>
<h3 id="tdd의-3가지-절차">TDD의 3가지 절차</h3>
<p><img src="https://velog.velcdn.com/images/dev_sangau20/post/b5d45568-7513-4608-826b-1cc24e9f90e2/image.png" alt=""></p>
<h3 id="red실패-writing-a-failing-test">Red(실패): Writing a Failing test</h3>
<p>TDD 개발에서의 첫번째 단계는 실패이다. 즉 실패하는 테스트 케이스를 작성하는 것이다. 이때 테스트케이스는 프로젝트 전체의 모든 기능에 대해서 모든 케이스를 작성하는 것이 아니라, 먼저 구현할 기능에 대새서 테스트 케이스를 하나씩 작성해 나가는 것이다. </p>
<h3 id="green성공-write-just-enough-code-to-pass-it">Green(성공): Write just enough code to pass it</h3>
<p>두번째 단계는 성공이다. 실패 단계에서 작성한 테스트 케이스를 통과 시키기 위한 최소한의 코드를 작성하는 단계이다. </p>
<h3 id="blue리팩토링-change-code-for-better-without-chaning-the-behavior">Blue(리팩토링): Change code for better without chaning the behavior</h3>
<p>세번째 단계는 리팩토링이다. 성공단계에서 작성한 코드에 중복되는 코드나, 개선시킬 방법이 있다면 리팩토링을 진행해둔자. 리팩토링을 진행하면서 매 단계마다 테스트 케이스를 통과하는지 확인해야한다. 이 단계까지 구현이 완료되었다면 다시 첫번째 단계로 새로운 실패하는 테스트 케이스를 작성하면 된다. </p>
<h2 id="tdd의-장점">TDD의 장점</h2>
<hr>
<ol>
<li><p>객체지향적인 코드 개발</p>
<p> 테스트 코드를 먼저 작성하면 명확한 기능과 구조를 설계할 수 있다. 또한 TDD프로세스를 따르는 코드의 경우에는 재사용성을 고려하며 작성하게 된다. </p>
</li>
<li><p>설계 수정 시간의 단축</p>
<p> 테스트를 먼저 해보기 때문에 걸계의 구조적인 문제를 바로 찾아날 수 있게 된다. </p>
</li>
<li><p>디버깅 시간의 단축</p>
<p> 단위 테스트 기반의 테스트 코드를 작성 → 문제 지점을 쉽게 발견</p>
</li>
<li><p>유지 보수의 용이성</p>
<p> 자동화된 유닛 테스팅을 전재 → 테스트 기간 ↘️</p>
</li>
<li><p>테스트 문서의 대체 가능</p>
<p> 테스팅을 자동화 &amp;&amp; 테스트의 근거를 산출할 수 있다.</p>
</li>
</ol>
<h2 id="단위테스트unit-test">단위테스트(Unit Test)</h2>
<hr>
<blockquote>
<p>단위테스트(Unit Test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다.</p>
</blockquote>
<h2 id="단위테스트-장점">단위테스트 장점</h2>
<hr>
<ul>
<li><strong>문제점 발견</strong> → 프로그램의 각 모듈들을 고립시켜서 각각의 부분들이 정확하게 동작하는지 확인하는 것이다.</li>
<li><strong>변경이 쉽다</strong> → ****Unit Test를 믿고 regectoring을 언제든지 할 수 있고, 변경후에 해당 모듈이 잘 작동하는지 확인하는 unit test인 회귀 테스트를 통해서 변경된 모듈을 확인할 수 있다.</li>
<li><strong>통합이 간단</strong> → 유닛 자체의 불확실성을 제거해주므로 bottom-up(상향식) 테스트 방식에서 유용하다. 각 모듈을 검증하고 모듈들을 합쳐서 다시 검증하는 통합 테스트에서 더욱 효율적이다.</li>
</ul>
<h3 id="단위테스트는-어떻게-작성해야할까">단위테스트는 어떻게 작성해야할까?</h3>
<hr>
<p><strong>FIRST -</strong> 테스트에 대한 모법 사례(Best Pracices for testing)</p>
<ul>
<li>Fast(빠르게) : 테스트는 빠르게 실행되어야 한다.</li>
<li>Isolated / Independent(분리된 / 독립적인) : 테스트는 따로 설정이나 분리를 해서는 안된다.</li>
<li>Repeatable(반복가능한) : 테스트 수행할 때 마다 동일한 결과를 얻어야 한다. 외부의 데이터 공급자나 동시성 문제로 인해 일시적 오류는 발생할 수 있다.</li>
<li>Self-validating(자체 검증) : 테스트는 완전히 자동화 되어야 한다. 로그 파일에 대한 프로그램의 해석보단 “pass” or “fail” 출력</li>
<li>Timely(적시에) : 이상적인 테스트는 테스트한 생산 코드를 작성하기 전에 작성해야한다.</li>
</ul>
<h3 id="단위테스트는-무엇을-테스트-해야할까">단위테스트는 무엇을 테스트 해야할까?</h3>
<hr>
<p><strong>Right - BICEP</strong></p>
<p>Right - 결과가 올바른가?</p>
<ul>
<li>Boundary : 모든 경계 조건이 correct 한가? (경계값들의 조건)</li>
<li>Inverse : 역 관계를 확인할 수 있는가?</li>
<li>Cross-Check : 다른 수단을 사용해서 결과를 교차할 수 있나?</li>
<li>Error Condition : 에러 조건을 강제로 만들 수 있나?</li>
<li>Performance : 성능 특성이 한도내에 있나?</li>
</ul>
<p>이상 공부 끝</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[동기, 비동기 / 직렬, 동시]]></title>
            <link>https://velog.io/@dev_sangau20/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%A7%81%EB%A0%AC-%EB%8F%99%EC%8B%9C</link>
            <guid>https://velog.io/@dev_sangau20/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0-%EC%A7%81%EB%A0%AC-%EB%8F%99%EC%8B%9C</guid>
            <pubDate>Thu, 22 Sep 2022 00:12:21 GMT</pubDate>
            <description><![CDATA[<h3 id="동기synchronous--동시에-일어나는">동기(synchronous : 동시에 일어나는)</h3>
<hr>
<blockquote>
<p>동기는 말 그대로 동시에 일어난다는 뜻입니다.</p>
</blockquote>
<p>요청과 그 결과가 동시에 일어난다는 약속인데요. 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 합니다.</p>
<ul>
<li>요청과 결과가 한자리에서 동시에 일어남</li>
<li>A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞추겠다.</li>
<li>동기 방식은 서버에서 요청을 보냈을 때 응답이 돌아와야 다음 동작을 수행할 수 있다. 즉 A작업이 모두 진행 될때까지 B작업은 대기해야 한다.</li>
</ul>
<h3 id="비동기asynchronous--동시에-일어나지-않는">비동기(Asynchronous : 동시에 일어나지 않는)</h3>
<hr>
<blockquote>
<p>비동기는 동시에 일어나지 않는다를 의미합니다.</p>
</blockquote>
<p>요청과 결과가 동시에 일어나지 않을거라는 약속입니다.</p>
<ul>
<li>요청한 그 자리에서 결과가 주어지지 않음</li>
<li>노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.</li>
<li>비동기 방식은 요청을 보냈을 때 응답 상태와 상관없이 다음 동작을 수행 할 수 있다. 즉 A작업이 시작하면 동시에 B작업이 실행된다. A작업은 결과값이 나오는대로 출력된다.</li>
</ul>
<h3 id="이미지">이미지</h3>
<hr>
<p><img src="https://velog.velcdn.com/images/dev_sangau20/post/bcc4679e-0c8a-42f5-8671-b74306cfd21b/image.png" alt=""></p>
<h3 id="각각의--장점">각각의  장점</h3>
<hr>
<p>동기</p>
<ul>
<li>설계가 매우 간단하고 직관적이다</li>
</ul>
<p>비동기</p>
<ul>
<li>동기보다 복잡하다</li>
</ul>
<h3 id="각각의-단점">각각의 단점</h3>
<hr>
<p>동기</p>
<ul>
<li>결과가 주어질 때까지 아무것도 못하고 대기해야 한다.</li>
</ul>
<p>비동기</p>
<ul>
<li>결과가 주어지는데 시간이 걸리더라도 그 시간동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다.</li>
</ul>
<h3 id="예시">예시</h3>
<hr>
<p>예를 들어. 나는 대학교에 있는 프린트집 사장이다. 나에게는 A, B, C, D 복사기 4대가 있다. 학생 2명이 나에게 300장짜리 복사를 맡겼다.</p>
<ul>
<li><strong>동기</strong>일 경우 : A복사기에 100장 복사를 시작했다. 근데, 다른 복사기를 사용할 수 없다. A복사기의 복사가 먼저 끝나야 하기 때문이다.</li>
<li><strong>비동기</strong>일 경우 : A복사기에 100장 복사를 시작했다. A복사기의 복사가 끝나는 것에 상관없이 B, C복사기에도 100장 복사를 시작했다.</li>
</ul>
<p>작업의 순서에만 집중해서 보면, 차이가 극명하게 보일 것이다. </p>
<p>동기는 설계가 간단하고 직관적이지만, 결과가 주어질 때 까지 대기를 해야하는 단점이 있고, 비동기는 설계는 복잡하지만 자원을 효율적으로 사용할 수 있다는 장점이 있다. </p>
<h2 id="동기와-비동기의-개념을-이해했으면-serial-과-concurrent에-대해서도-알아보자">동기와 비동기의 개념을 이해했으면 Serial 과 Concurrent에 대해서도 알아보자.</h2>
<h3 id="직렬">직렬</h3>
<hr>
<blockquote>
<p>분산처리 시킨 작업을 오직 한 개의 쓰레드에서만 처리하는 것이 직렬이다.</p>
</blockquote>
<p>즉 A쓰레드에서 4개의 작업을 분산 처리 시켰는데, B스레드에서만 처리하는 것이다. </p>
<h3 id="동시">동시</h3>
<hr>
<blockquote>
<p>몇개의 쓰레드로 분산할지는 시스템이 정하지만, 시스템이 정한 여러개의 쓰레그로 분산 처리하는 것이 동시이다.</p>
</blockquote>
<p>작업들이 각자 독립적이지만 유사한 작업들일 때 굉장히 유용하다. (ex) 테이블뷰 셀 같은 것들을 서버에서 받아오는 것 )</p>
<h3 id="의문들">의문들</h3>
<hr>
<ol>
<li>동시랑 비동기랑 비슷한 개념인가?</li>
<li>직렬은 대체 왜 사용하지? 동시가 모든경우에 좋아 보인다.</li>
</ol>
<h3 id="비동기와-동시는-비슷해-보이지만-아예다른-개념이다">비동기와 동시는 비슷해 보이지만 아예다른 개념이다</h3>
<hr>
<p>동기와 비동기는 <strong>메인 쓰레드에서 대기열을 어떤 방식으로 처리할지</strong> 정하는 것.</p>
<p>직렬과 동시는 <strong>어떤 대기열을 사용할 지</strong> 정하는 것</p>
<p>작동되는 개념이 비슷하다고 절대 혼용하지 말자. 아예 다른 개념이다.</p>
<h3 id="직렬을-사용하는-이유">직렬을 사용하는 이유</h3>
<hr>
<p>바로 작업의 &#39;순서&#39;가 중요할 때 직렬이 사용된다.</p>
<p>동시는 여러개의 쓰레그에서 분산 작업하기 때문에 순서를 상관하지 않고 쓰레드에 할당된 작업은 각 쓰레드가 모조리 처리한다. 따라서, 만약 어떤 작업이 꼭 먼저 이뤄져야 한다면, 그럴때는 직렬을 사용하는게 좋다.</p>
<p>프로그램의 성능/반응성 을 올리고 최적화를 하기 위해서 하는 것이 동시성 프로그래밍이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[에러] App Transport Security policy requires]]></title>
            <link>https://velog.io/@dev_sangau20/%EC%97%90%EB%9F%AC-App-Transport-Security-policy-requires</link>
            <guid>https://velog.io/@dev_sangau20/%EC%97%90%EB%9F%AC-App-Transport-Security-policy-requires</guid>
            <pubDate>Sat, 17 Sep 2022 06:04:15 GMT</pubDate>
            <description><![CDATA[<p>Moya 테스트를 하기위해 새로운 프로젝트를 생성하여 
<a href="http://www.icndb.com">http://www.icndb.com</a>
이라는 사이트에서 랜덤한 농담들을 받는 통신을 했는데</p>
<p><img src="https://velog.velcdn.com/images/dev_sangau20/post/c792070c-1c79-4a86-9e81-3eb9f0debc79/image.png" alt=""></p>
<p>이런 에러가 떠서 바로 검색했더니 <img src="https://velog.velcdn.com/images/dev_sangau20/post/c1d4018e-9d2e-4f6c-a768-e327bb7696e3/image.png" alt="">
info.plist에 위에 친구들을 추가해주라고해서 바로 추가했더니 해결했다ㅏ.</p>
<p><a href="http://daplus.net/ios-app-transport-security-%EC%A0%95%EC%B1%85%EC%97%90-%EB%B3%B4%EC%95%88-%EC%97%B0%EA%B2%B0%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC%ED%95%98%EB%AF%80%EB%A1%9C-%EB%A6%AC%EC%86%8C%EC%8A%A4/">참고</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[
[에러] Showing Recent Messages
Unable to load contents of file list: ''
]]></title>
            <link>https://velog.io/@dev_sangau20/%EC%97%90%EB%9F%AC-Showing-Recent-MessagesUnable-to-load-contents-of-file-list</link>
            <guid>https://velog.io/@dev_sangau20/%EC%97%90%EB%9F%AC-Showing-Recent-MessagesUnable-to-load-contents-of-file-list</guid>
            <pubDate>Thu, 15 Sep 2022 11:52:13 GMT</pubDate>
            <description><![CDATA[<p>동아리 활동 -&gt; 개발도중 </p>
<p>선배들이 작성한 코드를 pull 받아와서 빌드 해보려고 하는데 이게 뭐야
<img src="https://velog.velcdn.com/images/dev_sangau20/post/1385050f-f74a-46af-984c-d351a21db8fb/image.png" alt=""></p>
<p>이친구가 두두등장 했다
바로 검색을 했다ㅏ.</p>
<p>검색해보니 </p>
<p>pod 버전 쪽에 문제가 있어서 그냥 간단하게 </p>
<pre><code>sudo gem update cocoapods --pre
pod update</code></pre><p>를 해주고 프로젝트 클린해주고 나면 에러 없이 정상빌드 되는것을 확인할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Swift] fileprivate, private]]></title>
            <link>https://velog.io/@dev_sangau20/Swift-fileprivate-private</link>
            <guid>https://velog.io/@dev_sangau20/Swift-fileprivate-private</guid>
            <pubDate>Wed, 31 Aug 2022 09:03:40 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-Swift">fileprivate let loginButton = UIButton().then {}</code></pre>
<p>위 코드는 제가 프로젝트를 하면서 로그인 버튼을 만들때 쓴 코드 입니다.
저 코드에서 접근제어자는 fileprivate인데.. 습관적으로 적어서인지.. 정확히 private와 fileprivate의 차이를 알지 못하여서 공부해 보았습니다.</p>
<h2 id="swift에서의-접근-레벨access-levels">Swift에서의 접근 레벨(Access Levels)</h2>
<p>Swift에서는 5개의 접근레벨을 제공하는데요</p>
<ul>
<li><strong><em>Open &amp; Public</em></strong>  : Open과 Public 모두 선언한 모듈이 아닌 다른 모듈에서 사용할 수 있습니다. 이 둘의 차이점은 <code>Open</code>은 <em>다른 모듈에서 오버라이딩과 서브클래싱</em>이 가능하지만 <code>Public</code>은 불가능 합니다.</li>
<li><strong><em>Internal</em></strong>       : 아무 접근레벨도 설정하지 않으면 <code>Internal</code>로 간주됩니다. 해당 모듈 전체에서 사용가능합니다.</li>
<li><strong><em>Fileprivate</em></strong>    : 특정 엔티티를 선언한 클래스에서만 사용이 가능합니다.</li>
<li><strong><em>Private</em></strong>        : 특정 엔티티가 선언된 괄호<code>{}</code>안에서만 사용이 가능합니다.<br>

</li>
</ul>
<p>음.... 이해가 잘 되지 않는데 글만 잘 읽어 본다면 
<code>Open</code> &gt; <code>Public</code> &gt; <code>Internal</code> &gt; <code>Fileprivate</code> &gt; <code>Private</code>
순으로 개방(?)적인 것을 알 수 있습니다ㅏ</p>
<p>여기서 저희가 자세히 볼 것은 <code>Fileprivate</code>와 <code>Private</code>이죠</p>
<hr>
<h3 id="fileprivate와-private">Fileprivate와 Private</h3>
<p>이제 정말 다왔는데 
위 말이 너무 어렵죠...조금 쉬운 말로 한번 바꾼다면 어떻게 할 수 있을까요..?</p>
<p>일단 &quot;<code>Fileprivate</code>는 같은 파일 안에서만 사용가능하다!&quot; 라고 하면 조금 쉽죠
그럼 &quot;<code>Private</code>는 같은 코드블럭 안에서만 사용가능하다!&quot; 라고 생각하면 될거 같네요...</p>
<h3 id="마무리">마무리...</h3>
<p>오늘은 이렇게 <code>Fileprivate</code>와 <code>Private</code>의 차이점을 살펴봤는데...
이해가 쉽게 되지는 않네요... 나중에 꼭 몇번 더 봐야겠습니다..</p>
<p>개인적으로 생각을 정리하며 쓴 글이다보니 실수가 많을거 같은데 글을 읽다가 <code>아 이건 틀렸는데?</code> 싶은 것이 있다면 댓글로 꼭 알려주시면 감사하겠습니다!</p>
<p><br><br></p>
<p>참고
<a href="https://jusung.gitbook.io/the-swift-language-guide/">Swift Language Guide</a>, 
<a href="https://joycestudios.tistory.com/15">[Swift] AccessControl (Bill Kim&#39;s Life)</a>, 
<a href="https://zeddios.tistory.com/383">Swift) AccessControl (Zedd0202)</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Xcode] Group과 Folder의 차이]]></title>
            <link>https://velog.io/@dev_sangau20/Xcode-Group%EA%B3%BC-Folder%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@dev_sangau20/Xcode-Group%EA%B3%BC-Folder%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Wed, 31 Aug 2022 09:02:05 GMT</pubDate>
            <description><![CDATA[<p>음... 작업을 하다가 xcode에서 파일을 보여주지 못하는 에러? 가 생겼다. 그래서 어떻게 해야할지 고민을 하던중 그냥 Finder에는 있으니까 Finder에 있는 폴더를 그냥 Xcode에 넣으면 되지 않을까.. 하였고 그 결과 안됐다.</p>
<p>나중에 알고보니 Xcode에서 그냥 보이지만 않을뿐 존재는 하는것 같았다(SwiftLint를 사용하였는데 빌드하니 FileChanges 에는 변경사항이 있는것으로 나왔다.)</p>
<p>쨋든 그래서 나는 궁금해졌다. <code>폴더</code>와 <code>그룹</code>의 차이는 무엇일까 </p>
<h3 id="차이점">차이점</h3>
<p>일단 <code>그룹</code>은 실제 파일시스템 구조에 영향을 주지 않고 프로젝트의 파일을 구성할 수 있다. 
하지만 리소스 파일에는 적합하지 않다.
<code>폴더</code>는 당연히 파일시스템 구조에 영향을 준다. </p>
<p>따라서 Xcode의 코드로만 작업할 것이라면 <code>그룹</code>이 좋을것이다.</p>
<p>출처 : <a href="https://stackoverflow.com/questions/34207664/difference-between-folder-and-group-in-xcode">스택오버플로우</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Xcode 로그] Class _PathPoint is implemented in both]]></title>
            <link>https://velog.io/@dev_sangau20/Xcode-%EB%A1%9C%EA%B7%B8-Class-PathPoint-is-implemented-in-both</link>
            <guid>https://velog.io/@dev_sangau20/Xcode-%EB%A1%9C%EA%B7%B8-Class-PathPoint-is-implemented-in-both</guid>
            <pubDate>Wed, 31 Aug 2022 08:31:19 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/dev_sangau20/post/25e798a0-2767-4a59-8a11-5eb0a2b90e01/image.png" alt=""></p>
<p>팀 프로젝트를 하다가 
Class _PathPoint is implemented in both로 시작하는 로그가 찍히는 것을 보고 바로 검색했다. </p>
<p>검색을 해보니 Objective-C 런타임에서 _PathPoint 및 _PointQueue 둘중 하나를 지정해 주어야 한다고 알려주는 것이였다.</p>
<p>따라서 이건 그냥 단순한 <a href="https://stackoverflow.com/questions/70006570/class-pointqueue-is-implemented-in-both-when-i-click-on-textfield-how-can-i">로그 노이즈</a> 라고 하니 무시하고 코딩을 하면 될 것 같다.</p>
<p>출처 : <a href="https://stackoverflow.com/questions/70006570/class-pointqueue-is-implemented-in-both-when-i-click-on-textfield-how-can-i">스택오버플로우</a></p>
]]></description>
        </item>
    </channel>
</rss>