<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ttakku.log</title>
        <link>https://velog.io/</link>
        <description>Backend developer</description>
        <lastBuildDate>Sun, 02 May 2021 21:16:12 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ttakku.log</title>
            <url>https://velog.velcdn.com/images/ttakku-park/profile/7acc3024-a123-4a40-8a34-e649b27d6e87/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ttakku.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ttakku-park" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[TIL | URI / URN / URL 에 대하여]]></title>
            <link>https://velog.io/@ttakku-park/TIL-URI-URN-URL-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC</link>
            <guid>https://velog.io/@ttakku-park/TIL-URI-URN-URL-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC</guid>
            <pubDate>Sun, 02 May 2021 21:16:12 GMT</pubDate>
            <description><![CDATA[<h2 id="uri-안의-url-과-urn">URI 안의 URL 과 URN</h2>
<p><img src="https://images.velog.io/images/ttakku-park/post/8d6e38bf-081c-4bca-b12f-53e8b3566725/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-05-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%205.26.06.png" alt=""></p>
<p>URI(통합 자원 식별자) 에는 URL(<del>Where개념</del>) 와 URN(<del>What개</del>념) 라는 하위 개념이 있고, 이 둘은 자원을 식별하는 목적은 같으나 자원을 식별하는 방식에 차이점을 두고 있다.
URI 는 무엇이며 URL 과 URN 은 어떤 방식으로 자원을 식별하는지 알아보자.</p>
<hr>
<h2 id="uri-uniform-resource-identifier">URI (Uniform Resource Identifier)</h2>
<p>통합 자원 식별자, 쉽게 풀어 적어보면
자원(그림,html 페이지 등 서버에 저장된것)을 나타내는 아이디값(= 주소값, 고유식별자) 이다.
서로 다른 자료가 똑같은 이름을 가지고 있으면 안되니 URI는 고유해야한다.</p>
<p>URI의 구조는 아래와 같다.
<img src="https://images.velog.io/images/ttakku-park/post/563c52a8-cc0e-4ee8-8c7b-dff60a458a94/image.png" alt=""></p>
<p><strong><code>scheme ://host[:port][/path][?query][#fragment]</code></strong></p>
<p>프로토콜이름://IP주소:포트/폴더이름/파일이름
<em>or</em>
<del>프로토콜이름://도메인주소(DNS개념이므로 우선 생략)</del></p>
<blockquote>
<p><strong>scheme 란?</strong>
자원에 접근할 방법을 정의해 둔 프로토콜 이름. telnet, ftp , http 와 mailto(ip정보가 필요없는 프로토콜) 등의 요청 형식</p>
</blockquote>
<blockquote>
<p><strong>http 와 https 의 포트</strong>
0번 부터 1023포트는 예약된 포트(<em>Well-known port</em>)이며 80번의 경우 http 로 시작하는 웹사이트는 http로 통신하겠다는 의미 임으로 80번 기본포트에 연결되고 https 의 경우 443번 기본포트에 연결된다!</p>
</blockquote>
<hr>
<h2 id="url-uniform-resource-locator-또는-web-address">URL (Uniform Resource Locator 또는 web address)</h2>
<p>파일식별자라고 얘기하며 웹 페이지를 찾기 위한 <strong>주소</strong>이며 파일의 위치를 나타내는 <strong><code>where</code></strong>의 개념이다.
내가 보고싶은 특정 파일(html, css, 그림 등)이 서버에 저장이 되어있는 경로를 나타내는 값이라고 생각하면 좋을듯 하다!</p>
<p>내 컴퓨터의 hello.txt를 보려면 내컴퓨터의 C드라이브에 document(폴더)에서hello.txt(파일) 을 보는것과 같이 파일을 보기위해 이동하는 경로, 위치로 예를 들 수 있다.</p>
<p>URL는 자원의 위치를 나타내기 때문에 만약 자원의 위치, URL이 변경된다면 변경 전의 URL로는 해당 자원에 접근할 수 없다.</p>
<p>(URI 와 URL 의 구조를 나타내는 이미지 참고)
<img src="https://images.velog.io/images/ttakku-park/post/02bc8661-b76c-4f16-a2fe-daf142529c5f/image.png" alt="https://juyeop.tistory.com/48"></p>
<hr>
<h2 id="uri-와-url의-관계">URI 와 URL의 관계</h2>
<blockquote>
<p><strong>URL 은 URI 이지만 URI는 URL이 아니다</strong>
URI 는 아래와 같이 자원을 찾을 수 있는 위치를 항상 표시하지는 않는다.
<img src="https://images.velog.io/images/ttakku-park/post/5bf947f4-171a-4bc4-a449-d3699a9e587f/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-05-03%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%205.20.21.png" alt="https://www.youtube.com/watch?v=NN_Zq9REW60">
<em>URI는 사람과 장소, 개념 또는 웹 페이지 및 책과 같은 정보 자원과 같은 실제 개체를 포함하여 모든 것을 식별하는 데 사용될 수 있습니다. 일부 URI는 네트워크 (인터넷 또는 컴퓨터 파일 시스템 또는 인트라넷과 같은 다른 개인 네트워크)에서 정보 리소스를 찾고 검색하는 수단을 제공합니다. 이들은 URL ( Uniform Resource Locator )입니다.</em> <a href="https://en.wikipedia.org/wiki/Uniform_Resource_Identifier">참조</a></p>
</blockquote>
<blockquote>
<p><code>https://blog.naver.com/jiupark0616/221998617000</code>
위는 블로그 글을 식별하는 URI 이지만 
네이버 블로그 위치를 나타내는 URL은 <code>https://blog.naver.com/jiupark0616/</code> 까지라고 볼 수 있다.</p>
</blockquote>
<hr>
<h2 id="urn-uniform-resource-name">URN (Uniform Resource Name)</h2>
<p>통합자원이름이라고도 하며 자원이 무엇(What)인지를 말하는 개념이다. 자원은 서로 중복되지 않는 유일한 값이여야 하며 특정 정보에 이름을 부여해서 찾기 때문에 도메인 과 파일 경로에 영향을 받지 않는다.</p>
<p>URN의 구조는 아래와 같다.</p>
<p><code>urn : isbn : 1234567891234 (국제표준도서번호)</code></p>
<p>URL 의 경우 정보의 위치가 바뀌면 이전의 위치에 접근 할 수 없지만 URN의 경우 정보의 위치가 바뀌더라도 동일하게 접근할 수 있다. </p>
<hr>
<h2 id="url-와-urn">URL 와 URN</h2>
<blockquote>
<p>URN은 사람의 이름과 비교할 수 있고 URL은 주소와 비교할 수 있습니다. 즉, URN은 항목을 식별하고 URL은 항목을 찾는 방법을 제공합니다.</p>
</blockquote>
<h2 id="마치며">마치며</h2>
<p>생활코딩으로 web1,2 강의를 들을 때는 쉽게 대략적으로 알 수 있었는데 자세히 알아보려고 하니 이렇게 어려울 수가 없다ㅠㅠ </p>
<p>그래도 웹에 관한 강의를 듣다보니 당장 학습하고 있는 언어가 전부로 볼 것이 아니라 더 큰 개념으로 개발을 바라보게 된 것 같다.</p>
<p>생활 코딩 강의에서 <strong><code>모르면 마법, 알면 기술</code></strong> 이라는 말이 계속 머릿속에 맴돌았는데 요 근래 파이썬을 공부하며 답답했던 차에 웹 강의를 듣고 공부하면서 그 말이 체감이 되어 무언가를 알고싶다는 욕구가 자극 된 것 같다.</p>
<p>위코드 개강까지 얼마 남지않았지만 끝까지 빠이팅합시다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL | 파이썬 copy 와 deepcopy]]></title>
            <link>https://velog.io/@ttakku-park/TIL-%ED%8C%8C%EC%9D%B4%EC%8D%AC-copy-%EC%99%80-deepcopy</link>
            <guid>https://velog.io/@ttakku-park/TIL-%ED%8C%8C%EC%9D%B4%EC%8D%AC-copy-%EC%99%80-deepcopy</guid>
            <pubDate>Wed, 28 Apr 2021 08:30:31 GMT</pubDate>
            <description><![CDATA[<p>2차원 리스트를 공부하다 나온 <code>deepcopy</code> 와 <code>copy</code> 의 차이를 알아보자!</p>
<h2 id="우선하여-알면-좋은-가변mutable객체">우선하여 알면 좋은 가변(mutable)객체</h2>
<p>아마 2차원 리스트 전까지 순차적으로 공부하신 분들은 
시퀀스 객체나 set, dict 등을 학습하며
<code>pop</code> 이나 <code>remove</code> , <code>del</code> , 요소추가 등의 메서드로 수정,삭제가 불가능한 객체들을 확인했을텐데</p>
<p>쉽게 생각하자면 여기서 수정,삭제가 가능한 객체들을 가변(mutable)객체라고 한다.</p>
<p><strong>가변(mutable)객체란?</strong></p>
<p>객체에 할당 된 값을 수정할 수 있는 특징을 가진 객체</p>
<p><strong>가변객체의 타입은?</strong></p>
<p><code>list</code> , <code>set</code> , <code>dict</code> 가 있다.</p>
<h2 id="불변immutable객체는">불변(immutable)객체는?</h2>
<p>가변객체와 반대되는 특성으로 수정, 삭제가 불가능한 객체를 불변 객체라고한다.</p>
<p><strong>불변(immutable)객체란?</strong></p>
<p>객체에 할당된 값을 수정 할 수 없는 특징을 가진 객체</p>
<p><strong>불변객체의 타입은?</strong></p>
<p><code>int</code>,<code>float</code>,<code>bool</code>,<code>str</code>,<code>tuple</code>,<code>frozenset</code> 등이 존재한다.</p>
<h2 id="copy">copy</h2>
<p>일반적으로 list 에 copy 메서드를 이용해 새로운 변수에 복사 하는 것과 다르게 </p>
<pre><code class="language-python">a = [[1,1],[2,2]] # 2차원리스트

b = [1,2,[3,4,5]] # 내부리스트</code></pre>
<p>가변객체 리스트의 2차원리스트와 내부리스트의 경우 리스트객체의 내부 리스트객체까지 복사가 되지 않는다.
<code>copy</code>의 경우 리스트만 복사가 되고 <strong>그안의 내용은 동일한 객체를 참조</strong>하기 때문이다.</p>
<h3 id="copy-메서드-사용에서-가변객체와-불변객체의-차이">copy 메서드 사용에서 가변객체와 불변객체의 차이</h3>
<p>불가변 객체의 경우 복사한 값으로 재할당을 할 경우 기존객체와 복사한 객체는 전혀다른 값이 된다.</p>
<p>가변객체는 내부리스트가 존재 할 때 내부리스트의 값은 복사가 아닌 참조가 일어나기 때문에 값을 할당 하게 되면 기존의 리스트에도 변경이 이루어진다.</p>
<h2 id="deepcopy">deepcopy</h2>
<p>mutable 한 내부객채들이 복사되지 않는 문제를 해결하기 위해서는 <code>deepcopy</code>를 해야한다.</p>
<p><code>deepcopy</code>의 경우 복합 객체를 새롭게 생성하고 그 안의 내용까지 새롭게 생성하게 된다.</p>
<pre><code class="language-python">import copy #copy 모듈을 가져옴

a=[1,2,[3,4,5]]
b=copy.deepcopy(a) # copy.deepcopy 함수를 사용하여 깊은 복사</code></pre>
<p>이렇게 깊게 복사 된 객체는 처음에 만들었던 객체와 복사된 객체가 완전히 달라지기 때문에
어느 한쪽을 수정한다고 해서 다른 한쪽이 영향받지 않는다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL | 파이썬 file]]></title>
            <link>https://velog.io/@ttakku-park/TIL-%ED%8C%8C%EC%9D%B4%EC%8D%AC-file</link>
            <guid>https://velog.io/@ttakku-park/TIL-%ED%8C%8C%EC%9D%B4%EC%8D%AC-file</guid>
            <pubDate>Mon, 19 Apr 2021 10:09:26 GMT</pubDate>
            <description><![CDATA[<p>파일객체를 사용할때는 
파일을 열고(open) -&gt; 쓰거나(write) 읽고(read) -&gt; 닫는다(close)</p>
<blockquote>
<p><code>file=open(&#39;hello.txt&#39;,&#39;w&#39;)</code> 파일객체 = open(파일이름, 파일모드)
-&gt; 파일을 사용하기위해 open 함수로 파일을 열어 줌
<code>file.write(&#39;hello,world!&#39;)</code> 파일객체.write(&#39;문자열&#39;)
 -&gt; 파일에 문자열을(파일에 들어갈 내용) 저장 
 <code>r = file.read()</code> 변수 = 파일객체.read()
 <code>print(r)</code>
 -&gt; 파일에서 문자열 읽기
<code>file.close()</code>
-&gt; 파일 객체를 닫아줌
프로젝트 폴더에 hello.txt 파일이 만들어지고 내용이 들어가있음</p>
</blockquote>
<hr>
<p>파일모드 : &#39;w&#39;(쓰기모드),&#39;r&#39;(읽기모드)</p>
<h2 id="자동으로-파일-객체-닫기">자동으로 파일 객체 닫기</h2>
<p>with open(파일이름,파일모드) as 파일객체:
    코드</p>
<blockquote>
<pre><code class="language-python">with open(&#39;hello.txt&#39;,&#39;r&#39;) as file:#파일에 대한 객체를 자동으로 닫아줌
    r = file.read()
    print(r)</code></pre>
</blockquote>
<pre><code>
## 문자열 여러 줄을 파일에 쓰기

반복문을 사용하여 파일 작성

개행문자(\n)를 지정해주어야 줄바꿈이 되니 주의
&gt;```python
with open(&#39;hello.txt&#39;,&#39;w&#39;) as file:
    for i in range(3):
        file.write(&#39;Hello,world! \n&#39;.format(i))</code></pre><h2 id="리스트의-문자열을-파일에-쓰기">리스트의 문자열을 파일에 쓰기</h2>
<p>파일객체.writelines(문자열리스트)</p>
<blockquote>
<pre><code class="language-python">lines = [&#39;안녕하세요.\n&#39;, &#39;파이썬\n&#39;, &#39;코딩 도장입니다.\n&#39;]
 with open(&#39;hello.txt&#39;, &#39;w&#39;) as file:    # hello.txt 파일을 쓰기 모드(w)로 열기
    file.writelines(lines)</code></pre>
</blockquote>
<pre><code>
 ## 파일내용을 리스트로 가져오기 (읽기)

 변수 = 파일객체.readlines()

 &gt;```python
 with open(&#39;hello.txt&#39;, &#39;r&#39;) as file:    # hello.txt 파일을 읽기 모드(r)로 열기
    lines = file.readlines()#파일의 내용을 한줄씩
    print(lines)
    #결과 [&#39;안녕하세요.\n&#39;, &#39;파이썬\n&#39;, &#39;코딩 도장입니다.\n&#39;]</code></pre><h2 id="객체를-파일에-저장하는-pickle-모듈">객체를 파일에 저장하는 pickle 모듈</h2>
<p>객체를 파일에 저장하는 과정을 피클링(pickling)이라고 하고, 파일에서 객체를 읽어오는 과정을 언피클링(unpickling)이라고 한다.</p>
<h3 id="피클링pickling">피클링(pickling)</h3>
<p>피클링 = 파이썬 객체를 파일에 저장
피클링은 pickle 모듈의 dump 메서드를 사용.
<strong>파일모드를 &#39;wb&#39;로 지정해야함</strong></p>
<pre><code class="language-python">import pickle

name = &#39;ttakku&#39;
age = 100
address = &#39;서울시 OO구 OO동&#39;
scores = {&#39;korean&#39;:&#39;90&#39;,&#39;english&#39;:&#39;95&#39;,&#39;math&#39;:&#39;70&#39;}

with open(&#39;ttakku.p&#39;,&#39;wb&#39;) as file:#wb 설명 참고
    pickle.dump(name,file)
    pickle.dump(age,file)
    pickle.dump(address,file)
    pickle.dump(scores,file)</code></pre>
<p><code>pickel.dump</code> 로 객체(값)을 저장할 때는 파일 모드를 <code>&#39;wb&#39;</code>로 지정해야함
<code>&#39;wb&#39;</code>에서 b 는 binary를 뜻하는데, 바이너리 파일은 컴퓨터가 처리하는 파일 형식이라 텍스트 편집기로 열면 사람이 알아보기 어려움</p>
<p><em>(vscode에서 열어 본 ttakku.p)</em>
<img src="https://images.velog.io/images/ttakku-park/post/adc517c0-ce91-428b-adf0-6f4871ff4c7e/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-21%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.38.29.png" alt=""></p>
<p><strong>파이썬 파일을 pickle.py 로 저장할 경우 에러 생김</strong></p>
<blockquote>
<p>Traceback (most recent call last):
  File &quot;/Users/ttakku/python/pickle.py&quot;, line 1, in <module>
    import pickle
  File &quot;/Users/ttakku/python/pickle.py&quot;, line 9, in <module>
    pickle.dump(name,file)
AttributeError: partially initialized module &#39;pickle&#39; has no attribute &#39;dump&#39; (most likely due to a circular import)</p>
</blockquote>
<h3 id="언피클링unpickling">언피클링(unpickling)</h3>
<p>  언피클링 = 파일에서 파이썬 객체를 읽어 옴
  언피클링은 pickle 모듈의 load를 사용함.
  <strong>언피클링시 반드시 파일 모드를 바이너리 읽기 보드 &#39;rb&#39;로 지정해야함</strong>
  rb : 바이너리 읽기 모드</p>
<pre><code class="language-python">import pickle

with open(&#39;ttakku.p&#39;,&#39;rb&#39;) as file: #ttakku.p 파일을 바이너리 읽기 모드로 열기
    name = pickle.load(file)
    age = pickle.load(file)
    address = pickle.load(file)
    scores = pickle.load(file)
    print(name)
    print(age)
    print(address)
    print(scores)

#실행결과 
#ttakku
#100
#서울시 OO구 OO동
#{&#39;korean&#39;: &#39;90&#39;, &#39;english&#39;: &#39;95&#39;, &#39;math&#39;: &#39;70&#39;}</code></pre>
<p>ttakku.p 파일을 저장할 때 <code>pickle.dump</code> 를 각 name,age, address,scores 네 번 사용했기 때문에</p>
<p>마찬가지로 파일에서 객체(값)을 가져올 때도 <code>pickle.load</code>를 네번 사용해야함.(저장 순서대로 가져올 때도 같은 순서로 가져옴)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL | 파이썬 집합을 표현하는 set 자료형]]></title>
            <link>https://velog.io/@ttakku-park/TIL-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A7%91%ED%95%A9%EC%9D%84-%ED%91%9C%ED%98%84%ED%95%98%EB%8A%94-set-%EC%9E%90%EB%A3%8C%ED%98%95</link>
            <guid>https://velog.io/@ttakku-park/TIL-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A7%91%ED%95%A9%EC%9D%84-%ED%91%9C%ED%98%84%ED%95%98%EB%8A%94-set-%EC%9E%90%EB%A3%8C%ED%98%95</guid>
            <pubDate>Mon, 19 Apr 2021 09:03:45 GMT</pubDate>
            <description><![CDATA[<p>집합 = set 
수학의 집합개념과 같음 </p>
<blockquote>
<p>수학에서, 집합(集合, 영어: set)은 특정한 조건에 맞는 원소들의 모임이며, 명확한 기준에 의하여 주어진 서로 다른 대상들이 모여 이루는 새로운 대상이다. 어떤 대상이 집합에 속하는지 여부는 명확해야 하며, 집합 위에는 순서나 연산 따위의 구조가 주어지지 않는다. 집합은 수학에서 가장 기본적인 개념이다. <a href="https://ko.wikipedia.org/wiki/%EC%A7%91%ED%95%A9">위키백과참고</a></p>
</blockquote>
<p>세트의 기본 형태 : 세트는 {}(중괄호) 안에 값을 저장하며 각 값은,(콤마)로 구분해줌
ex) 세트 = {값1, 값2, 값3}</p>
<pre><code class="language-python">family = {&#39;father&#39;,&#39;mother&#39;,&#39;sister&#39;,&#39;brother&#39;}</code></pre>
<p>주의
세트의 요소는 순서가 정해져 있지 않음(<em>unordered</em>)
그러므로 출력시 매번 요소의 순서가 다르게 나옴</p>
<p>세트에 들어가는 요소는 중복 될 수 없음
같은 요소가 2개 이상 중복 될 경우 같은 요소 중 1개만 남음</p>
<p>세트는 리스트, 튜플, 딕셔너리와는 다르게 대괄호 [] 로 특정 요소만 출력할 수는 없다. 
-&gt; 세트에 특정 값이 있는지 확인은 가능
in : 있는걸 확인함
not in : 없는걸 확인함</p>
<h2 id="set-만들기">set 만들기</h2>
<p>set (반복 가능한객체, iterable<a href="">이터레이트 참고</a>)</p>
<h3 id="문자열-사용">문자열 사용</h3>
<pre><code class="language-python">a = set(&#39;apple&#39;)
print(a)
#결과 {&#39;l&#39;, &#39;p&#39;, &#39;e&#39;, &#39;a&#39;} </code></pre>
<p>중복된 &#39;p&#39; 2개중 하나 삭제, 유일한 문자들만 남게함 (중복된 문자는 포함하지 않는다.)</p>
<hr>
<h3 id="range-사용">range 사용</h3>
<pre><code class="language-python">b = set(range(5))
print(b)
#결과 {0, 1, 2, 3, 4}</code></pre>
<hr>
<h3 id="빈-세트">빈 세트</h3>
<pre><code class="language-pyhton">c = set()</code></pre>
<p>set에 아무것도 지정하지 않으면 됨.</p>
<blockquote>
<p><strong>주의</strong>
set의 기본 형태 {}를 사용하여 빈 세트를 만들면 
세트가 아닌 딕셔너리가 만들어짐
-&gt; type(set) 로 형태 확인 가능</p>
</blockquote>
<p>*<em>list 와 다르게 set는 중첩할 수 없다 (set 안의 set 만들 수 없음.)
*</em></p>
<blockquote>
<p><strong>set 를 중첩하고 싶다면?</strong>
frozenset 사용가능
말그대로 얼어있는set 라 집합연산과 메서드에서 요소를 추가하거나 삭제하는 연산,메서드는 사용할수 없음</p>
</blockquote>
<pre><code class="language-python">frozenset({frozenset({1, 2}), frozenset({3, 4})}) # 이런형태로 중첩가능</code></pre>
<p>중첩은 frozenset 끼리만 가능하고 일반 set는 frozenset에 중첩할 수 없음.</p>
<h2 id="집합-연산-사용">집합 연산 사용</h2>
<p>집합 연산은 파이썬의 산술 연산자와 논리 연산자를 활용함</p>
<h3 id="합집합--union---">합집합 ( union , | )</h3>
<p>set.union() 메서드와 동작이 같음</p>
<pre><code class="language-python">a = {1,2,3,4}
b = {3,4,5,6}
print(a|b) # a 와 b 의 합집합
print(set.union(a,b)) # a 와 b 의 합집합</code></pre>
<h3 id="교집합intersection--">교집합(intersection , &amp;)</h3>
<p>set.intersection() 메서드와 동작이 같음  </p>
<pre><code class="language-python">print(a&amp;b) #a와 b의 교집합
print(set.intersection(a,b))#a와 b의 교집합</code></pre>
<h3 id="차집합-difference----">차집합 (difference , - )</h3>
<p>set.difference() 메서드와 동작이 같음</p>
<pre><code class="language-python">print(a-b) # 순서가 바뀌면 값이 달라짐 현재는 a 에서 b 요소를 제거
print(set.difference(a,b))</code></pre>
<h3 id="대칭차집합-symmetric-difference--">대칭차집합 (symmetric difference , ^)</h3>
<p>XOR 연산자 ^ 를 사용함
<em>XOR(배타적OR) : 서로다른것만 해당</em> 겹치지 않은것들만 해당, XOR은 서로 다르면 참</p>
<p>set.symmetric_difference() 메서드와 동작이 같음</p>
<p>집합에서는 두 집합 중 겹치지 않는 요소만 포함함</p>
<pre><code class="language-python">print(a^b)
print(set.symmetric_difference(a,b)) # 서로 다른걸 보여주세요. 교집합빼고 보여주세요</code></pre>
<h2 id="할당-연산자-사용">할당 연산자 사용</h2>
<p>세트 자료형에 | , &amp; , - , ^ 연산자와 할당 연산자 = 을 함께 사용하면
집합 연산의 결과를 변수에 다시 저장(할당)함.</p>
<h3 id="update">update</h3>
<p>|= 은 현재 세트에 다른 세트를 더하며 update 메서드와 같음</p>
<pre><code class="language-python"># 세트1 |= 세트2
t = {1,2,3,4}
t |= {5} 
print(t) # 결과 {1,2,3,4,5}

#세트1.update(세트2)
t.update({5})
print(t) # 결과 {1,2,3,4,5}</code></pre>
<h3 id="intersection_update">intersection_update</h3>
<p>&amp;= 는 현재 세트와 다른 세트의 겹치는 요소만 현재 세트에 저장 한다.
intersection_update() 메서드와 같음</p>
<pre><code class="language-python">t = {1,2,3,4}
t &amp;= {0,1,2,3,4}
print(t) #결과 {1,2,3,4} 겹치지 않는 0은 제외

t.intersection_update({0,1,2,3,4})
print(t) #결과 {1,2,3,4}</code></pre>
<h3 id="difference_update">difference_update</h3>
<p>-= 는 현재 세트에서 다른 세트를 뺀다.
difference_update() 메서드와 같음</p>
<pre><code class="language-python">t = {1,2,3,4}
t -= {1,2,3}
print(t) #결과 {4} 겹치지 않는 0은 제외

t.difference_update({1,2,3})
print(t) #결과 {4}</code></pre>
<h3 id="symmetric_difference_update">symmetric_difference_update</h3>
<p>^=은 현재 세트와 다른 세트 중에서 겹치지 않는 요소만 현재 세트에 저장한다.
symmetric_difference_update() 메서드와 같다.</p>
<pre><code class="language-python">t = {1,2,3,4}
t ^= {3,4,5,6}
print(t) #결과 {1,2,5,6} 겹치는 3,4 제외

t.symmetric_difference_update({3,4,5,6})
print(t) #결과 {1,2,5,6}</code></pre>
<h2 id="집합-연산-사용-1">집합 연산 사용</h2>
<p>부분 집합과 상위 집합 확인</p>
<p>현재 세트가 다른 세트의 부분집합 또는 상위집합인지 확인할 때는 세트 자료형에 부등호와 등호를 사용한다.</p>
<h3 id="-부분집합-subset">&lt;= 부분집합 (subset)</h3>
<p><code>&lt;=</code>는 현재 세트가 다른 세트의 부분집합인지 확인한다.
issubset() 메서드와 같음</p>
<blockquote>
<p>현재세트 &lt;= 다른세트
현재세트.inssubset(다른세트)</p>
</blockquote>
<p>결과는 True or False</p>
<p><img src="https://images.velog.io/images/ttakku-park/post/44b0536f-f341-4c1e-89a2-364fe53982de/image.png" alt=""></p>
<h3 id="진부분집합-proper-subset">&lt; 진부분집합 (proper subset)</h3>
<p>현재세트가 다른 세트의 진부분집합인지 확인한다.
메서드는 없음</p>
<p>부분집합이지만 같지는 않을 때 참임 (동일한 부분을 제외한것)</p>
<blockquote>
<p>현재 세트 &lt; 다른세트</p>
</blockquote>
<pre><code class="language-python">&gt;&gt;&gt; a = {1,2,3,4}
&gt;&gt;&gt; a &lt; {1,2,3,4,5}
True

&gt;&gt;&gt; a = {1,2,3,4}
&gt;&gt;&gt; a &lt; {1,2,3,4}
False</code></pre>
<hr>
<h3 id="-상위집합superset">&gt;= 상위집합(superset)</h3>
<p><code>&gt;=</code> 은 현재 세트가 다른 세트의 상위 집합인지 확인
issuperset() 메서드와 같음</p>
<pre><code class="language-python">&gt;&gt;&gt; a = {1,2,3,4}
&gt;&gt;&gt; a &gt;= {1,2,3,4}
True

&gt;&gt;&gt; a &gt;= {1,2}
True

&gt;&gt;&gt; a &gt;= {1,2,3,4,5}
False

&gt;&gt;&gt; a.issuperset({1,2,3,4})
True</code></pre>
<hr>
<h3 id="진상위집합proper-superset">&gt; 진상위집합(proper superset)</h3>
<p><code>&gt;=</code> 은 현재 세트가 다른 세트의 상위 집합인지 확인
메서드는 없음
상위 집합이지만 같지는 않을 때 참임</p>
<pre><code class="language-python">&gt;&gt;&gt; a = {1,2,3,4}
&gt;&gt;&gt; a &gt; {1,2,3,4}
Flase

&gt;&gt;&gt; a &gt; {1,2,3}
True
</code></pre>
<h3 id="세트가-같은지-다른지-확인하기">세트가 같은지 다른지 확인하기</h3>
<h4 id="세트가-같은지-확인하기-">세트가 같은지 확인하기 (==)</h4>
<p><code>==</code> 연산자 사용</p>
<pre><code class="language-python">&gt;&gt;&gt; a = {1,2,3,4}
&gt;&gt;&gt; a == {1,2,3,4}
True

&gt;&gt;&gt; a == {4,2,1,3}
True</code></pre>
<p>요소만 같으면 순서 상관없음 말그대로 집합</p>
<hr>
<h4 id="세트가-다른지-확인하기-">세트가 다른지 확인하기 (!=)</h4>
<p><code>!=</code> 연산자 사용</p>
<pre><code class="language-python">&gt;&gt;&gt; a = {1,2,3,4}
&gt;&gt;&gt; a != {1,2,3}
True

&gt;&gt;&gt; a == {4,2,1,3}
False</code></pre>
<hr>
<h4 id="세트가-겹치지-않는지-확인하기-disjoint">세트가 겹치지 않는지 확인하기 (disjoint)</h4>
<p>disjoint 는 현재 세트가 다른 세트와 겹치지 않는지 확인한다.</p>
<blockquote>
<p>현재세트.isdisjoint(다른세트)</p>
</blockquote>
<pre><code class="language-python">&gt;&gt;&gt; a = {1,2,3,4}
&gt;&gt;&gt; a.isdisjoint{5,6,7,8} # 겹치는 요소가 없음
True

&gt;&gt;&gt; a.isdisjoint{3,4,5,6} # 3,4가 겹침
False</code></pre>
<h3 id="세트조작하기">세트조작하기</h3>
<p><code>.add(요소)</code> : 세트에 요소를 추가
<code>.remove(요소)</code> : 세트에서 특정 요소를 삭제하고 요소가 없으면 에러발생
<code>.discard(요소)</code> : 세트에서 특정 요소를 삭제하고 요소가 없으면 그냥 넘어감.
<code>.pop()</code> :세트에서 임의의 요소를 삭제하고 해당 요소를 반환. 요소가 없으면 에러
<code>.clear()</code> : 세트의 모든 요소를 삭제
<code>len(세트)</code> : 세트의 요소 개수 구함.</p>
<h3 id="세트의-할당과-복사">세트의 할당과 복사</h3>
<p>딕셔너리와 마찬가지로 할당과 복사의 차이점이 있으니 주의해야함</p>
<pre><code class="language-python">a = {1,2,3,4}
b = a

print(a is b) #True</code></pre>
<p>위와 같이 할당을 하게되면 a 와 b 는 같은 하나의 세트 객체를 가르키게 된다.</p>
<p>a 와 b 를 각각 다른 객체로 만드려면 <code>.copy()</code> 메서드를 사용해야한다.</p>
<pre><code class="language-python">a = {1,2,3,4}
b = a.copy()

print(a is b) #False</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL | 백준  10950 (A+B)]]></title>
            <link>https://velog.io/@ttakku-park/TIL-%EB%B0%B1%EC%A4%80-10950-AB</link>
            <guid>https://velog.io/@ttakku-park/TIL-%EB%B0%B1%EC%A4%80-10950-AB</guid>
            <pubDate>Sat, 17 Apr 2021 06:34:51 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/ttakku-park/post/637f6662-ff8a-469d-85bb-da86121a3de5/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-17%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%203.01.32.png" alt="">
<a href="https://www.acmicpc.net/problem/10950">출처 백준</a></p>
<p>2주차 문제에서 기본이지만 못풀고있었던 10950문제!
개념서를 너무 성의없이 읽은것같아서 각잡고 다시 훑어보니 어떻게 풀지 감이 잡혔다..</p>
<pre><code class="language-python">test_count = int(input()) #테스트케이스 입력
i = 0 #초기화

while i &lt; test_count:#(초기)0보다 테스트케이스 입력값이 크면 실행/ i가 입력값에 도달했을때 정지(false)
    use1, use2 = map(int,input().split())#입력값 2개를 입력받아 각각의 변수에 할당하고
    print(use1 + use2)#할당한 값들을 더해 출력한다.
    i += 1 # i = i+1 해줌</code></pre>
<ol>
<li><code>test_count</code>에 개수 T 5를 입력하면</li>
<li><code>while</code> 의 조건식 i(초기값 0) 가 test_count (5) 가 될때까지 </li>
<li>각각의 변수<code>use1</code>,<code>use2</code>에 입력받은 값을 나누어 정수로 할당하고</li>
<li>할당 된  변수 <code>use1</code>,<code>use2</code>를 더한 결과를 print 한다.</li>
<li>그후 i = i+1 을하여 <code>test_count</code> 값을 +1 한다.</li>
<li><code>test_count</code>가 4를 초과하는 순간 <code>while</code>은 <code>flase</code> 루프가 중단된다.</li>
</ol>
<hr>
<p><strong>코드를 1조 슬랙에 올렸더니 좋은 피드백을 주셨다!</strong></p>
<pre><code class="language-python">T =int(input())
for i in range(T):
    a,b = map(int,input().split())
    print(a+b)</code></pre>
<p>나는 while 구문을 쓰면서 초기화나 i+= 1 등이 들어갔는데 for문을 사용하니까 훨씬 깔끔해지고 가독성이 좋아졌다.</p>
<p>솔직히 가독성부분을 생각안하고 머릿속으로 생각하는걸 바로바로 코드로 짜니 설명이 많은 코드로 짠것같다. 내가 짠것도 충분히 간단한 코드라고 생각했는데 예로 보여주신 코드를 보니까 간단한 코드를 더 깔끔하게 적합하게 적재적소에 사용하는 방법을 항상 고민하면서 짜야할것같다! 앞으로 점차 복잡해질테니까 미리미리 클린하게 작성하는 습관을 들여야지</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL | 파이썬 에러 SyntaxError: Non-ASCII character]]></title>
            <link>https://velog.io/@ttakku-park/TIL-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%97%90%EB%9F%AC-SyntaxError-Non-ASCII-character</link>
            <guid>https://velog.io/@ttakku-park/TIL-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%97%90%EB%9F%AC-SyntaxError-Non-ASCII-character</guid>
            <pubDate>Thu, 15 Apr 2021 08:16:59 GMT</pubDate>
            <description><![CDATA[<h2 id="🚨에러">🚨에러</h2>
<p>여느때와 다름없이 파이썬 공부중 갑작스런 에러문구</p>
<blockquote>
<p>SyntaxError: Non-ASCII character &#39;</p>
</blockquote>
<p>ASCII 하면 문자와 관련된것같아 머리를 굴려보지만 정확한 해결방법을 못찾겠어 열심히 구글링을 시작했다.</p>
<p><a href="https://korbillgates.tistory.com/97">생물물리학자님의 블로그</a>에서 알아보니 python2 에서 기본 문자 인코딩은 ASCII 라고 한다. (<del>하지만 나는 python 3.8.2를 쓰는데..</del>) </p>
<hr>
<h3 id="만약-파이썬-2-를-쓰고-있다면">만약 파이썬 2 를 쓰고 있다면</h3>
<p>utf-8을 사용하기위해 설정을 해주어야 하는데 방법은</p>
<pre><code class="language-python"># -*- coding: utf-8 -*-</code></pre>
<p>라인 첫 줄에 위의 코드를 넣어주어야한다. 그럼 해결완료!</p>
<hr>
<h3 id="만약-파이썬3을-쓰고-있다면">만약 파이썬3을 쓰고 있다면</h3>
<p>나와 같은 경우인데, 따로 건드린 것 없이 <strong>SyntaxError: Non-ASCII character</strong> 문구가 뜬 상황이라면 </p>
<p><strong>1. 자신이 지금 쓰는 파이썬 버전을 에디터나 터미널에서 확인 해주어야한다.</strong>
<img src="https://images.velog.io/images/ttakku-park/post/d65545b3-1d14-4fa1-85e5-6500baa762e4/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-15%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.04.27.png" alt=""></p>
<p>나는 vscode의 왼쪽 하단의 파란색 라인에서 나의 현재 버전을 확인했더니 python 2.7.16으로 ! 되어 있었다.</p>
<p>*<em>2. 그부분을 클릭한다. *</em>
그러면 vscode 상단에
<img src="https://images.velog.io/images/ttakku-park/post/c0726526-9dea-4ef2-955f-13e666d3b8ff/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-15%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.07.09.png" alt=""></p>
<p><strong>3. 사용할 수 있는 버전이 나와있는데 3버전이 없다면 설치. 있다면 버전을 클릭하면 적용이 된다.</strong>
이렇게!
<img src="https://images.velog.io/images/ttakku-park/post/cc649c25-72a9-4a46-a7d3-5bfe851c8ed3/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-15%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.10.48.png" alt=""></p>
<p>_python2 의 기본문자 인코딩이 ASCII 인것과 다르게 python3 의 기본문자 인코딩은 utf-8 이기 때문에 생긴 에러였다. _</p>
<p>해결완료!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL | 자기소개페이지 수정]]></title>
            <link>https://velog.io/@ttakku-park/TIL-%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%88%98%EC%A0%95</link>
            <guid>https://velog.io/@ttakku-park/TIL-%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%88%98%EC%A0%95</guid>
            <pubDate>Sun, 11 Apr 2021 10:47:14 GMT</pubDate>
            <description><![CDATA[<h2 id="자기소개페이지-마크업--css-수정-제이쿼리를-사용한-스크롤-추가">자기소개페이지 마크업 &amp; css 수정, 제이쿼리를 사용한 스크롤 추가</h2>
<h3 id="1주차-과제의-해결하지-못했던-문제">1주차 과제의 해결하지 못했던 문제</h3>
<p>1주차 과제에 대한 글의 맨 마지막 부분에 해결하지 못한 문제점들이 있어 올리지 못하였는데, 어쩌다 우연히 내가 짠 코드들을 유심히 보며 멍을 때리다가 아무래도 이상한 부분이 있어 확인을 해보니 OMG</p>
<p>자기소개 페이지 구성을 할 때</p>
<pre><code>&lt;div id=&quot;wrap&quot;&gt;
    &lt;div id=&quot;main_wrap&quot;&gt; &lt;!--1페이지--&gt;
        &lt;!--contents--&gt;
        &lt;/div&gt;
        &lt;div id=&quot;info_wrap&quot;&gt; &lt;!--2페이지 information--&gt;
        &lt;!--contents--&gt;
        &lt;/div&gt;
        &lt;div id=&quot;fav_wrap&quot;&gt; &lt;!--3페이지 favorite--&gt;
        &lt;!--contents--&gt;
        &lt;/div&gt;
        &lt;div id=&quot;contact_wrap&quot;&gt; &lt;!--4페이지 contact--&gt;
        &lt;!--contents--&gt;
        &lt;/div&gt;
&lt;/div&gt;</code></pre><p>이렇게 1페이지부터 4페이지 까지 모두 동 등한 위치로 <code>#wrap</code> 에 상속되게 구성을 하였는데 css에서 <code>#info_wrap</code>에 특별한 <code>position</code> 이나 <code>float</code>를 준적이 없는데 자꾸 <code>#contact_wrap</code> 이 자신의 윗페이지인     <code>#fav_wrap</code>을 무시하고 
<img src="https://images.velog.io/images/ttakku-park/post/4fcfa0b8-e17a-4475-9f2f-0476dc73fced/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-10%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2011.07.10.png" alt=""></p>
<p>위 사진처럼 겹치는 문제가 생겼다.(<del>환장하겠네</del>)</p>
<p>일단 스터디시간에 맞춰 완성을 해야했기에 css파일에서 원래는 <code>height</code> 값을 주지않고 페이지를 합친 높이에 맞춰 자연스럽게 두려고 했던 <code>#wrap</code> 에 모든 컨텐츠가 잘리지 않도록 적당한 <code>height</code> 값을 눈대중으로 맞추어 주고, </p>
<pre><code class="language-css">#contact_wrap{
        background-color:#ffffff;
        width:1300px;
        height:800px;
        position:relative;
        top:1150px;
        left:50%;
        transform:translate(-50%,0);}</code></pre>
<p>이렇게 멋대로 위로 붙은 마지막페이지 <code>#contact_wrap</code> 을 <code>position</code>을 사용하여 강제로 내가 원래 의도한 위치로 이동시켰다. (<del>조금만 더 살펴보지..</del>)</p>
<hr>
<h3 id="문제를-찾았다">문제를 찾았다~!</h3>
<p>처음에 말했듯이 1주차 스터디 이후 하루 쉬고, 그 다음날 문제를 찾기위해 html파일을 열어놓고 멍을 때리던 도중에 뭔가 이상한 것을 발견했다.</p>
<p>무수히 많이 중첩되어있는 <code>&lt;/div&gt;</code> 중 이번에 html 작성을 할때 결심했던 tab 구분이 이상한걸 발견했다.</p>
<p>대략 이런..</p>
<pre><code> &lt;div id=&quot;info_wrap&quot;&gt;
     &lt;div class=&quot;info_contents&quot;&gt;    
            &lt;p&gt; info_wrap의 내용입니다.&lt;/p&gt;
     &lt;/div&gt;&lt;!--info_contents--&gt;
 &lt;div id=&quot;fav_wrap&quot;&gt;
     &lt;div class=&quot;fav_contents&quot;&gt;    
            &lt;p&gt; fav_wrap의 내용입니다.&lt;/p&gt;
     &lt;/div&gt;&lt;!--fav_contents--&gt;
 &lt;/div&gt;&lt;!--#fav_wrap--&gt;
 &lt;/div&gt;&lt;!--#info_wrap--&gt;</code></pre><p>동등하게 있어야 할 두 페이지가 확인 해보니 
<code>#info_wrap</code> 안에 <code>#fav_wrap</code> 이 자식<code>&lt;div&gt;</code>로 되어있었다.
그렇기 때문에 내가 css 에 작성했던 <code>#info_wrap</code>의 <code>height : 800px;</code> 은 당연히 <code>#fav_wrap</code> 까지 담지 못했을것이고 넘친 부분이라 원래 있을곳에 있었던 것 뿐이였던 <code>#contact_wrap</code>이 오해 받았던것.
아마 <code>overflow : hidden;</code> 을 해봤었다면 어쩌면 더 빨리 발견가능 했을건데..</p>
<p>마크업작성을 할때 내용을 바꾸기 위해서 <code>&lt;div&gt;</code> 들을 몇번 옮긴 적이 있었는데 아마 그때 생긴 문제인것같다.</p>
<hr>
<h3 id="스크롤-제이쿼리-추가">스크롤 제이쿼리 추가</h3>
<p>사실 자바스크립트로 스크롤기능을 만드려고했는데, 파이썬과 함께 시간투자를 많이 하기 힘들것같아 그래도 좀 사용해봤던 제이쿼리 (<del>자바스크립트는 안익숙하면서..</del>) 로 간단한 스크롤 기능정도만 추가 해 보기로 했다.</p>
<pre><code class="language-javascript">$(function(){
   var $menu = $(&#39;.fir_bottom_wrap ul li&#39;); 
       $contents = $(&#39;.click_contents&#39;);



    $menu.click(function(x){
        x.preventDefault();//a 링크 속성 삭제하기

        var idx = $(this).index();
        var section = $contents.eq(idx)//index 순서를 정해 메뉴클릭 시 각각 순서대로 이동

        var sectionDistance = section.offset().top;
        //console.log(sectionDistance); menu를 눌렀을때 이동하는 높이 확인
        //A.scrollTop() 스크롤양을 확인
        $(&#39;html&#39;).stop().animate({scrollTop:sectionDistance});
    }); 
});
</code></pre>
<p><a href="https://www.youtube.com/watch?v=vh5hDOjeVvk">유튜브</a> 제이쿼리 강의를 보며 작성했는데 마크업이 다른 부분은 조금씩 바꿔서 작성했다.</p>
<p>처음 만들때 메뉴를 첫페이지에 상속시키지않고 우측에 픽스된 selfintroduction 처럼 메뉴를 고정해서 어떤 페이지에서든 이동할 수 있게 하지 않은게 아쉬움이 남는다(<del>미디어쿼리도ㅠㅠ</del>). 그래도 좀 더 완성도 있어진 페이지에 뿌듯!</p>
<p><a href="https://ttakku-park.github.io/wecode_study/">완성페이지 링크!</a></p>
<p>그럼 파이썬 공부하러,, 🥸</p>
]]></description>
        </item>
    </channel>
</rss>