<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dev-dinx.log</title>
        <link>https://velog.io/</link>
        <description>비전공자 iOS 개발자 준비중입니다 :)</description>
        <lastBuildDate>Sat, 06 Feb 2021 11:39:02 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. dev-dinx.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev-dinx" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+9 [Mini Project App(3)_Xylophone]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D9-Mini-Project-App3Xylophone</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D9-Mini-Project-App3Xylophone</guid>
            <pubDate>Sat, 06 Feb 2021 11:39:02 GMT</pubDate>
            <description><![CDATA[<h1 id="ios-mini-project-app3">iOS Mini Project App(3)</h1>
<h2 id="🎹-xylophone-🎹">🎹 Xylophone 🎹</h2>
<p><img src="https://images.velog.io/images/dev-dinx/post/3b466206-13df-4bb4-a3e4-14214879cb38/Simulator%20Screen%20Shot%20-%20iPhone%2011%20-%202021-02-06%20at%2020.30.33.png" alt=""></p>
<blockquote>
<h2 id="기능">기능</h2>
</blockquote>
<ul>
<li>버튼 클릭시 코드에 맞는 Sound 재생</li>
</ul>
<blockquote>
<h2 id="코드">코드</h2>
<p><img src="https://images.velog.io/images/dev-dinx/post/65d3e78d-314b-4831-8003-e803cbd363ef/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-02-06%20%EC%98%A4%ED%9B%84%208.32.08.png" alt=""></p>
</blockquote>
<ul>
<li>사용한 코드
<code>AVFoundation</code> - 오디오,동영상과 관련된 코드</li>
</ul>
<h2 id="프로젝트를-통해-알게된-점">프로젝트를 통해 알게된 점</h2>
<ul>
<li>모르는 코드를 검색하는 방법과 코드를 분석하는 방법.</li>
</ul>
<ol>
<li>구글에 원하는 기능+언어  검색 </li>
<li>스택오버플로우에서 맞는 자료 찾기</li>
<li>답변의 코드를 복사하여 공식문서에 찾아보기(Ex : developer.apple)</li>
</ol>
<ul>
<li>AVFoundation Framework </li>
</ul>
<h2 id="마무리">마무리</h2>
<ul>
<li>이번 프로젝트로는 소리를 삽입하는 방법을 알게 되었고, 처음으로 다른 Framework를 사용해보았습니다. 복습하는 느낌으로 다음번에도 아이즈원 어플을 만들어봐야겠습니다. :) </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+8 [Mini Project App(2)_Random IZ*ONE]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D8-Mini-Project-App2Random-IZONE</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D8-Mini-Project-App2Random-IZONE</guid>
            <pubDate>Wed, 03 Feb 2021 08:18:54 GMT</pubDate>
            <description><![CDATA[<h1 id="ios-mini-project-app2">iOS Mini Project App(2)</h1>
<h2 id="❣️-random-izone-❣️">❣️ Random IZ*ONE ❣️</h2>
<p><img src="https://images.velog.io/images/dev-dinx/post/bb980992-22a6-4848-b0ca-e1e331ecd3d5/Simulator%20Screen%20Shot%20-%20iPhone%2011%20-%202021-02-03%20at%2017.08.46.png" alt=""></p>
<blockquote>
<h2 id="기능">기능</h2>
</blockquote>
<ul>
<li>Click 버튼을 클릭하면 random으로 imageIzone 이미지 출력</li>
</ul>
<blockquote>
<h2 id="코드">코드</h2>
<p><img src="https://images.velog.io/images/dev-dinx/post/acb23412-98db-4f80-aaa7-4dd96c5da496/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-02-03%20%EC%98%A4%ED%9B%84%205.09.59.png" alt=""></p>
</blockquote>
<ul>
<li>사용한 문법
<code>Set</code> - Array와는 다르게 순서가 필요 없는 요소들의 묶음을 설정</li>
</ul>
<h2 id="프로젝트를-통해-알게된-점">프로젝트를 통해 알게된 점</h2>
<ul>
<li>간단하게 나마 Random Dice 프로젝트를 복습할 겸 팬심이 담긴 프로젝트를 해봤습니다.  저번에는 Array 를 통해 요소들의 묶음을 배열로 설정했는데 딱히 순서가 중요할 것 같지 않은 것들은 Set나 Dictionary를 사용해도 될 것 같아서 Set를 이용하여 만들어보았습니다. </li>
</ul>
<h2 id="마무리">마무리</h2>
<ul>
<li>확실히 책을 통해 정리했었던 문법들이 응용에 도움이 되는 것 같습니다. 개념을 모르고 무작정 쓰기만 하고 콘솔로그만 보니 지겨웠었는데 앱을 만들면서 문법의 쓰임새를 확실하게 알게 되니 재밌는 것 같습니다 :) <br></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+7 [Mini Project App(1)_Random Dice]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D7-Mini-Project-App1Random-Dice</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D7-Mini-Project-App1Random-Dice</guid>
            <pubDate>Mon, 01 Feb 2021 12:48:40 GMT</pubDate>
            <description><![CDATA[<h1 id="ios-mini-project-app1">iOS Mini Project App(1)</h1>
<h2 id="🁘-random-dice-🁘">🁘 Random Dice 🁘</h2>
<ul>
<li>Udemy 강의 내용에 대한 정리임을 밝힙니다.</li>
</ul>
<p><img src="https://images.velog.io/images/dev-dinx/post/2611bfc9-0aae-4395-ab5f-7ecb1d57903c/Simulator%20Screen%20Shot%20-%20iPhone%2011%20-%202021-02-01%20at%2020.43.43.png" alt=""></p>
<blockquote>
<h2 id="코드">코드</h2>
<p><img src="https://images.velog.io/images/dev-dinx/post/3a19652b-3f28-4dcf-bb8b-c5305daa783d/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-02-01%20%EC%98%A4%ED%9B%84%209.27.28.png" alt=""></p>
</blockquote>
<ul>
<li>사용한 문법
<code>let</code> - 1 ~ 6 까지의 주사위 이미지 배열을 변하지않는 상수로 설정
<code>var</code> - 주사위 이미지를 diceImageView로 설정
<code>Array</code> - 1 ~ 6 까지 주사위 이미지를 배열로 설정 </li>
<li>사용한 메서드
<code>Int.random(in:)</code> - random(in:) 범위 내에 값을 무작위로 설정</li>
</ul>
<h2 id="프로젝트를-통해-알게된-점">프로젝트를 통해 알게된 점</h2>
<ul>
<li>Array,var,let 등의 기초 문법은 공부했던 내용들이었습니다. 하지만 막상 이를 적용해보려니 어떻게 적용해야 될지 막막했었는데 간단하게나마 앱을 직접 만들어보고 문법들을 실제로 적용해보니 어떤 식으로 돌아가는 지 느낌이 살짝 왔습니다. <br>
사실 문법 공부를 하면서도 변수는 왜 만들어야하는지, 상수는 왜 만들어야 하는지 완전하게 이해가 되지 않았는데 변수나 배열을 통해 복잡했던 코드들이 간단하게 정리가 되는 것을 보니 신기하기도 하고 이해가 단번에 됐습니다.</li>
</ul>
<h2 id="마무리">마무리</h2>
<ul>
<li>신학기 프로모션 받겠다고 맥북 환불하고 다시 구매하기까지 오랜 시간이 지났네요. 문법 공부만 하는 것보다 실습도 병행하는게 나을 것 같아서 Udemy 강의를 구매했습니다. <br>
실습은 미니 프로젝트 앱으로, 문법은 기존의 Swift로 다시 힘내서 해보겠습니다.😆
<br>실습을 동영상이나 이미지로 세세하게 올려볼까 하다가 도저히 안될 것 같아서 포기하고 전체 코드와 사용된 코드들, 그리고 느낀점까지만 포스팅 합니다. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+6 [Swift_정리]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D6-Swift%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D6-Swift%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 11 Jan 2021 12:47:57 GMT</pubDate>
            <description><![CDATA[<h1 id="정리">정리</h1>
<ul>
<li>현재 6일차까지 공부한 내용들을 복습할 겸 해서 정리해보았습니다. 
  D + 0 : 출력
  D + 1 : 변수와 상수<pre><code> D + 2 : 기본 데이터 타입</code></pre>  D + 3 : 심화 데이터 타입 
  D + 4 : 연산자
  D + 5 : 흐름제어</li>
</ul>
<h2 id="d0-_-출력">D+0 _ 출력</h2>
<blockquote>
<h3 id="print와-dump">print와 dump</h3>
<blockquote>
<ul>
<li><code>print()</code>
  콘솔 로그를 남기는 용도의 함수
  문자열 보간법 ()</li>
<li><code>dump()</code>
  🔍 print 함수에 비해 자세한 정보를 출력해주는 함수.</li>
</ul>
</blockquote>
</blockquote>
<pre><code>var someVar:String = &quot;world&quot;
print(&quot;hello&quot;) // hello
print(&quot;hello \(someVar)&quot;) // 문자열 보간법 \() </code></pre><h2 id="d1-_-변수와-상수">D+1 _ 변수와 상수</h2>
<blockquote>
<h3 id="변수br">변수<br></h3>
<blockquote>
<p><code>var</code> 키워드를 사용하여<br>
        <code>var [변수명]:[데이터 타입] = [값]</code> 의 형태로 선언한다.
    <br>🔍 변수의 경우 값을 선언하여도 값이 변할 수 있다.</p>
</blockquote>
</blockquote>
<blockquote>
<h3 id="상수">상수</h3>
<blockquote>
<p><code>let</code> 키워드를 사용하여<br>
        <code>let [변수명]:[데이터 타입] = [값]</code> 의 형태로 선언한다.<br>
    🔍 상수의 경우 값을 선언하면 값이 바뀌지 않는다.
    🔍 상수를 사용하는 이유 중 가장 중요한 이유는 가독성이다.</p>
</blockquote>
</blockquote>
<pre><code>let satelliteOfEarth:String = &quot;Moon&quot;
    print(satelliteOfEarth)
var year:Int = 2021
year = 2022
    print(&quot;내년은 \(year)년도 입니다.&quot;) // &quot;내년은 2022년도 입니다.&quot;</code></pre><h2 id="d23-_-데이터-타입">D+2~3 _ 데이터 타입</h2>
<blockquote>
<blockquote>
<h3 id="int와-uint">Int와 UInt</h3>
<ul>
<li><strong>Int</strong> : <code>Int</code>는 +,- 부호를 포함한 정수를 표현한다.</li>
<li><strong>UInt</strong> :     <code>UInt</code>는 - 부호를 포함하지 않는 양의 정수만을 표현한다.    </li>
</ul>
</blockquote>
</blockquote>
<pre><code>var someInt:Int = -123
var someUInt:UInt = 123</code></pre><hr>
<blockquote>
<h3 id="bool">Bool</h3>
<blockquote>
<ul>
<li><strong>Bool</strong> : <code>Bool</code>은 불리언 타입으로, 참(true) 또는 거짓(false) 만을 값으로 가지는 데이터 타입이다</li>
</ul>
</blockquote>
</blockquote>
<pre><code>var someBool:Bool = false
print(&quot;강아지는 식물인가요? : \(someBool)&quot;) // false</code></pre><hr>
<blockquote>
<h3 id="float-와-double">Float 와 Double</h3>
<p>🔎 Float와 Double은 부동소수점을 사용하는 실수이며, 부동소수 타입이라고 한다.
    흔히 우리가 알고 있는 소수점 자리가 있는 수를 뜻한다.</p>
<blockquote>
<ul>
<li><strong>Float</strong> : 32비트 환경에서 7자리 이하의 수까지만 표현이 가능하다</li>
<li><strong>Double</strong> : 64비트 환경에서 최소 15자리의 십진수를 표현할 수 있다.
<br>🔑 *둘 중 무엇을 사용해야 할 지 모른다면 Double의 사용을 권장한다. *</li>
</ul>
</blockquote>
</blockquote>
<pre><code>var someFloat:Float = 3.12345678 // 3.123456
var someDouble:Double = 1.12345678901234 // 1.12345678901234...</code></pre><blockquote>
<p>🔎 <em>임의의 수 만들기</em></p>
</blockquote>
<pre><code>Int.random(in: 1...100)
Double.random(in: 1.1...1.2)</code></pre><hr>
<blockquote>
<h3 id="character">Character</h3>
<p>🔎 <code>Character</code>은 말 그대로 &#39;문자&#39;를 의미한다. 
문장이나 단어가 아닌 단 하나의 문자이다.</p>
</blockquote>
<pre><code>var someCharacter:Character = &quot;❤️&quot;
print(someCharacter) // ❤️</code></pre><hr>
<blockquote>
<h3 id="string">String</h3>
<p>🔎  <code>String</code> 타입은 문자의 나열, 즉 문자열이다.
    <code>String</code> 타입에는 기본적으로 많은 메서드들과 프로퍼티들이 구현되어 있으며, 문자열과 관련된 연산자도 많다</p>
</blockquote>
<pre><code>let hello:String = &quot;Hello&quot;
let world:String = &quot;World&quot;
    print(&quot;\(hello)&quot; + &quot; &quot; + &quot;\(world)&quot;) 
    // &#39;+&#39; 와 문자열 보간법을 통해 출력 가능</code></pre><pre><code>var isSameString:Bool = false
isSameString = hello == &quot;Hello&quot;
    print(isSameString)
isSameString = hello == &quot;hi&quot;
    print(isSameString) 
    // 연산자를 이용한 문자열 비교</code></pre><blockquote>
<blockquote>
<h3 id="any와-nill">Any와 nill</h3>
</blockquote>
</blockquote>
<ul>
<li><strong>Any</strong> : Any는 스위프트의 모든 데이터 타입을 사용할 수 있는 데이터 타입이다.<br>
  변수 또는 상수에 데이터 타입이 Any로 지정되어 있다면 그 변수 또는 상수에는 어떤 종류의 데이터 타입이든지 상관 없이 할당 할 수 있다.</li>
<li><strong>nil</strong> : nil은 특정 타입이 아닌 &#39;없음&#39;을 나타내는 키워드이다. 즉, 변수 또는 상수에 값이 들어있지 않고 비어있음을 나타낸다.<pre><code>var someAny:Any = 123
var someany:Any = &quot;일이삼&quot;
var soMeany:Any = 1.23</code></pre><blockquote>
<blockquote>
<h3 id="튜플tuple">튜플(Tuple)</h3>
<p>🔍 튜플은 타입의 이름이 따로 지정되어 있지 않은, 프로그래머 마음대로 만드는 타입이다.
지정된 데이터의 묶음이라고 표현할 수 있다.<br>
  튜플은 이름이 따로 없으므로 일정 타입의 나열만으로 튜플 타입을 생성해줄 수 있다.<br>
 🔑 <em><code>typealias</code> - 사용할 때마다, 긴 튜플 타입을 모두 쓰게 되면 번거롭기 때문에 튜플에 별칭을 지정해줄 수 도 있다.</em></p>
</blockquote>
</blockquote>
<pre><code> var somePerson: (String, Int, Double) = (&quot;dinx&quot;, 70, 175.1)
print(&quot;name : \(somePerson.0) , weight : \(somePerson.1) , height : \(somePerson.2)&quot;                                
var someAdress:(도:String, 시:String, 구:String) = (&quot;경기도&quot;, &quot;OO시&quot;, &quot;ㅁㅁ구&quot;)
  print(&quot;도는 \(someAdress.도)&quot;) // 각 데이터 타입에 이름을 붙혀줄 수 도 있다.
typealias personTuple = (name:String , age:Int, height:Double) // personTuple 이라는 튜플 데이터 타입의 별칭을 지어 새로 생성했다.                
let 철수:personTuple = (&quot;김철수&quot;, 5 , 140.2)
let 맹구:personTuple = (&quot;박맹구&quot;, 5 , 146.3)
  print(철수) // (name: &quot;김철수&quot;, age: 5, height:140.2</code></pre><blockquote>
<blockquote>
<h3 id="array">Array</h3>
<p>🔎 배열을 뜻하는 <code>Array</code> 타입은 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션 타입이다.<br></p>
</blockquote>
</blockquote>
<ul>
<li><code>var 변수명 : Array&lt;데이터 타입&gt; = [값, 값, 값]</code></li>
<li><code>var 변수명 : [데이터 타입] = [값, 값, 값]</code><br>
💡 배열은 항상 0번째 부터 시작함.
💡 배열에는 &#39;순서&#39;가 있다는 것을 꼭 기억해야함.<pre><code>var 한글 : [String] = [&quot;가&quot;, &quot;나&quot;, &quot;다&quot;, &quot;라&quot;] 
var 영어 : [String] = [&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;E&quot;]
print(한글[1])
print(영어[3]) // 인덱스를 활용해 값을 추출. [n] 번째에 있는 값 추출            
한글.append(&quot;마&quot;) // append 메서드를 이용하여 마지막 순서에 값 추가
영어.insert(&quot;D&quot;, at: 3) // insert 메서드를 이용하여 at: n 번째 순서에 값 추가</code></pre><blockquote>
<blockquote>
<h3 id="dictionary">Dictionary</h3>
<p>🔎 딕셔너리는 요소들이 순서 없이 키와 값의 쌍으로 구성되는 타입이다.
딕셔너리에 저장되는 값은 항상 키와 값의 쌍을이루며, 딕셔너리 안에는 키가 하나이거나 여러 개일 수 있다.</p>
</blockquote>
</blockquote>
</li>
</ul>
</li>
<li><code>var someDic: Dictionary&lt;String(키),Int(값)&gt; = Dictionary&lt;String(키),Int(값)&gt;()</code></li>
<li><code>var someDic:[String:Int] = [String:Int]()</code></li>
<li><code>var someDic: StringIntDictionary = StringIntDictionary()</code></li>
<li><code>typealias StingIntDictionary = [String:Int]</code><pre><code>typealias 티어표 = [String:Int]
var champ:티어표 = [&quot;Olaf&quot;:1 , &quot;Amumu&quot;:5 , &quot;Xinziao&quot;:4]
print(champ)</code></pre><blockquote>
<blockquote>
<h3 id="set">Set</h3>
<p>🔎 세트는 같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입이다.
세트는 보통 순서가 중요하지 않거나 각 요소가 유일한 값이어야 하는 경우에 사용한다.</p>
</blockquote>
</blockquote>
</li>
<li><code>var names: Set&lt;String&gt; = Set&lt;String&gt;()</code></li>
<li><code>var names: Set&lt;String&gt; = []</code><pre><code>var animal: Set&lt;String&gt; = [&quot;호랑이&quot;,&quot;치타&quot;,&quot;가젤&quot;,&quot;원숭이&quot;]
print(animal.count) // count 프로퍼티를 통해 세트 안에 값이 몇 개 있는지 확인 가능
print(animal.isEmpty) // isEmpty 프로퍼티를 통해 값이 비어있는지 아닌지 확인 가능</code></pre><blockquote>
<blockquote>
<h3 id="열거형enum">열거형(enum)</h3>
<p>🔎열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입이다.
  열거형은 제한된 선택지를 주고 싶을때,</p>
<pre><code>     정해진 값 외에는 입력받고 싶지 않을 때,
     그리고 예상된 입력 값이 한정되어 있을 때 사용한다. </code></pre></blockquote>
</blockquote>
<pre><code> enum leagueOFlegend : String {
  case midlane = &quot;미드&quot; // &quot;미드&quot; 라는 rawValue를 설정했다.
  case jungle = &quot;정글&quot;
  case top = &quot;탑&quot;
  case adCarry = &quot;원딜&quot;
  case supporter = &quot;서폿&quot;
} 
=
enum LOL {
  case mid, jg, top, adc, sup
}</code></pre></li>
</ul>
<hr>
<h2 id="d4-_-연산자">D+4 _ 연산자</h2>
<blockquote>
<h3 id="연산자">연산자</h3>
<p>🔎 연산자는 그 종류가 매우 다양하지만 자주 쓰이는 연산자를 아래와 같이 정리한다.</p>
<blockquote>
<ul>
<li><strong>할당 연산자</strong><pre><code>  `A = B`</code></pre>A에 B의 값을 할당한다. 데이터 타입이 같아야 한다.<Br><br></li>
<li><strong>산술 연산자</strong><pre><code> ` A + B`
 ` A - B`
`  A * B`
`  A / B`</code></pre>   <code>A % B</code>
  대체로 수학에서 쓰이는 연산과 같은 기능을 한다.<Br><br></li>
</ul>
</blockquote>
</blockquote>
<ul>
<li><strong>비교 연산자</strong><pre><code>` A == B ` : A와 B가 같은 값인지 비교하여 불리언 값을 반환
 `A &gt;= B`  : A가 B보다 크거나 같은 값인지 비교하여 불리언 값을 반환
 `A &lt;= B`  : A가 B보다 작거나 같은 값인지 비교하여 불리언 값을 반환
 `A &gt; B `  : A가 B보다 큰 지 비교하여 불리언 값을 반환
` A &lt; B `  : A가 B보다 작은 지 비교하여 불리언 값을 반환
` A != B ` : A와 B가 서로 다른 값인지 비교하여 불리언 값을 반환</code></pre>   <code>A === B</code> : A와 B가 참조 타입 일 때 A와 B가 같은 인스턴스를 가리키는지 비교하여 불리언 값을 반환 <br>
 A와 B의 값을 비교하는 연산자이며, 불리언 값으로 반환한다는 특징이 있다.<br><br><ul>
<li><strong>범위 연산자</strong>
   <code>A...B</code> : A부터 B까지의 수를 묶어 범위를 표현.A와 B를 포함
  <code>A..&lt; B</code> : A부터 B 미만까지의 수를 묶어 범위를 표현.A를 포함하고 B는 포함되지 않음
  <code>A...</code> : A 이상의 수를 묶어 범위를 표현.A를 포함
  <code>...A</code>  : A 이하의 수를 묶어 범위를 표현.A를 포함
  <code>..&lt; A</code> : A 미만의 수를 묶어 범위를 표현.A를 포함하지 않음<br><br></li>
<li><strong>부울 연산자</strong>
NOT(부정) 부울 연산자 - <code>!B</code> : B(불리언 값)의 참, 거짓을 반전한다.
AND 부울 연산자 - <code>A&amp;&amp;B</code> : A와 B의 불리언 AND 논리 연산을 실행한다.
OR 부울 연산자- <code>A||B</code> : A와 B의 불리언 OR 논리 연산을 실행한다.<br><Br></li>
<li><strong>비트 연산자</strong>
비트 연산이란 2진법으로 표기된 숫자를 연산하는 것을 말한다.
   <em>OR 연산</em> - <code>A|B</code> : A와 B의 OR 논리 연산을 실행한다.
   <em>AND 연산</em> - <code>A &amp; B</code> : A와 B의 AND 논리 연산을 실행한다.
   <em>XOR 연산</em> - <code>A^B</code> : A와 B의 XOR 연산을 실행한다.
   <em>NOT 연산</em> - <code>~A</code> : A의 비트를 반전한 결과를 반환한다.
   비트 이동(쉬프트) 연산자 : <code>A &gt;&gt; B</code> , <code>A &lt;&lt; B</code> : A의 비트를 B만큼 이동한다.<br><pre><code>   OR 연산은 두 개 중에 하나라도 결과가 참이면 참
   AND 연산은 두 개 다 참인 경우에만 참.
   NOT 연산은 값이 반대가 되는 것
   XOR 연산은 같은 값을 가지면 거짓, 다른 값을 가지면 참</code></pre></li>
</ul>
</li>
</ul>
<hr>
<h2 id="d5_흐름제어">D+5_흐름제어</h2>
<blockquote>
<p>🔎 흐름제어에는 조건문과 반복문이 존재한다.</p>
<blockquote>
<h3 id="if-else-조건문"><strong>if else 조건문</strong></h3>
<p>   <code>if</code> 는 대표적인 조건문으로 <code>if</code>,<code>else</code> 등의 키워드를 사용하여 구현.
    swift의 <code>if</code> 구문은 조건의 값이 반드시 <code>bool</code> 타입이어야 함</p>
</blockquote>
</blockquote>
<pre><code>  let someint = 100
if someint &lt; 100 {
    print(&quot;100미만&quot;) // 만약 조건이 참이라면  아래 명령문을 실행
} else if someint &gt; 100 { // 다른 조건이 참 이라면 아래 명령문을 실행
    print(&quot;100초과&quot;)
}  else { // 위에 조건이 전부 거짓이라면 아래 명령문을 실행
    print(&quot;100&quot;)
}</code></pre><h3 id="switch-조건문">switch 조건문</h3>
<p>   switch 조건문은 스위프트의 기본 문법이라고 할 수 있다.
    타 언어에서의 <code>switch</code> 구문과는 달리 자동으로 <code>break</code>가 걸려있다.
    <code>break</code>를 걸지 않으려면 <code>fallthrough</code> 키워드를 사용한다.</p>
<pre><code>  var value1 = 4
switch (value1) {
case 4:
    print(&quot;4&quot;)
    fallthrough
case 3:
    print(&quot;3&quot;)
    fallthrough
case 2:
    print(&quot;2&quot;)
    fallthrough
case 1:
    print(&quot;1&quot;)
    fallthrough
default:
    print(&quot;none&quot;)
}</code></pre><blockquote>
<blockquote>
<h3 id="for-in-반복문">for-in 반복문</h3>
<p>  <code>for-in</code> 반복 구문은 반복적인 데이터나 시퀀스를 다룰 때 가장 많이 사용한다.
    <code>for</code> 문은 문자열 또는 튜플이 들어갔을 때 안에 있는 요소를 하나씩 반복한다.</p>
</blockquote>
</blockquote>
<pre><code>  for i in 0...2 {
    print(i)
}
for i in 0...5 {
    if i.isMultiple(of: 2) {
        print(i)
        continue // continue 키워드를 사용하면 바로 다음 시퀀스로 건너뛴다.
    }  
    print(&quot;\(i) == 홀수&quot;)
}    
let helloSwift: String = &quot;Hello, Swift!&quot;
for char in helloSwift {
    print(char)
}</code></pre><h3 id="while-반복문">while 반복문</h3>
<p>   특정 조건(Bool 타입)이 성립하는 한 블록 내부의 코드를 반복해서 실행한다.</p>
<pre><code>  var names: [String] = [&quot;joker&quot;, &quot;jenny&quot;, &quot;nove&quot;, &quot;max&quot;]
while names.isEmpty == false {
    print(&quot;Good bye \(names.removeFirst())&quot;) // removeFirst() 는 요소를 삭제함과 동시에 삭제한 요소를 반환한다.</code></pre><h3 id="repeat-while-반복문">repeat-while 반복문</h3>
<p>   <code>repeat</code> 블록의 코드를 최초 1회 실행한 후, <code>while</code> 다음의 조건이 성립하면 블록 내부의 코드를 반복실행한다.</p>
<pre><code>  var name:[String] = [&quot;john&quot;, &quot;chalse&quot;, &quot;jessica&quot;, &quot;menny&quot;]
repeat {
    print(&quot;Good bye \(name.removeFirst())&quot;)
} while name.isEmpty == false</code></pre><h2 id="마무리">마무리</h2>
<ul>
<li>오늘은 그 동안 배웠던 것들을 복습할 겸 해서 정리를 해보았습니다. 잘 기억이 나지 않았거나 이해가 안됐지만 그냥 넘어갔었던 부분들을 중점으로 다시 책을 정독하며 정리했더니 전에는 이해가 안갔었던 개념들도 이제는 이해가 가네요! :)<br>
아마 내일부터는 벨로그 포스팅이 조금 어려울 것 같습니다. 신학기 프로모션을 놓치고 맥북을 구매했어서 환불을 받고 다시 구매하려고 해서요..ㅠㅠ
그래도 공부는 책과 유튜브로 하고 있겠습니다! 
<br>오늘도 감사합니다 :)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+5 [Swift_흐름제어]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D5-Swift%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D5-Swift%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4</guid>
            <pubDate>Sat, 09 Jan 2021 07:24:57 GMT</pubDate>
            <description><![CDATA[<h1 id="흐름제어">흐름제어</h1>
<h2 id="조건문">조건문</h2>
<h3 id="if-구문">if 구문</h3>
<blockquote>
<p>if else 구문은 대표적인 조건문으로 if,else 등의 키워드를 사용하여 구현한다.
swift의 if 구문은 <span style="color:red">**&#39;값이 꼭 Bool 타입&#39;</span>이어야 한다.<br>
else if 는 몇 개가 이어져도 상관없고 else 블록은 없어도 상관 없다. 
else if 의 조건을 충족해서 블록 내부의 명령문이 실행되면 그 다음에 이어진 else if 의 조건을 충족하더라도 실행되지 않고 조건문을 빠져나온다. </p>
</blockquote>
<pre><code>let someInteger = 100

if someInteger &lt; 100 {
    print(&quot;100미만&quot;)
} else if someInteger &gt; 100 {
    print(&quot;100초과&quot;)
}  else {
    print(&quot;100&quot;)
}

let first:Int = 10
let second:Int = 10

if first &gt; second {
    print(&quot;역시 처음이야&quot;)
} else if first &lt; second {
    print(&quot;두번째가 짱이지&quot;)
} else {
    print(&quot;그거나그거나~&quot;)
}

let one:Int = 5
let two:Int =  5
var biggerValue:Int = 0

if one &gt; two {
    biggerValue = one
} else if one == two {
    biggerValue = one
} else if first &lt; two {
    biggerValue = two
} else if one == 5 {
    biggerValue = 100       //  위에 조건이 충족되어 있기 때문에 100은 출력 되지 않는다.
}

print(biggerValue)

let sameOne:Int = 5
let sameTwo : Int = 5
var sameValue : Int = 0

if (sameOne &gt; sameTwo) {
    sameValue = sameOne
}   else if (sameOne == sameTwo) {
    sameValue = sameOne
}   else if (sameOne &lt; sameTwo) {
    sameValue = sameTwo
}   else if (sameOne == 5) {
    sameValue = 100         // 위와 동일함, 조건을 소괄호로 묶어주는 것은 선택사항
}

let userID:String = &quot;xind&quot;

var inPutID:String = &quot;xind&quot;


if userID == inPutID {
    print(&quot;Hello,&quot; + &quot;\(userID)&quot;)
} else {
    print(&quot;Who are you?&quot;)</code></pre><h3 id="switch-구문">switch 구문</h3>
<blockquote>
<ul>
<li>switch 구문은 if문과 같이 조건 제어문에 속하지만 switch 구문은 부등식이 사용될 수 없다. <br>
if문이 <span style="color:red">&#39;Bool 타입에 의해 true일 경우&#39;</span> 블록이 실행된다고 한다면, switch문은 <span style="color:red">&#39;비교할 변수가 어떤 값을 가지냐&#39;</span>에 따라 실행문을 선택하게 된다. 즉 switch문은 크고 작다를 표현하는 것이 아니라, 동등 조건만 검사할 수 있다.</li>
</ul>
</blockquote>
<pre><code>let someString:String = &quot;리신&quot;

switch someString {
case &quot;리신&quot; :
    print(&quot;정글&quot;)
case &quot;트리스타나&quot; :
    print(&quot;원딜&quot;)
default :
    print(&quot;트롤&quot;)
}

var value = 2
var days: Int = 0

switch (value) {
case 1,3,5,7,8,10,12:
    print(&quot;31일까지 존재&quot;)
case 4,6,9,11:
    print(&quot;30일까지 존재&quot;)
case 2:
    print(&quot;28 혹은 29일까지 존재&quot;)
default:
    print(&quot;달을 정확히 입력하세요&quot;)
}

let num = 25
let count: String

switch num {
case 0...9 :
    count = &quot;한자리 수&quot;
case 10...99:
    count = &quot;두자리 수&quot;
case 100...999:
    count = &quot;세자리 수&quot;
default:
    count = &quot;네자리 수 이상&quot;
} // num 이라는 상수에 대하여, num이 0~9까지의 범위 이면 count = 한자리 수.

print(&quot;\(count)입니다.&quot;)


var value1 = 4
switch (value1) {
case 4:
    print(&quot;4&quot;)
    fallthrough
case 3:
    print(&quot;3&quot;)
    fallthrough
case 2:
    print(&quot;2&quot;)
    fallthrough
case 1:
    print(&quot;1&quot;)
    fallthrough
default:
    print(&quot;none&quot;)
}   // fallthrough는 break를 걸지 않고 쭉 내려온다. (스위프트에서는 자동으로 break가 걸려있기 때문에)</code></pre><blockquote>
<ul>
<li>타 프로그래밍 언어에서의 switch 는 <code>case</code> 가 끝날 때 마다 <code>break</code>를 넣어줘야 하지만 Swift에서는 자동으로 <code>break</code>가 걸린다.</li>
</ul>
</blockquote>
<h2 id="반복문">반복문</h2>
<p>조건에 따라 실행되어야 하는 명령어는 조건문을 통해 분기한다면, 같거나 비슷한 명령을 반복 실행할 때는 반복문을 사용. 특히나 배열과 같은 시퀀스, 순서가 있는 데이터는 반복문으로 편하게 처리할 수 있다.</p>
<h3 id="for-in-구문">for-in 구문</h3>
<blockquote>
<p>for-in 반복 구문은 반복적인 데이터나 시퀀스를 다룰 때 가장 많이 사용한다.
    for 문은 문자열 또는 튜플이 들어갔을 때 안에 있는 요소를 하나씩 반복한다.</p>
<blockquote>
<p> for <code>임시 상수</code> in <code>시퀀스 아이템(문자열,튜플)</code> {
    <code>실행 코드</code>
}</p>
</blockquote>
</blockquote>
<pre><code>for i in 0...2 {
    print(i)
}

for i in 0...5 {

    if i.isMultiple(of: 2) {
        print(i)
        continue // continue 키워드를 사용하면 바로 다음 시퀀스로 건너뛴다.
    }

    print(&quot;\(i) == 홀수&quot;)
}

let helloSwift: String = &quot;Hello, Swift!&quot;

for char in helloSwift {
    print(char)
}

var result: Int = 1
for _ in 1...3 { 
    result *= 10 // 시퀀스에 해당하는 값이 필요 없다면 와일드카드 식별자(_)를 사용
}

print(&quot;10의 3제곱은 \(result)입니다.&quot;)


let freinds: [String:Int] = [&quot;Jay&quot;:35, &quot;Joe&quot;:25, &quot;Anna&quot;:28]

for n in freinds {
    print(n)
}</code></pre><ul>
<li>Dictionary를 이용한 for-in 구문</li>
</ul>
<pre><code>let 픽창:[String:String] =
    [&quot;탑&quot; : &quot;다리우스&quot;, &quot;정글&quot; : &quot;리신&quot;, &quot;미드&quot; : &quot;아칼리&quot;, &quot;원딜&quot; :&quot;진&quot;, &quot;서폿&quot; : &quot;레오나&quot; ]

for (포지션, 챔피언) in 픽창 {
    print(&quot;\(포지션) : \(챔피언)&quot;) // 포지션에는 키, 챔피언에는 값
}</code></pre><ul>
<li>Set를 이용한 for-in 구문</li>
</ul>
<pre><code>let 지역번호:Set&lt;String&gt; = [&quot;02&quot;, &quot;031&quot;, &quot;042&quot;, &quot;041&quot;]

for 번호 in 지역번호 {
    print(번호)
}</code></pre><h3 id="while-구문">while 구문</h3>
<blockquote>
<p>특정 조건(Bool 타입)이 성립하는 한 블록 내부의 코드를 반복해서 실행한다.</p>
</blockquote>
<pre><code>var names: [String] = [&quot;joker&quot;, &quot;jenny&quot;, &quot;nove&quot;, &quot;max&quot;]

while names.isEmpty == false {
    print(&quot;Good bye \(names.removeFirst())&quot;) // removeFirst() 는 요소를 삭제함과 동시에 삭제한 요소를 반환한다.</code></pre><h3 id="repeat-while-구문">repeat-while 구문</h3>
<ul>
<li>repeat 블록의 코드를 최초 1회 실행한 후, while 다음의 조건이 성립하면 블록 내부의 코드를 반복실행한다.</li>
</ul>
<pre><code>var name:[String] = [&quot;john&quot;, &quot;chalse&quot;, &quot;jessica&quot;, &quot;menny&quot;]

repeat {
    print(&quot;Good bye \(name.removeFirst())&quot;)
} while name.isEmpty == false</code></pre><h2 id="마무리">마무리</h2>
<ul>
<li>책에는 정말 문법에 대한 내용만 나와있고 자세한 설명이 나와있지 않았습니다.. 예를 들어 switch와 if문에 대한 차이도 자세하게 명시되어 있지 않고 그저 &#39;타 프로그래밍 언어와 비슷한 기능을 한다&#39; 라고만 나와있어서 이해하기가 어려웠습니다. 
그래서 c언어의 switch문을 찾아보고 나와있는 개념을 적어두었습니다.
프로그래밍에 대한 아무런 지식이 없는 비전공자에게는 하나하나 이해하기가 너무 어렵네요 T.T <br><br>
앞으로는 문법 공부를 겸해서 SwiftUI나 실질적으로 어플리케이션을 만들어볼까 합니다. 문법만 공부하다보니 저에게 지금 당장 필요하지 않은 세세한 문법까지 보게 되는 것 같아, 실습을 병행하면서 공부해볼까 합니다. <br> Swift 문법과 더불어 실습까지 포스팅 해보도록 하겠습니다.</li>
</ul>
<p>감사합니다 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+4 [Swift_연산자]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D4-Swift%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D4-Swift%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Thu, 07 Jan 2021 07:44:06 GMT</pubDate>
            <description><![CDATA[<h1 id="연산자">연산자</h1>
<h2 id="1-할당-연산자">1. 할당 연산자</h2>
<blockquote>
<ul>
<li>값을 할당 할 때 사용하는 연산자이다.<br><blockquote>
<p><code>A = B</code> <br>(A에 B를 할당)</p>
</blockquote>
</li>
</ul>
</blockquote>
<hr>
<pre><code>var aType:Int = 5
var bType:Int = 10

aType = bType // aType = 10 </code></pre><h2 id="2-산술-연산자">2. 산술 연산자</h2>
<blockquote>
<ul>
<li>산술 연산자는 대체로 수학에서 쓰이는 연산과 같은 역할을 수행한다.<blockquote>
<ol>
<li><code>A + B</code> <br>(A와 B를 더한 값을 반환한다)</li>
<li><code>A - B</code> <br>(A에서 B를 뺀 값을 반환한다)</li>
<li><code>A * B</code> <br>(A와 B를 곱한 값을 반환한다)</li>
<li><code>A / B</code> <br>(A를 B로 나눈 값을 반환한다)</li>
<li><code>A % B</code> <br>(A를 B로 나눈 나머지 값을 반환한다)</li>
</ol>
</blockquote>
</li>
</ul>
</blockquote>
<hr>
<pre><code>let type1:Int = 1
let type2:Int = 2

type1 + type2 // 3
type1 - type2 // -1
type1 * type2 // 2
type1 / type2 // 0
type1 % type2 // 1</code></pre><h2 id="3-비교-연산자">3. 비교 연산자</h2>
<blockquote>
<ul>
<li>비교 연산자는 두 값을 비교할 때 사용하는 연산자이다.<blockquote>
<ol>
<li><code>A == B</code> <br>(A와 B가 <span style="color:red">같은 값</span>인지 비교하여 Bool 값을 반환</li>
<li><code>A &gt;= B</code> <br>(A가 B보다 <span style="color:red">크거나 같은 값</span>인지 비교하여 Bool 값을 반환)</li>
<li><code>A &lt;= B</code> <br>(A가 B보다 <span style="color:red">작거나 같은 값</span>인지 비교하여 Bool 값을 반환)</li>
<li><code>A &gt; B</code> <br>(A가 B보다 <span style="color:red">큰 값</span>인지 비교하여 Bool 값을 반환)</li>
<li><code>A &lt; B</code> <br>(A가 B보다 <span style="color:red">작은 값</span>인지 비교하여 Bool 값을 반환)</li>
<li><code>A!= B</code> <br>(A와 B가 <span style="color:red">다른 값</span>인지 비교하여 Bool 값을 반환)</li>
<li><code>A === B</code> <br>(A와 B가 참조(레퍼런스)타입 일 때 A와 B가 같은 인스턴스를 가리키는 지 비교하여 Bool 값을 반환)</li>
<li><code>A !== B</code> <br> (A와 B가 참조(레퍼런스)타입 일 때 A와 B가 같지 않은 인스턴스를 가리는 지 비교하여 Bool 값을 반환)</li>
<li><code>A ~= B</code> <br> (A와 B의 패턴이 매치되는지 확인하여 Bool 값을 반환)</li>
</ol>
</blockquote>
</li>
</ul>
</blockquote>
<hr>
<pre><code>let type가:Int = 1
let type나:Int = 3

type가 == type나 // false
type가 &gt;= type나 // false
type가 &lt;= type나 // true
type가 &gt; type나 // false
type가 &lt; type나 // true
type가 != type나 // true
type가 ~= type나 // false</code></pre><h2 id="4-삼항-조건-연산자">4. 삼항 조건 연산자</h2>
<blockquote>
<ul>
<li>피 연산자가 세 개인 삼항 조건 연산자이다. <blockquote>
<p>Question? A : B (Question(Bool 값)이 참이면 A를, 거짓이면 B를 반환</p>
</blockquote>
</li>
</ul>
</blockquote>
<pre><code>type가 &gt; type나 ? type가 : type나 
// &#39;type가(1)&#39;가 &#39;type나&#39;(3) 보다 큽니까? -&gt; 거짓이므로 &#39;type나&#39;의 값인 &#39;3&#39; 반환</code></pre><h2 id="5-범위-연산자">5. 범위 연산자</h2>
<blockquote>
<ul>
<li>범위 연산자는 값의 범위를 나타내고자 할 때 사용한다.<blockquote>
<ol>
<li><code>A...B</code> <br>(A부터 B까지의 수를 묶어서 범위로 표현.A와 B를 포함한다)</li>
<li><code>A..&lt;B</code> <br>(A부터 B미만 까지의 수를 묶어서 범위로 표현.A는 포함하고 B는 포함하지 않는다)</li>
<li><code>A...</code> <br> (A 이상의 수를 묶어 범위로 표현.A를 포함)</li>
<li><code>...A</code> <br> (A 이하의 수를 묶어 범위로 표현.A를 포함)</li>
<li><code>..&lt;A</code> <br> (A 미만의 수를 묶어 범위로 표현.A를 포함하지 않음)</li>
</ol>
</blockquote>
</li>
</ul>
</blockquote>
<hr>
<pre><code>var type3:Int = 100
var type4:Int = 1000

type3...type4
type3..&lt;type4
type3...
...type3
..&lt;type3</code></pre><h2 id="6-부울-연산자">6. 부울 연산자</h2>
<blockquote>
<ul>
<li>불리언 값의 논리 연산을 할 때 사용.<blockquote>
<p>NOT(부정) 부울 연산자 : !B : B(불리언 값)의 참, 거짓을 반전한다.</p>
<pre><code>  AND 부울 연산자 : A &amp;&amp; B : A와 B의 불리언 AND 논리 연산을 실행한다.
  OR 부울 연산자 : A||B : A와 B의 불리언 OR 논리 연산을 실행한다.</code></pre></blockquote>
</li>
</ul>
</blockquote>
<ul>
<li><span style="color:red"><em>* *Example</em> **</span><pre><code>true and false ==&gt; false
true and true ==&gt; true
false and false ==&gt; false
true or true ==&gt; true
true or false ==&gt; true
false or false ==&gt; false
Not true ==&gt; false
Not false ==&gt; true</code></pre></li>
</ul>
<hr>
<pre><code>var someTrue:Bool = true
var someFalse:Bool = false

!someFalse // true
!someTrue // false
someTrue &amp;&amp; someFalse // false
someTrue || someFalse // true</code></pre><h2 id="7-비트-연산자">7. 비트 연산자</h2>
<blockquote>
<ul>
<li>비트 연산이란 2진법으로 표기된 숫자를 연산하는 것을 말한다.<blockquote>
</blockquote>
   OR 연산 : A|B : A와 B의 OR 논리 연산을 실행한다.
   AND 연산 : A &amp; B : A와 B의 AND 논리 연산을 실행한다.
   XOR 연산 : A^B : A와 B의 XOR 연산을 실행한다.
   NOT 연산 : ~A : A의 비트를 반전한 결과를 반환한다.
   비트 이동(쉬프트) 연산자 : A &gt;&gt; B , A &lt;&lt; B : A의 비트를 B만큼 이동한다.<blockquote>
<pre><code>  OR 연산은 두 개 중에 하나라도 결과가 참이면 참
  AND 연산은 두 개 다 참인 경우에만 참.
  NOT 연산은 값이 반대가 되는 것
  XOR 연산은 같은 값을 가지면 거짓, 다른 값을 가지면 참</code></pre></blockquote>
</li>
</ul>
</blockquote>
<pre><code>var someBit:Int = 8
var someBite:Int = 4

someBit|someBite // 12
someBit &amp; someBite // 0
someBit ^ someBite // 12
~someBit // -9
someBit &gt;&gt; 2 // 2 (someBit = 1000 , 오른쪽으로 2칸 이동해서 이진법 10으로 변환, 이진법 10은 십진법 2)</code></pre><p><img src="https://images.velog.io/images/dev-dinx/post/0520ead0-6192-42bb-a9ac-d5d8012ac8e6/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-07%20%EC%98%A4%ED%9B%84%203.49.04.png" alt=""></p>
<ul>
<li>비전공자로서 비트 연산에 대한 개념이 아예 없다시피 하여 비트 연산에 대해 따로 찾아봤습니다. </li>
</ul>
<blockquote>
<p>OR 연산은 두 값이 공통되지 않아도 값이 있다면(1), 그 값을 가져옵니다.
AND 연산은 두 값 중 공통된 값만을 가져옵니다.
NOT 연산은 그 값의 반대 값을 가져옵니다.
XOR 연산은 공통된 값을 (0) 또는 거짓으로, 공통되지 않은 값을 (1) 또는 참으로 가져옵니다.
Shift 연산은 그 값의 자리수를 꺽새 방향으로 숫자만큼 밀어냅니다.</p>
</blockquote>
<h2 id="마무리">마무리</h2>
<p>슬슬 컴퓨터 지식이나 수학적 지식이 요구되는 단계가 온 것 같습니다. 문법 책으로 공부하고 있기 때문에 컴퓨터 지식에 대해서 제대로 나와있진 않더라구요. <br>
예를 들면, 논리 연산이나 XOR 연산에 대한 어떤 설명도 나와있지 않고 그냥 표시하는 방법만 알려주기 때문에 어떤 뜻인지 이해하기가 어려워 따로 찾아봐야 했습니다.</p>
<p>컴퓨터 과학에 대한 지식과 자료구조, 알고리즘에 대한 공부도 병행해야 할 것 같습니다.</p>
<p>감사합니다 : )</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+3 [Swift_심화 데이터 타입]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D3-Swift%EC%8B%AC%ED%99%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D3-Swift%EC%8B%AC%ED%99%94-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85</guid>
            <pubDate>Wed, 06 Jan 2021 10:28:43 GMT</pubDate>
            <description><![CDATA[<h1 id="심화-데이터-타입">심화 데이터 타입</h1>
<h2 id="1-타입-별칭-typealias">1. 타입 별칭 (typealias)</h2>
<blockquote>
<ul>
<li>스위프트의 데이터 타입이든, 임의로 만든 데이터 타입이든 이미 존재하는 데이터 타입에 임의로 별칭을 부여. 기존에 사용하던 데이터 타입의 이름과 프로그래머가 만든 별칭 모두 사용 가능</li>
</ul>
</blockquote>
<pre><code>typealias myInt = Int
var age : myInt = 99

typealias myDouble = Double
var height : myDouble = 187.9</code></pre><h2 id="2-튜플형-tuple">2. 튜플형 (Tuple)</h2>
<blockquote>
<ul>
<li>튜플은 타입의 이름이 따로 지정되어 있지 않은, 프로그래머 마음대로 만드는 타입이다.<br>
  <span style="color:red">&#39;지정된 데이터의 묶음&#39;</span> 이라고 표현 할 수 있다.<br>
  튜플은 타입 이름이 따로 없으므로 일정 타입의 나열만으로 튜플 타입을 생성할 수 있다</li>
</ul>
</blockquote>
<pre><code>var person: (String, Int, Double) = (&quot;dinx&quot;, 75, 187.9)
    print(&quot;이름 = \(person.0), 몸무게 = \(person.1), 신장 = \(person.2)&quot;)
        ==&gt; &quot;이름 = dinx, 몸무게 = 75, 신장 = 187.9&quot;

person.0 = &quot;철수&quot;
person.1 = 71
person.2 = 175.2
    print(&quot;이름은 \(person.0), 몸무게는 \(person.1)kg, 신장은 \(person.2)cm 입니다&quot;)
        ==&gt; &quot;이름은 철수, 몸무게는 71kg, 신장은 175.2cm 입니다&quot;
            //person을 변수로 선언했으므로 변경 가능</code></pre><blockquote>
<ul>
<li>튜플의 요소마다 이름을 붙힐 수도 있다.</li>
</ul>
</blockquote>
<pre><code>var person2: (name:String, weight:Int, height:Double) = (&quot;영민&quot;,65,165.2)
    print(&quot;이름:\(person2.name), 몸무게:\(person2.weight), 신장:\(person2.height)&quot;)
    ==&gt; &quot;이름:영민, 몸무게:65, 신장:165.2&quot;</code></pre><blockquote>
<ul>
<li>튜플에 별칭을 지정할 수도 있다.</li>
</ul>
</blockquote>
<pre><code>typealias personTuple = (name: String, weight:Int, height:Double)

let chulsu : personTuple = (&quot;철수&quot; , 75 , 170.2)
let mangu : personTuple = (&quot;맹구&quot; , 80 , 190.4)
    print(&quot;이름:\(chulsu.name), 몸무게:\(chulsu.weight), 신장:\(chuls.height)&quot;)
        ==&gt; &quot;이름:철수, 몸무게:75, 신장:170.2&quot;
            //personTuple 이라는 튜플을 하나의 별칭 타입으로 지정하여 사용한 것. </code></pre><h2 id="3-컬렉션형">3. 컬렉션형</h2>
<blockquote>
<ul>
<li>튜플 외에도 많은 수의 데이터를 묶어서 저장하고 관리할 수 있는 컬렉션 타입이 있다.<br>
배열(Array), 딕셔너리(Dictionary), 세트(Set) 등이 있다.</li>
</ul>
</blockquote>
<h3 id="31-배열array">3.1 배열(Array)</h3>
<blockquote>
<ul>
<li>배열은 같은 타입의 데이터를 <span style="color:red">&#39;일렬로 나열&#39;</span> 한 후 순서대로 저장하는 형태의 컬렉션 타입이다.</li>
</ul>
</blockquote>
<pre><code>// 배열 선언하기

var name:[String] = [&quot;철수&quot;,&quot;맹구&quot;,&quot;훈
이&quot;,&quot;짱구&quot;]

var name:Array&lt;String&gt; = [&quot;철수&quot;, &quot;맹구&quot;, &quot;훈이&quot;,&quot;짱구&quot;]
    print(name[2])
           ==&gt; 맹구
            // 배열에서 2번째 순서의 값을 출력함

name.append(&quot;유리&quot;) // 배열에 마지막 순서에 값을 추가.append 메서드
name.append(contenOf: [&quot;나미리&quot;,&quot;채송화&quot;] // 배열에 값 추가.append(contentOf:)
name.insert(&quot;수지&quot;, at: 2) // 2번째 순서에 값(수지)를 추가.insert(값,at:순서) </code></pre><h3 id="32-딕셔너리dictionary">3.2 딕셔너리(Dictionary)</h3>
<blockquote>
<ul>
<li>딕셔너리는 요소들이 순서 없이 키와 값의 쌍으로 구성되는 컬렉션 타입이다.
  딕셔너리에 저장되는 값은 항상 키와 쌍을 이루게 되는데, 딕셔너리 안에는 키가 하나이거나 여러개 일 수 있다. 단, 하나의 딕셔너리 안의 키는 같은 이름을 중복해서 사용할 수 없다.</li>
</ul>
</blockquote>
<pre><code>typealias StringIntDictionary = [String:Int] // typealias 를 이용하여 단순하게 표현

var numberForName: Dictionary&lt;String, Int&gt; = Dictionary&lt;String,Int&gt;() // 키는 String, 값은 Int 인 Dictionary를 생성합니다.

var numberForName0: [String:Int] = [String:Int]() // 위와 같은 표현임

var numberForName1: StringIntDictionary = StringIntDictionary() // 위와 같은 표현임

var numberForName2: [String:Int] = [&quot;민수&quot;:100, &quot;영희&quot;:200, &quot;철수&quot;:300, &quot;짱구&quot;:250]
    print(numberForName2[&quot;민수&quot;] as Any)</code></pre><h3 id="33-세트set">3.3 세트(Set)</h3>
<blockquote>
<ul>
<li>세트는 같은타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입이다. 세트 내의 값은 모두 유일한 값이며, 즉 중복된 값이 존재하지 않는다. 다음의 경우 세트를 이용한다.</li>
</ul>
</blockquote>
<ol>
<li>순서가 중요하지 않을 때</li>
<li>각 요소가 유일한 값이어야 하는 경우</li>
</ol>
<pre><code>let jungleChampion : Set&lt;String&gt; = [&quot;Xinchao&quot;,&quot;Werick&quot;,&quot;Olaf&quot;,&quot;Garen&quot;]
let topChampion : Set&lt;String&gt; = [&quot;Singed&quot;,&quot;Olaf&quot;,&quot;Garen&quot;,&quot;Camile&quot;]

let interSection : Set&lt;String&gt; = jungleChampion.intersection(topChampion)
    print(interSection)
    ==&gt; [&quot;Olaf&quot;, &quot;Garen&quot;]
// 교집합

let symmetricDiffSet: Set&lt;String&gt; = jungleChampion.symmetricDifference(topChampion)
    print(symmetricDiffSet)
    ==&gt; [&quot;Werick&quot;, &quot;Xinchao&quot;, &quot;Singed&quot;, &quot;Camile&quot;]
// 여집합의 합

let unionSet: Set&lt;String&gt; = jungleChampion.union(topChampion)
    print(unionSet)
    ==&gt; [&quot;Werick&quot;, &quot;Xinchao&quot;, &quot;Singed&quot;, &quot;Camile&quot;, &quot;Olaf&quot;, &quot;Garen&quot;]
// 합집합

let subtractSet: Set&lt;String&gt; = jungleChampion.subtracting(topChampion)
    print(subtractSet)
    ==&gt; [&quot;Werick&quot;, &quot;Xinchao&quot;]
// 차집합


// 포함관계 연산 

var 미드챔피언 : Set&lt;String&gt; = [&quot;아지르&quot;,&quot;판테온&quot;,&quot;피즈&quot;,&quot;브랜드&quot;,&quot;제라스&quot;]
var 서폿챔피언 : Set&lt;String&gt; = [&quot;바드&quot;,&quot;알리스타&quot;,&quot;브랜드&quot;,&quot;제라스&quot;,&quot;판테온&quot;]

var 챔피언 : Set&lt;String&gt; = 미드챔피언.union(서폿챔피언) // 미드챔피언과 서폿챔피언을 챔피언에 포함시킨다.

print(챔피언)
    ==&gt; [&quot;알리스타&quot;, &quot;피즈&quot;, &quot;브랜드&quot;, &quot;제라스&quot;, &quot;판테온&quot;, &quot;바드&quot;, &quot;아지르&quot;]</code></pre><h2 id="4-열거형enum">4. 열거형(enum)</h2>
<blockquote>
<ul>
<li>열거형은 연관된 항목들을 묶어서 표현할 수 있는 타입이다. 
  Swift에서의 열거형은 강력한 기능을 가지고 있기 때문에 잘 알아야 한다. 
  열거형은 배열이나 딕셔너리 같은 타입과 다르게 사용자가 정의한 항목 값 외에는 추가/수정이 불가능하다. 그렇기 때문에 딱 정해진 값만 열거형 값에 속할 수 있다.<br>
  다음과 같은 경우 열거형을 사용한다.<ol>
<li>제한된 선택지를 주고 싶을 때</li>
<li>정해진 값 외에는 입력받고 싶지 않을 때</li>
<li>예상된 입력 값이 한정되어 있을 때</li>
</ol>
</li>
</ul>
</blockquote>
<pre><code>enum 원딜 {
    case 케이틀린
    case 바루스
    case 트리스타나
    case 베인
    case 진
}

enum 원딜2 {
    case 트위치 , 코그모 , 자야 , 카이사
}

var 일티어원딜: 원딜 = 원딜.진
var 이티어원딜: 원딜2 = .자야

// 열거형의 원시 값 지정과 사용 (.rawValue)

enum 정글러 : String {
    case 초식정글 = &quot;아무무&quot;
    case 육식정글 = &quot;우디르&quot;
    case 성장형정글 = &quot;쉬바나&quot;
    case 갱킹형정글 = &quot;리신&quot;
    case 예능정글 = &quot;티모&quot;
}

let 정글러종류: 정글러 = 정글러.육식정글

    print(&quot;제가 잘하는 정글은 \(정글러종류) 입니다.&quot;) // rawValue인 &quot;우디르&quot;가 아니라 육식정글로 출력
    print(&quot;저의 모스트 정글챔피언은 \(정글러종류.rawValue) 입니다.&quot;) // 지정해준 rawValue인 &quot;우디르&quot;로 출력</code></pre><h2 id="마무리">마무리</h2>
<p>오늘은 어제 기본 데이터 타입보다 살짝 어려운 심화 데이터 타입을 배웠습니다. 확실히 어제보다 살짝 난이도가 있는 것 같은 느낌이 들었습니다. 최대한 이해하기 쉽게 예제에 나와있는 변수나 값들을 제가 좋아하는 게임인 리그오브레전드를 대입하여 바꾸어 보았습니다.
<img src="https://images.velog.io/images/dev-dinx/post/b8580851-b610-42da-b83e-68b63be76977/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-01-06%20%EC%98%A4%ED%9B%84%206.27.31.png" alt="">
공부는 현재 야곰님의 Swift프로그래밍3판을 통해 진행중입니다. :)
iOS 앱 개발자가 되는 그 날까지 화이팅!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+2 [Swift_기본 데이터 타입]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-Swift-D2-%EA%B8%B0%EB%B3%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-Swift-D2-%EA%B8%B0%EB%B3%B8-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85</guid>
            <pubDate>Tue, 05 Jan 2021 05:46:59 GMT</pubDate>
            <description><![CDATA[<h1 id="기본-데이터-타입">기본 데이터 타입</h1>
<h2 id="1-bool-타입">1. Bool 타입</h2>
<blockquote>
<ul>
<li><code>Bool</code> 타입은 불리언 타입으로 참(<code>True</code>) 또는 거짓(<code>False</code>) 만을 값으로 가진다. </li>
</ul>
</blockquote>
<pre><code>var someBool: Bool = true
someBool = false
var anotherBool:Bool = false
let iLoveYou : Bool = true
let isTimeUnlimited:Bool = false

print(&quot;시간은 무한합니까?: \(isTimeUnlimited)&quot;)
print(&quot;나는 당신을 사랑하나요?: \(iLoveYou)&quot;)
print(&quot;이것은 진실입니까? : \(someBool)&quot;)</code></pre><h2 id="2-int와-uint">2. Int와 UInt</h2>
<blockquote>
<ul>
<li><code>Int</code>는 +,- 를 포함한 정수를, <code>UInt</code>는 -를 포함하지 않는 양의 정수를 표현한다.</li>
</ul>
</blockquote>
<pre><code>var someInt: Int = -10
someInt = 100

var someUInt:UInt = 10
someUInt = 1

Int.random(in: -100...100) // 범위 내의 임의의 숫자 만들기</code></pre><h2 id="3-float-타입과-double-타입">3. Float 타입과 Double 타입</h2>
<blockquote>
<ul>
<li><code>Float</code> 타입은 64비트 환경에서 6자리의 숫자까지만 표현 가능</li>
</ul>
</blockquote>
<ul>
<li><code>Double</code> 타입은 64비트 환경에서 최소 15자리의 십진수를 표현 가능</li>
</ul>
<pre><code>var someFloat:Float = 10.12345
var someDouble:Double = 10.213124124
어떤 타입을 사용해야 할 지 모를 때는 Double을 사용할 것</code></pre><h2 id="character-타입">Character 타입</h2>
<blockquote>
<ul>
<li><code>Character</code> 타입은 말 그대로 <code>문자</code>를 의미한다. </li>
</ul>
</blockquote>
<pre><code>var someCharacter:Character = &quot;A&quot;
var otherCharacter:Character = &quot;가&quot;</code></pre><h2 id="4-string-타입">4. String 타입</h2>
<ul>
<li><code>String</code> 타입은 문자의 나열, 즉 문자열을 의미한다.<pre><code>let someName:String = &quot;SDH&quot; // 상수로 선언된 문자열은 변경이 불가능하다.
var introduce:String = String() // 이니셜라이저를 사용하여 빈 문자열을 생성
introduce.append(&quot;저는&quot;) // append 메서드를 통해 문자열을 이어붙힐 수 있다.
introduce = introduce+&quot; &quot; + someName + &quot;입니다&quot; // + 연산자를 통해서도 문자열을 이어붙일 수 있다.
print(introduce)
</code></pre></li>
</ul>
<p>print(&quot;name의 글자 수 = (someName.count)&quot;) // 변수명.count = 변수의 글자 수 파악
print(&quot;introduce가 비어있습니까? : (introduce.isEmpty)&quot;) // 변수명.isEmpty = 해당 변수에 값이 있는지 없는지 파악</p>
<pre><code>### 4.1 String 타입의 다양한 기능</code></pre><p>let hello:String=&quot;Hello&quot;
let xind:String=&quot;Xind&quot;
var greeting:String = hello + &quot; &quot; + xind + &quot;!&quot;</p>
<p>print(greeting)</p>
<p>greeting = hello
greeting += &quot; &quot;
greeting += xind
greeting += &quot;!&quot;</p>
<p>print(greeting)</p>
<p>특수문자
    스위프트에는 문자열 내에서 일정 기능을 하는 특수문자(또는 제어문자)가 있다.
        \n = 줄바꿈 문자
        \ 문자열 내에서 백슬래쉬를 표현할 때 사용
        &quot; 문자열 내에서 큰 따옴표를 표현할 때 사용
        \t 탭 문자, 키보드의 탭키를 눌렀을 때와 같은 효과
        \O 문자열이 끝났음을 알리는 null 문자 */</p>
<p>print(&quot;스위프트의 특수문자는 \n줄바꿈과 \백슬래쉬를 표현하고 &quot;큰따옴표&quot;를 이렇게 표현하고 띄워쓸 땐 \t이렇게 \t를 이용&quot;)</p>
<pre><code>
## 5. Any,AnyObject와 nil

- `Any` 는 스위프트의 모든 데이터 타입에 사용할 수 있다.
- `AnyObject`은 클래스의 인스턴스에 할당 * (추후 공부)
- `nil` 은 특정 타입이 아닌 &#39;없음&#39; 혹은 &#39;비어있음&#39;을 뜻하는 키워드* (추후 공부)
</code></pre><p>var someAny: Any = &quot;dinx&quot;
someAny = 26
someAny = 175.1</p>
<p>print(someAny)</p>
<p>```</p>
<blockquote>
<p><code>Any</code> 타입이 사용하기 편하긴 하지만 스위프트에서는 데이터 타입을 정확히 명시하는 것이 오류의 위험을 최소화하는 방법 중 하나이기 때문에 가급적 사용을 지양할 것.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 개발자 독학 D+1 [Swift_변수와 상수]]]></title>
            <link>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D1-Swift%EB%B3%80%EC%88%98%EC%99%80-%EC%83%81%EC%88%98</link>
            <guid>https://velog.io/@dev-dinx/iOS-%EC%95%B1-%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%8F%85%ED%95%99-D1-Swift%EB%B3%80%EC%88%98%EC%99%80-%EC%83%81%EC%88%98</guid>
            <pubDate>Mon, 04 Jan 2021 04:13:55 GMT</pubDate>
            <description><![CDATA[<h1 id="변수와-상수">변수와 상수</h1>
<h2 id="변수">변수</h2>
<ul>
<li>기본적으로 변수란 변할 수 있는 값을 의미한다. </li>
</ul>
<p>스위프트에서 변수를 생성하려면 <code>var</code> 키워드를 사용한다.
<code>var [변수의 이름] : [데이터 타입] = [값]</code>의 형태로 선언한다.
변수를 생성할 때 데이터 타입은 생략할 수 있다. </p>
<blockquote>
<p>이를 <span style="color:red"><strong><em>타입 추론</em></strong></span> 이라고 하는데, 변수를 생성할 때 데이터 타입을 생략하면 컴파일러가 변숫값의 타입을 추론하여 타입을 지정한다.
<br>이는 스위프트의 강력하고도 편한 기능이지만, 자칫 잘못된 타입 추론으로 인해 오류가 생기면 이 오류를 찾는데에 시간이 걸릴 수도 있기 때문에 처음부터 타입을 명시하는 편이 좋다.</p>
</blockquote>
<h2 id="상수">상수</h2>
<ul>
<li>상수란 변하지 않는 값을 의미한다.</li>
</ul>
<p>스위프트에서 상수를 생성하려면 <code>let</code> 키워드를 사용한다. 
<code>let [상수의 이름] : [데이터 타입] = 값</code> 의 형태로 선언한다.
변수와 마찬가지로 상수를 생성할 때의 데이터 타입도 생략이 가능하다.</p>
<blockquote>
<ul>
<li>상수를 사용하는 이유
상수를 사용하는 다양한 이유 중에서 가장 중요한 이유는 가독성이다.
<br>상수는 변하지 않는 값이므로 상수로 값을 선언하면, 이후 코드에서 값의 변화가 없다는 사실을 주석이나 API 문서 등을 살펴보지 않아도 직관적으로 알 수 있다. 
<br>즉, 차후 값의 변경을 신경 쓰지 않아도 된다는 것이다. <blockquote>
<ul>
<li>대표적으로 변하지 않는 원주율이나 최대값 등을 상수로 선언</li>
</ul>
</blockquote>
</li>
</ul>
</blockquote>
<h2 id="연습">연습</h2>
<blockquote>
<ol>
<li>변수 선언하기</li>
</ol>
</blockquote>
<pre><code>var age : Int = 25
var job = &quot;iOS Dev&quot;
var weather = &quot;rainny&quot;
weather = &quot;sunny&quot;
job = &quot;student&quot;
age = 26 </code></pre><blockquote>
<blockquote>
<p><code>print(&quot;내 나이는\(age)살 이고 오늘의 날씨는 \(weather)입니다.&quot;)</code></p>
</blockquote>
</blockquote>
<ul>
<li>age와 weather을 변수로 설정해놨으므로 age에는 26이, weather에는 sunny가 출력된다.</li>
</ul>
<blockquote>
<ol start="2">
<li>상수 선언하기</li>
</ol>
</blockquote>
<pre><code>let name : String = &quot;dinx&quot;
let planet = &quot;Earth&quot;
planet = &quot;Mars&quot;</code></pre><blockquote>
<blockquote>
<p><code>print(&quot;내가 사는 행성은 \(planet)입니다.&quot;)</code></p>
</blockquote>
</blockquote>
<ul>
<li>planet을 상수로 선언했으므로 &quot;Mars&quot;가 아닌 &quot;Earth&quot;가 출력된다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>