<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Yeon.log</title>
        <link>https://velog.io/</link>
        <description>괴발개발 공부인생</description>
        <lastBuildDate>Fri, 31 Dec 2021 15:59:40 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Yeon.log</title>
            <url>https://images.velog.io/images/unexpected-dev/profile/219a2c3d-b1e8-41c8-9d8a-13878971643b/KakaoTalk_20210227_190351197.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Yeon.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/unexpected-dev" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2021년 마무리하는 삽질일기]]></title>
            <link>https://velog.io/@unexpected-dev/2021%EB%85%84%EC%9D%84-%EB%A7%88%EC%B9%98%EB%A9%B0</link>
            <guid>https://velog.io/@unexpected-dev/2021%EB%85%84%EC%9D%84-%EB%A7%88%EC%B9%98%EB%A9%B0</guid>
            <pubDate>Fri, 31 Dec 2021 15:59:40 GMT</pubDate>
            <description><![CDATA[<h2 id="각종-도전의-시작">각종 도전의 시작</h2>
<p>퇴사와 함께 패기롭게 시작한 2021의 시작!
2021의 목표 중 하나는 내가 안 해본 모든 것을 해보는 <strong>도전</strong>에 목표를 두었다.</p>
<p>그래서 내가 안 해본 웹과 앱 그리고 다른 분야까지 다양한 분야에 공부와 도전을 하였다.</p>
<p>덕분에 사람들 앞에서 공연도 하는 기회도 있었고 해본 적도 없던 외주도 하고 프로필 찍어보겠다고 단수까지 별별 사건·사고가 있었다.😂</p>
<hr/>

<h2 id="스터디-결성-그리고-결과">스터디 결성 그리고 결과</h2>
<p><a href="https://velog.io/@unexpected-dev/%ED%86%A0%EC%9D%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%82%BD%EC%A7%88%EC%9D%BC%EA%B8%B0">이전 삽질일기</a>
이전 글을 보면 알겠지만 1차로 진행했던 토이 프로젝트는 망했다!</p>
<p>그 이후로 이제 아이디어만 정리하며 다듬고 각자의 공부 스터디로 전환을 하였다 :)</p>
<p>이후 웹에서 플러터로 전환을 하였고 1차 토이 프로젝트보다 기획 등이 다듬어진 2차 토이는 다시 진행하는 중이지만 팀원들의 현생과 번아웃으로 출시는 아직까지 갈 길이 남아있다!</p>
<hr/>

<h2 id="불안정안-생활과-번아웃">불안정안 생활과 번아웃</h2>
<p><img src="https://images.velog.io/images/unexpected-dev/post/7524680e-db5c-4c8c-b170-a1d840e2581b/image.png" alt="">
퇴사 이후 가장 좋은 점이라면 당연히 첫 번째로 시간 관리가 자유롭다를 뽑겠다!
하지만 이것은 엄청난 단점으로 작용할 때가 종종 있다.</p>
<p>회사 생활을 하면 강제로라도 사람을 만나고 집중을 할 이유가 무조건 생긴다. 하지만 무직 생활에서는 사람을 보기 싫거나 하기 싫을 때는 아무도 터치를 하지 않는 문제가 있다.</p>
<p>그 과정에서 생활패턴이 꼬이고 번아웃이 온다면 최악의 상태로 돌입한다!</p>
<p>누군가가 나를 빠져나갈 수 없는 미궁에 가둬 버린 뒤 지옥의 수문장이 문 앞을 지키고 있는 느낌이었다....</p>
<hr/>

<h2 id="단순한-해결">단순한 해결</h2>
<p><img src="https://images.velog.io/images/unexpected-dev/post/52718c1d-1166-4db5-9a5d-cad30e925534/spongebob-rainbow.gif" alt="">
언제나 해결은 간단했다! 하면 된다!
대부분의 개인적인 일은 시도하면 해결되는 경우가 너무 많다.</p>
<p>공부가 싫고 사람이 만나기가 싫고 할 때는 그냥 만나보고 해당 공부가 질리면 다른걸 해보면 된다!</p>
<p>새로운 사람/공부/운동 뭐든지 시도해보면 다시 새롭고 새로운걸 보다 보면 기존의 것도 새로운 관점으로 볼 수 있는 능력도 생긴다!</p>
<p>의외로 다른 곳에서 비슷한 점도 찾을 때도 있고 즐거운 일도 생긴다🤣</p>
<hr/>

<h2 id="새로운-프로젝트-시작">새로운 프로젝트 시작</h2>
<p>오래전부터 알던개발자분들과 분담하여 개발을시작하게 됐다.</p>
<p>차근차근진행 중이고 지라를 통해 일정 관리하자는 분의 의견을 받아서 지라로 프로젝트 이슈 관리를 하며진행하고 생각보다 결과가 차근차근 빨리 나와서 내년 초에는 유의미한 결과를 기대하는 중이다!</p>
<hr/>

<h2 id="올해-나를-요약한다면">올해 나를 요약한다면?</h2>
<h3 id="아쉬운-부분">아쉬운 부분</h3>
<ol>
<li>번아웃으로 공부 중단한 기간</li>
<li>건강관리 무리하게 동시에 진행하다 보니 퇴사 사유 중 하나였던 건강을 생각 보다 챙기지 못했다.</li>
<li>끝내지 못한 토이 프로젝트</li>
</ol>
<h3 id="좋았던-부분">좋았던 부분</h3>
<ol>
<li>소소한 외주지만 혼자 일할 때 발생하는 클라이언트와의 마찰 등 나름 재미있는 경험이었다고 생각</li>
<li>그래도 운동은 했다!!! 프로필도 남겼고 목표치는 많이 도달은 못 했지만 부족하면 채워 넣으면 된다!</li>
<li>아직은 부족하지만 웹/앱 공부!<hr/>

</li>
</ol>
<h2 id="2022년-목표는">2022년 목표는??</h2>
<p><img src="https://images.velog.io/images/unexpected-dev/post/a7eb731d-1fb6-489b-a8a5-2bd93baa7246/image.png" alt="">
<strong>현재 계획 중인건 크게 3가지다</strong></p>
<ol>
<li>ML 공부를 해서 현재 일하는 업종에 접목해보는 것</li>
<li>현재 구현중인 제품을 출시!</li>
<li>취미로 설계중인 3D프린터 제작</li>
</ol>
<p>이외 소소한 여러가지가 있고 문제도 많겠지만 내가 좋아하는 말인 <strong>답은 어딘가에있고 아직 못 찾은거다</strong> 분명 나는 새로운 많은 문제에 직면 하겠지만 다시 답을 찾아나가리라 믿는다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[토이 프로젝트 삽질일기]]></title>
            <link>https://velog.io/@unexpected-dev/%ED%86%A0%EC%9D%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%82%BD%EC%A7%88%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@unexpected-dev/%ED%86%A0%EC%9D%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%82%BD%EC%A7%88%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Sun, 16 May 2021 06:15:57 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/unexpected-dev/post/7ae6485a-6a44-436b-85e1-14cfb1117aa8/fine.png" alt="">
안녕하세요. 작년에 진행한 토이 프로젝트에 대한 기록을 정리 해볼려고 합니다.</p>
<h1 id="폭발한-프로젝트">폭발한 프로젝트</h1>
<h2 id="🤔브레인-스토밍으로-아이디어-내기">🤔브레인 스토밍으로 아이디어 내기</h2>
<p>먼저 아이디어를 팀원과 함께 마음껏 발산하는 과정을 진행합니다.</p>
<p>각자의 생각 살다 보니 불편한 점 등 각종 아이디어를 노션을 통해 아이디어 리스트 업했습니다.</p>
<p>선정기준은 아래와 같습니다.</p>
<ul>
<li>대중적이며 누구나 매일 필요한 서비스</li>
<li>개발할려는 서비스의 이해도</li>
<li>빠르게 개발 가능 여부</li>
</ul>
<h2 id="📜선정된-아이디어의-디벨롭과-목표하기">📜선정된 아이디어의 디벨롭과 목표하기</h2>
<p>해당 아이디어의 우려되는 점과 해결방식 필요한 공부 등 자료조사와 목표점을 정합니다.</p>
<p>이때 우리는 생각을 고민을 조사를 잘했어야 합니다. 이 구간을 부실하게 진행한 결과 MVP 필수 기능 정의 과정에서 이후 개발까지 연결된 스노우 볼 됩니다.</p>
<h2 id="💻필수-기능-정의-중-개발의-시작">💻필수 기능 정의 중 개발의 시작</h2>
<p><strong>MVP(Minimum Viable Product)</strong> 를 통해 최소한 개발을 통해 주변인들한테 테스트를 계획하다.</p>
<p>하지만 의욕만 넘치던 우리는 개발과 동시에 진행했고 가장 중요한 기능들이나 개념들을 정의와 해당 서비스와 비슷한 서비스가 제대로 없는지 어떤 문제점인지 파악을 해야 했지만 개발을 먼저 시작했기에 진행과 필수기능 정의를 하면서 즉흥적으로 진행했습니다. 그 결과...</p>
<h2 id="😔개발-중단-그리고-초심으로">😔개발 중단 그리고 초심으로..</h2>
<p><img src="https://images.velog.io/images/unexpected-dev/post/c348ecb1-e5d0-4f8f-bcbd-5b606a0ffaf1/dev.jpeg" alt="">
맨 처음 팀원들과 노션에 해당 사진 올리고 저 짤처럼 진행되지 말자는 다짐을 했었습니다만 하지만 현실은 짤과 동일하게 진행되었죠.</p>
<p>불명확한 목표와 필수기능 즉 <strong>부실한 기획</strong>은 가장 빠르게 프로젝트를 접는 원인으로 작용했습니다.
덕분에 우리는 현재 문제점을 명확하게 파악하고 문제점에 대한 근본적인 공부 스터디로 전환 점으로 삼게 됩니다.</p>
<p>토이 프로젝트는 공부 스터디를 진행하면서 아이디어를 디벨롭 하는 과정으로 병행하고 근본적인 문제점에 대한 공부가 1차적으로 끝난 시점에서 다시 토이프로젝트를 시작하기로 정한 거죠.</p>
<p>혹시 프로젝트를 시작하신다면 디벨롭과 명확한 필수기능 정의 UX 고려사항 등 정돈된 기획을 하시길 바랍니다.</p>
<h2 id="후기">후기</h2>
<p>다른 사람과 개발은 배려와 상대방에 대한 협업과정과 개발에대한 설명하는 과정 등 배울 점이 참 많습니다.
만약 혼자서 공부를 계속하고 있으시다면 꼭 다른 타인과 개발하는 경험을 쌓기 바랍니다.
혼자 개발하는 것과 다른 재미가 있습니다!😊</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Dart] 흐름제어]]></title>
            <link>https://velog.io/@unexpected-dev/%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4</link>
            <guid>https://velog.io/@unexpected-dev/%ED%9D%90%EB%A6%84%EC%A0%9C%EC%96%B4</guid>
            <pubDate>Wed, 07 Apr 2021 04:27:41 GMT</pubDate>
            <description><![CDATA[<h2 id="assert">assert</h2>
<p><code>assert</code>는 개발 모드의 debug중일 때 작동합니다.
배포(production) 코드에서는 프로그램에 영향을 주지 않습니다.
조건이 거짓인 경우 에러를 발생하며 실행이 중단된다.</p>
<pre><code class="language-dart">assert(condition, optionalMessage);
assert(urlString.startsWith(&#39;https&#39;),
    &#39;URL ($urlString) should start with &quot;https&quot;.&#39;);</code></pre>
<p>condition :<code>boolean</code>이 나올 수 있는 조건을 넣는다.
optionalMessage : <code>condition</code>이 <code>false</code> 발생 시 나올 메세지를 따로 설정할 수 있습니다.</p>
<h2 id="if">if</h2>
<p>가장 대표적인 흐름제어 문 입니다.
조건이 참일경우와 참이 아닌경우의 두가지 상황을 판단하여 실행하게 됩니다.</p>
<pre><code class="language-dart">int age = 15;

//단일 조건문
if(age &gt;= 19){
    print(&quot;성인입니다.&quot;);
}else{
    print(&quot;성인이 아닙니다.&quot;);
}

//다중 조건문
if(age &gt;= 19){
    print(&quot;성인입니다.&quot;);
}else if(age &lt; 14){
    print(&quot;촉법 소년입니다.&quot;);
}else{
    print(&quot;성인이 아닙니다.&quot;);
}</code></pre>
<h2 id="switchcase">switch/case</h2>
<p><code>if</code>문과 비슷하지만 입력변수가 <code>case</code>조건해당하면 <code>case</code>문을 실행합니다.
해당하지 않는 경우는 전부 <code>default</code>에서 처리됩니다.</p>
<pre><code class="language-dart">String name = &#39;kim&#39;;

switch(name) {
    case &#39;kim&#39;:
        print(&#39;kim입니다.&#39;);
        break;

    case &#39;i&#39;:
        print(&#39;i입니다.&#39;);
        break;

    default:
        print(&#39;해당하지 않습니다.&#39;);
        break;
}</code></pre>
<h2 id="while">while</h2>
<p>while문은 반복 동작이 필요할 때 사용합니다.
조건식이 <code>true</code>시 실행문을 반복 동작을합니다.
무조건 조건식을 끝낼 수 있는 동작을 실행문에 생략시 무한 루프가 생기므로 주의하셔야 합니다.</p>
<pre><code class="language-dart">int count = 0;

while(count &lt; 10) {
    print(count);
    count++;
}</code></pre>
<h2 id="for">for</h2>
<p>while문처럼 반복문에 해당합니다.</p>
<pre><code class="language-dart">for(초기화식; 조건식; 증감식) {
    실행문
}</code></pre>
<p>while과는 다르게 초기화 조건 증감식을 모두 포함하여 작성 합니다.</p>
<pre><code class="language-dart">List&lt;int&gt; list = [2, 1, 3, 5, 7];

for(int i=0; i&lt; list.length; i++) {
    print(list[i]);
}</code></pre>
<p>위의 출력의 경우 리스트에 있는 2 ~ 7까지를 출력합니다.
하지만 다른 방법으로도 for를 사용할 수 있습니다.</p>
<p>바로 foreach라는 사용 방법도 존재합니다.
배열을 처음부터 끝까지 반복하면서 내부 인자를 꺼내서 확인합니다.</p>
<pre><code class="language-dart">List&lt;int&gt; list = [2, 1, 3, 5, 7];

// 익명 함수
list.forEach((value){
  print(value);
});

// 람다식
list.forEach((value) =&gt; print(value));</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Dart] final과 const]]></title>
            <link>https://velog.io/@unexpected-dev/final%EA%B3%BC-const</link>
            <guid>https://velog.io/@unexpected-dev/final%EA%B3%BC-const</guid>
            <pubDate>Wed, 10 Mar 2021 16:59:04 GMT</pubDate>
            <description><![CDATA[<p>프로그램을 작성하다 보면 설정값을 변경하지 못하도록 상수록 설정하는 경우를 쉽게 볼 수 있습니다.</p>
<p>그렇다면 Dart에서 <code>final</code>과 <code>const</code> 어떻게 차이가 있을까요?</p>
<p><code>final</code>과 <code>const</code>차이는 언제 상수로 설정의 시점입니다.
<code>final</code>은 런타임 <code>const</code>는 컴파일 시점에 설정이 일어나게 됩니다.</p>
<h3 id="final과-const-선언">final과 const 선언</h3>
<p>변수 선언 동일합니다. 차이점은 맨 앞에 <code>final</code>과 <code>const</code> 추가해서 선언한다는 점입니다.</p>
<pre><code class="language-dart">final int numF = 5;
const int numC = 7;</code></pre>
<p>위에 선언된 <code>numF</code>와 <code>numC</code>는 다른 값을 변경이 불가능합니다.</p>
<p>그렇다면 실제로 동작에 차이를 볼 수 있는 코드를 작성해보겠습니다.</p>
<pre><code class="language-dart">final DateTime nowF = DateTime.now();
print(nowF);
.........
const DateTime nowC = DateTime.now();
print(nowC);</code></pre>
<p>위 코드를 실행하면 어떻게 동작할까요? <code>nowF</code>의 경우는 정상적으로 실행 시간이 표시되고 <code>nowC</code>의 경우에는 에러가 출력됩니다.</p>
<p>이런 차이가 나는 이유는 맨 처음 설명처럼 각 설정되는 시점이 다르기 때문입니다.</p>
<h3 id="설명">설명</h3>
<pre><code class="language-dart">const DateTime nowC = DateTime.now();
print(nowC);</code></pre>
<p>위 코드는 <code>const</code>는 컴파일 시에 설정이기 때문에 런타임에서 코드가 실행되어야 알 수 있는 <code>DateTime.now()</code>의 값을 알 수 없기 때문에 오류가 발생합니다.</p>
<pre><code class="language-dart">final DateTime nowF = DateTime.now();
print(nowF);</code></pre>
<p>반대로 <code>final</code>의 경우에는 런타임에서 설정이 진행됩니다.
런타임에서 설정이 발생하니 <code>DateTime.now()</code> 값을 가져올 수 있기 때문에 정상적으로 출력합니다.</p>
<p>해당 코드는 아래 DartPad를 통해 확인이 가능합니다.
<a href="https://dartpad.dev/ced5f6f1f687b88a2f0547cb76bf34b2?null_safety=true">https://dartpad.dev/ced5f6f1f687b88a2f0547cb76bf34b2?null_safety=true</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Dart] var와 dynamic]]></title>
            <link>https://velog.io/@unexpected-dev/var%EC%99%80-dynamic</link>
            <guid>https://velog.io/@unexpected-dev/var%EC%99%80-dynamic</guid>
            <pubDate>Sun, 28 Feb 2021 20:57:08 GMT</pubDate>
            <description><![CDATA[<h3 id="var와-dynamic">var와 dynamic</h3>
<p>Dart에는 변수 선언시 다양한 자료형을 지원합니다.
그 중에서 <code>var</code>와 <code>dynamic</code>라는 일반적인 자료형이 아니라 입력된 정보를 통해 타입을 추론해서 데이터 형식을 저장합니다.</p>
<h3 id="var와-dynamic의-차이점">var와 dynamic의 차이점</h3>
<p><code>var</code>의 경의 경우 추론된 타입이 한번 입력되고 나면 다른 타입을 저장할 수 없습니다.</p>
<pre><code class="language-dart">var name = &#39;var test&#39;;
print(name); // 출력 var test;

name = 123; // Error 발생</code></pre>
<p>위 코드 처럼 String이 입력된 var에 int의 값을 입력할려고 하면 에러가 발생합니다.</p>
<p><code>dynamic</code>의 경우 특수한 타입입니다. <code>var</code>와의 큰 차이점은 어떤 형식이라도 항상 입력이 가능한 점입니다.</p>
<pre><code class="language-dart">dynamic name = &#39;var test&#39;;
print(name); // 출력 var test;

name = 123; // name에 123 입력
print(name); // 123</code></pre>
<p>위 코드 처럼 dynamic의 경우 에러 발생이 하지 않습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Dart] 자료형과 선언 방법]]></title>
            <link>https://velog.io/@unexpected-dev/Dart%EC%9D%98-%EC%9E%90%EB%A3%8C%ED%98%95%EA%B3%BC-%EC%84%A0%EC%96%B8%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@unexpected-dev/Dart%EC%9D%98-%EC%9E%90%EB%A3%8C%ED%98%95%EA%B3%BC-%EC%84%A0%EC%96%B8%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Sat, 27 Feb 2021 12:33:18 GMT</pubDate>
            <description><![CDATA[<h3 id="변수-선언">변수 선언</h3>
<p>변수를 선언하기 위해서는 <code>자료형 변수명</code>의 구조를 맞춰야합니다.</p>
<pre><code class="language-dart">type name = value;</code></pre>
<p>자료형에는 여러가지 종류가 있습니다.</p>
<h3 id="자료형">자료형</h3>
<p><strong>숫자</strong>  </p>
<ul>
<li>int : 정수  </li>
<li>double : 부동 소수점 숫자</li>
</ul>
<pre><code class="language-dart">int intNumber = 1;
double floatNumber = 1.0;</code></pre>
<p><strong>문자열</strong>  </p>
<ul>
<li>String : 문자열</li>
</ul>
<pre><code class="language-dart">String stringText = &#39;Hello World&#39;;</code></pre>
<p><strong>불리언</strong>  </p>
<ul>
<li>bool : true/false ( 참 / 거짓)</li>
</ul>
<pre><code class="language-dart">bool isBool = true;</code></pre>
<p><strong>리스트</strong>  </p>
<ul>
<li>List : 중복을 허용하는 순서가 있는 컬렉션 구조</li>
</ul>
<pre><code class="language-dart">List&lt;int&gt; numberList = [0,1,2,3];</code></pre>
<p><strong>집합(셋)</strong>  </p>
<ul>
<li><p>Set : 중복을 허용하지 않는 순서가 없는 컬렉션 구조</p>
</li>
<li><p>아래 코드와 같이 작성한 경우 중복된 1은 삭제되고 0, 1, 2의 요소만 존재하게 됩니다.</p>
</li>
</ul>
<pre><code class="language-dart">Set&lt;int&gt; numberSet = [0,1,2,1];</code></pre>
<p><strong>맵</strong>  </p>
<ul>
<li>Map : 키-값으로 구성된 자료 구조</li>
</ul>
<pre><code class="language-dart">Map&lt;String, int&gt; keyValue ={
&#39;testA&#39;: 12,
&#39;testB&#39;: 11,
&#39;testC&#39;: 13,
}</code></pre>
]]></description>
        </item>
    </channel>
</rss>