<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Boyeon Ihn - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/korean/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Boyeon Ihn - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/korean/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:27:47 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/korean/news/author/boyeonihn/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Python에서 함수 정의하고 호출하기 ]]>
                </title>
                <description>
                    <![CDATA[ 프로그래밍에서 함수는 호출될 때 특정 기능을 실행하는 재사용 가능한 코드 블록입니다. 함수는 코드를 더 모듈화하고 체계적으로 재사용할 수 있도록 도와주기 때문에 모든 프로그래밍 언어의 필수적인 부분입니다. 이 기사에서는 Python에서 함수를 정의하고 호출하는 방법을 설명합니다. 함수의 기본적인 사용법을 배우면 Python 응용 프로그램의 코드를 더 깔끔한 단위로 나누고 정리할 수 있습니다. 또한 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/python-define-call-function/</link>
                <guid isPermaLink="false">6418329223c0b9e3b0d23d45</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Mon, 20 Mar 2023 20:19:43 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2023/03/functions.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/python-functions-define-and-call-a-function/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Functions – How to Define and Call a Function</a>
      </p><!--kg-card-begin: markdown--><h3 id="">프로그래밍에서 함수는 호출될 때 특정 기능을 실행하는 재사용 가능한 코드 블록입니다.</h3>
<p>함수는 코드를 더 모듈화하고 체계적으로 재사용할 수 있도록 도와주기 때문에 모든 프로그래밍 언어의 필수적인 부분입니다.</p>
<p>이 기사에서는 Python에서 함수를 정의하고 호출하는 방법을 설명합니다. 함수의 기본적인 사용법을 배우면 Python 응용 프로그램의 코드를 더 깔끔한 단위로 나누고 정리할 수 있습니다.</p>
<p>또한 인수(argument) 및 매개변수(parameter), 그리고 <code>return</code> 키워드가 Python 함수에서 어떻게 작동하는지 살펴보겠습니다.</p>
<h2 id="python">Python에서 함수 정의하는 기본 문법</h2>
<p>Python에서는 <code>def</code> 키워드를 사용해 함수를 정의하고 함수 식별자(함수 이름) 다음에 괄호와 콜론을 작성합니다.</p>
<p>그런 다음, 탭 또는 공백 4개로 들여쓰기(indent)를 작성 후 함수에서 실행하려는 기능을 코드로 지정해야 합니다.</p>
<pre><code class="language-python">def functionName():
    # 함수가 실행하는 코드 내용이 여기에 위치합니다
</code></pre>
<h2 id="python">기본적인 Python 함수 예시</h2>
<p>위의 기본 함수 정의 문법에 따라 터미널에 "Hello World"를 출력하는 Python 함수의 코드는 다음과 같습니다.</p>
<pre><code class="language-python">def myfunction():
    print("Hello World")
</code></pre>
<p>이 함수를 <strong>호출하려면</strong> 함수 이름 뒤에 괄호를 작성합니다. 이렇게 말이에요.</p>
<pre><code class="language-python">myfunction()
</code></pre>
<p>함수 호출 시 실행된 작업 내용을 확인하려면, 터미널에 <code>python filename.py</code>를 입력해 작성한 함수 코드를 실행합니다.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2022/03/sss-1.png" alt="python3 func.py 명령어를 실행하니 터미널에 Hello World가 출력된 모습" width="600" height="400" loading="lazy"></p>
<p>아래 예시를 통해 두 숫자의 뺄셈을 계산하는 함수의 코드를 확인해봅시다.</p>
<pre><code class="language-python">def subtractNum():
    print(34 - 4)
subtractNum()
# 출력된 결과: 30
</code></pre>
<h2 id="parametersargument">함수에 전달되는 매개변수(parameters)와 인수(argument)</h2>
<p>Python에서 함수를 정의할 때 매개변수(parameters)를 괄호 안에 넣어 함수에 전달할 수 있습니다.</p>
<p>함수를 정의하면서 전달되는 매개변수를 지정하는 기본 문법은 다음과 같습니다.</p>
<pre><code class="language-python">#함수가 선언 및 정의될 때는 매개변수를 괄호 안에 지정합니다
 def functionName(param1, param2):
    # 함수가 실행하는 코드 내용이 여기에 위치합니다
</code></pre>
<p>함수 호출 시, 매개변수에 전달될 값을 지정해야 합니다. (이 전달된 값을 바로 인수라고 합니다 --옮긴이).</p>
<pre><code class="language-python">#함수가 호출될 때 인수 값을 전달합니다
functionName(arg1, arg2)
</code></pre>
<p>(더 정확한 이해를 돕기 위해 매개변수와 인수의 정의를 정리해보겠습니다. --옮긴이)</p>
<ul>
<li>매개변수는 함수 정의 문법 괄호 사이에 표시된 변수입니다</li>
<li>인수는 함수 호출 시 매개변수에 전달되는 값입니다</li>
</ul>
<p>Python 함수에 매개변수와 인수가 전달되는 예시를 확인해봅시다.</p>
<pre><code class="language-python">def addNum(num1, num2):
    print(num1 + num2)
addNum(2, 4)
# 함수 호출의 결과: 6
</code></pre>
<p>위의 예시에 관해 몇 가지 정리해봅시다.</p>
<ul>
<li><code>addNum</code> 함수에 매개변수 <code>num1</code>, <code>num2</code> 두 개가 전달되었고,</li>
<li><code>addNum</code> 함수가 실행될 때 매개변수 두 개의 합계를 터미널에 출력하라고 지시했습니다.</li>
<li>마지막으로 <code>addNum</code> 함수 호출하면서 <code>2</code>, <code>4</code>라는 값을 인수로 전달했습니다.</li>
</ul>
<p>참고: 매개변수와 인수는 원하는 만큼 지정할 수 있습니다.</p>
<h2 id="return"><code>return</code> 키워드 사용하기</h2>
<p>Python에서는 <code>return</code> 키워드를 사용해 함수를 종료해 함수 내의 코드 블록에서 나올 수 있습니다. 다시 말해 함수 밖으로 결과값을 반환할 수 있습니다.</p>
<p><code>return</code> 문에는 함수가 호출되면 실행할 표현식 및 코드를 포함할 수 있습니다.</p>
<p>아래 예시는 Python에서 <code>return</code> 키워드가 어떻게 작동하는지 보여줍니다.</p>
<pre><code class="language-python">def multiplyNum(num1):
    return num1 * 8
result = multiplyNum(8)
print(result)
# 출력된 결과물: 64
</code></pre>
<p><strong>위 예시의 코드는 무엇을 실행하는 것인지 살펴봅시다!</strong></p>
<ul>
<li>먼저 <code>multiplyNum</code>이라는 함수를 정의하고 <code>num1</code>를 매개변수로 전달했습니다.</li>
<li>함수 안에서 <code>num1</code>에 8을 곱한 값을 지정하기 위해 <code>return</code> 키워드를 사용했습니다.</li>
<li>그런 다음, 함수를 호출하고 <code>num1</code> 매개변수에 <code>8</code>라는 값을 인수로 전달한 후 함수 호출의 결과를 <code>result</code> 변수에 할당했습니다.</li>
<li>원했던 결과 값을 <code>result</code> 변수에 할당했기 때문에 터미널에 출력할 수 있었습니다.</li>
</ul>
<h2 id="">마치며</h2>
<p>이 기사에서는 Python에서 함수를 정의하고 호출하는 방법에 대해 배워봤습니다. 또한 함수에 매개변수와 인수를 전달하는 방법과 <code>return</code> 키워드를 사용하는 방법을 배워서 기본 함수를 더 유용하게 사용할 수 있는 방법도 살펴봤습니다.</p>
<p>이 기사가 도움이 됐다면 코딩에 관심 있는 친구 또는 지인에게 공유해주시길 바랍니다!</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python 딕셔너리 자료형 생성 및 관련 메서드 ]]>
                </title>
                <description>
                    <![CDATA[ 이 기사에서는 Python의 딕셔너리(Dictionary) 자료형의 기본 사용법을 알아보겠습니다. 딕셔너리 생성하기, 딕셔너리 내의 요소에 접근하기, 그리고 필요에 따라 딕셔너리의 요소를 수정하는 방법에 대해 살펴보겠습니다. 또한 흔히 사용하는 딕셔너리 내장 메서드에 대해서도 설명하겠습니다. 이 기사에서 다룰 내용은 다음과 같습니다.  1. 딕셔너리 생성 및 선언하기 1. 빈 딕셔너리 선언하기    ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/python-dictionary-methods/</link>
                <guid isPermaLink="false">63f60bce1d2b73063c4ce962</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Thu, 23 Feb 2023 08:19:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2023/02/pexels-kevin-ku-577585.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/create-a-dictionary-in-python-python-dict-methods/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Create a Dictionary in Python – Python Dict Methods</a>
      </p><!--kg-card-begin: markdown--><h3 id="pythondictionary">이 기사에서는 Python의 딕셔너리(Dictionary) 자료형의 기본 사용법을 알아보겠습니다.</h3>
<p>딕셔너리 생성하기, 딕셔너리 내의 요소에 접근하기, 그리고 필요에 따라 딕셔너리의 요소를 수정하는 방법에 대해 살펴보겠습니다.</p>
<p>또한 흔히 사용하는 딕셔너리 내장 메서드에 대해서도 설명하겠습니다.</p>
<p>이 기사에서 다룰 내용은 다음과 같습니다.</p>
<ol>
<li><a href="#define-intro">딕셔너리 생성 및 선언하기</a>
<ol>
<li><a href="#define-empty">빈 딕셔너리 선언하기</a></li>
<li><a href="#define-items">요소가 포함된 딕셔너리 선언하기</a></li>
</ol>
</li>
<li><a href="#overview">키(key)-값(value)란 무엇인가</a>
<ol>
<li><a href="#length">딕셔너리의 키-값(key-value) 개수 확인하기</a></li>
<li><a href="#key-value">주어진 딕셔너리의 모든 키-값 보기</a></li>
<li><a href="#keys">딕셔너리의 모든 키(key) 보기</a></li>
<li><a href="#values">딕셔너리의 모든 값(values) 보기</a></li>
</ol>
</li>
<li><a href="#access">딕셔너리의 특정 키-값에 접근하기</a></li>
<li><a href="#modify">딕셔너리 수정하기</a><br>
1.<a href="#add">딕셔너리에 새 키-값 추가하기</a><br>
2. <a href="#update">딕셔너리의 기존 키-값 수정하기</a><br>
3. <a href="#delete">키-값 삭제하기</a></li>
</ol>
<p>그럼 시작해볼까요?</p>
<h2 id="define-intro">딕셔너리 생성 및 선언하기</h2>
<p>Python의 딕셔너리는 키와 값으로 이루어진 자료형입니다.</p>
<p>다음 두 섹션을 통해 딕셔너리를 생성하는 두 가지 방법을 보여드리겠습니다.</p>
<p>첫 번째 방법은 중괄호 <code>{}</code>를 사용하는 것이고 두 번째 방법은 내장 함수 <code>dict()</code>를 사용하는 것입니다.</p>
<h3 id="define-empty">빈 딕셔너리 선언하기</h3>
<p>빈 딕셔너리를 선언하려면 먼저 딕셔너리의 이름이 될 변수 이름을 생성합니다.</p>
<p>그런 다음 생성한 변수를 빈 중괄호 <code>{}</code>에 할당합니다.</p>
<pre><code class="language-python">#빈 딕셔너리 선언하기
my_dictionary = {}
print(my_dictionary)
#type() 함수를 통해 자료형을 확인하기
print(type(my_dictionary))
#출력된 결과
#{}
#&lt;class 'dict'&gt;
</code></pre>
<p>빈 딕셔너리를 생성하는 또 다른 방법은 인수를 전달하지 않고 <code>dict()</code> 함수를 사용하는 것입니다.</p>
<p>인수를 전달하지 않은 <code>dict()</code>는 생성자 함수 역할을 해 빈 딕셔너리를 만듭니다.</p>
<pre><code class="language-python">#빈 딕셔너리 선언하기
my_dictionary = dict()
print(my_dictionary)
#type() 함수를 통해 자료형을 확인하기
print(type(my_dictionary))
#출력된 결과
#{}
#&lt;class 'dict'&gt;
</code></pre>
<h3 id="define-items">요소가 포함된 딕셔너리 선언하기</h3>
<p>요소가 포함된 딕셔너리를 만들려면 중괄호 <code>{}</code>안에 키-값을 포함해야 합니다.</p>
<p>기본 문법은 다음과 같습니다.</p>
<pre><code class="language-python">dictionary_name = {키: 값}
</code></pre>
<p>더 자세히 설명하겠습니다.</p>
<p>-<code>dictionary_name</code>은 변수의 이름입니다. 즉, 이 예시에서는 딕셔너리의 이름입니다.</p>
<ul>
<li>할당 연산자 <code>=</code>는 <code>키-값</code>을 <code>딕셔너리_이름</code>에 할당합니다.</li>
<li>중괄호 <code>{}</code>를 사용해 딕셔너리를 선언합니다.</li>
<li>중괄호 안에 키-값이 있습니다. 키와 값은 쌍점 <code>:</code>으로 구분합니다.</li>
</ul>
<p>예시를 통해 요소가 포함된 딕셔너리 선언하기를 확인해봅시다.</p>
<pre><code class="language-python">#딕셔너리 선언하기
my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
print(my_information)
#자료형 확인하기
print(type(my_information))
#출력된 결과
#{'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
#&lt;class 'dict'&gt;
</code></pre>
<p>위 예제에서는 중괄호 내에 일련의 요소가 있습니다. 정확히 말하자면, 다음과 같은 세 개의 키-값이 있습니다: <code>'name': 'Boyeon'</code>, <code>'age': 29</code>, and <code>'location': 'Seoul'</code>.</p>
<p>주어진 예시의 딕셔너리에 포함된 세 키는 <code>name</code>, <code>age</code>, 그리고 <code>location</code>이며, 각 키에 할당된 값은 <code>Boyeon</code>, <code>29</code>, 그리고 <code>Seoul</code>입니다.</p>
<p>딕셔너리에 여러 개의 키-값이 있을 경우 각 키-값은 쉼표로 구분합니다.</p>
<p>또 다른 예시를 봅시다.</p>
<p>이번에는 <code>dict()</code> 함수를 사용해 요소가 포함된 딕셔너리를 생성해야 한다고 가정해보겠습니다.</p>
<p>방법은 간단합니다. <code>dict()</code>를 사용해 일련의 키-값을 함수에 대한 인수로 전달하면 됩니다.</p>
<pre><code class="language-python">#dict() 함수를 사용해 딕셔너리 생성하기
my_information = dict({'name': 'Boyeon', 'age': 29, 'location': 'Seoul'})
print(my_information)
#자료형 확인하기
print(type(my_information))
#출력된 결과
#{'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
#&lt;class 'dict'&gt;
</code></pre>
<p>딕셔너리를 만드는 또 다른 방법은 바로 <code>fromkeys()</code> 메서드를 사용하는 것입니다.</p>
<p>미리 정의된 일련의 요소를 인수로 전달 받고 일련의 요소를 딕셔너리의 지정된 키로 사용해 새 딕셔너리를 반환합니다.</p>
<p>사용자가 선택 사항으로 모든 키에 대한 값을 설정할 수 있지만, 설정하지 않는다면 기본적으로 키의 값은 <code>None</code>이 됩니다.</p>
<p><code>fromkeys()</code> 메서드의 기본 문법은 다음과 같습니다.</p>
<pre><code class="language-python">딕셔너리_이름 = dict.fromkeys(sequence,value)
</code></pre>
<p>모든 키에 값을 설정하지 않고 <code>fromkeys()</code>를 사용해 딕셔너리를 만드는 예를 살펴봅시다.</p>
<pre><code class="language-python">#일련의 문자열 생성하기
cities = ('Paris','Athens', 'Madrid')
#fromkeys() 메서드를 사용해 `my_dictionary`라는 딕셔너리 생성하기
my_dictionary = dict.fromkeys(cities)
print(my_dictionary)
#{'Paris': None, 'Athens': None, 'Madrid': None}
</code></pre>
<p>이제 딕셔너리의 모든 키에 동일한 값을 설정하는 다른 예를 보여드리겠습니다.</p>
<pre><code class="language-python">#일련의 문자열 생성하기
cities = ('Paris','Athens', 'Madrid')
#단일 값을 생성하기
continent = 'Europe'
my_dictionary = dict.fromkeys(cities,continent)
print(my_dictionary)
#출력된 결과
#{'Paris': 'Europe', 'Athens': 'Europe', 'Madrid': 'Europe'}
</code></pre>
<h2 id="overview">키(key)-값(value)란 무엇인가</h2>
<p>Python 딕셔너리 내의 키는 수정 불가능한(immutable) 타입일 수도 있습니다.</p>
<p>Python에서 수정 불가능한 데이터 타입은 <code>정수(integers)</code>, <code>문자열(strings)</code>, <code>튜플(tuples)</code>, <code>실수형(floating point numbers)</code>, 그리고 <code>불린 자료형(Booleans)</code>입니다.</p>
<p>딕셔너리의 키는 <code>집합 자료형(sets)</code>, <code>리스트(lists)</code>, 또는 <code>딕셔너리(dictionaries)</code>와 같은 수정 가능한(mutable) 데이터 타입일 수 <strong>없습니다</strong>.</p>
<p>다음과 같은 딕셔너리가 있다고 가정해보겠습니다.</p>
<pre><code class="language-python">my_dictionary = {True: "True",  1: 1,  1.1: 1.1, "one": 1, "languages": ["Python"]}
print(my_dictionary)
#출력된 결과
#{True: 1, 1.1: 1.1, 'one': 1, 'languages': ['Python']}
</code></pre>
<p>위의 예시에 있는 딕셔너리의 키는 <code>불린</code>, <code>정수</code>, <code>실수형</code>, 그리고 <code>자료형</code> 데이터 타입으로 모두 키로 사용 가능합니다.</p>
<p>수정 가능한 데이터 타입의 키를 생성하려고 하면 <code>TypeError</code> 오류가 발생합니다.</p>
<pre><code class="language-python">my_dictionary = {["Python"]: "languages"}
print(my_dictionary)
#출력된 결과
#line 1, in &lt;module&gt;
#    my_dictionary = {["Python"]: "languages"}
#TypeError: unhashable type: 'list'
</code></pre>
<p>위에 예에서 수정 가능한 데이터 타입인 <code>리스트</code>를 키로 지정하려고 했기 때문에 <code>TypeError: unhashable type: 'list'</code> 오류가 발생했다는 것을 확인할 수 있습니다.</p>
<p>반면, 딕셔너리 내의 값(value)에는 데이터 타입에 관한 제한이 없습니다. 즉, 수정 가능한 데이터와 수정 불가능한 데이터 타입을 값으로 사용할 수 있습니다.</p>
<p>주목해야 할 키와 값의 또 다른 차이점은 키는 <strong>고유하다는 점입니다</strong>. 다시 말해 한 딕셔너리에 같은 이름의 키는 한 개 이상 존재할 수 없습니다. 하지만 딕셔너리 내에 동일한 값은 중복될 수 있습니다.</p>
<p>(더 명확한 설명을 위해 예시를 들어보겠습니다 --옮긴이)</p>
<pre><code class="language-python">#이렇게 딕셔너리에 `name` 키가 두 번 있을 수 없습니다
my_dictionary = {'name': 'Boyeon', 'name': 'Ihn'}
#하지만 딕셔너리에 `Seoul`이라는 값은 중복될 수 있습니다
my_information = {'birthplace': 'Seoul', 'current_location': 'Seoul'}
</code></pre>
<h3 id="length">딕셔너리의 키-값(key-value) 개수 확인하기</h3>
<p><code>len()</code> 함수는 인수로 전달된 객체의 총 길이를 반환합니다.</p>
<p>딕셔너리가 <code>len()</code> 함수에 인수로 전달되면, 딕셔너리에 포함된 키-값의 총 개수를 반환합니다.</p>
<p><code>len()</code>을 사용해 키-값의 수를 계산하는 방법은 다음과 같습니다.</p>
<pre><code class="language-python">my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
print(len(my_information))
#출력된 결과
#3
</code></pre>
<h3 id="key-value">주어진 딕셔너리의 모든 키-값 보기</h3>
<p>딕셔너리에 있는 모든 키-값을 보려면 <code>items()</code> 내장 함수를 사용합니다.</p>
<pre><code class="language-python">year_of_creation = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}
print(year_of_creation.items())
#출력된 결과
#dict_items([('Python', 1993), ('JavaScript', 1995), ('HTML', 1993)])
</code></pre>
<p><code>items()</code> 메서드는 딕셔너리의 키-값을 포함하는 튜플 목록을 반환합니다.</p>
<h3 id="keys">딕셔너리의 모든 키(key) 보기</h3>
<p>딕셔너리에 있는 모든 키를 확인하려면 <code>keys()</code> 내장 메서드를 사용합니다.</p>
<pre><code class="language-python">year_of_creation = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}
print(year_of_creation.keys())
#출력된 결과
#dict_keys(['Python', 'JavaScript', 'HTML'])
</code></pre>
<p><code>keys()</code> 메서드는 딕셔너리에 있는 키만 포함하는 리스트를 반환합니다.</p>
<h3 id="values">딕셔너리의 모든 값(values) 보기</h3>
<p>딕셔너리에 있는 모든 값을 확인하려면 <code>values()</code> 내장 메서드를 사용합니다.</p>
<pre><code class="language-python">year_of_creation = {'Python': 1993, 'JavaScript': 1995, 'HTML': 1993}
print(year_of_creation.values())
#출력된 결과
#dict_values([1993, 1995, 1993])
</code></pre>
<p><code>values()</code> 메서드는 딕셔너리에 있는 값만 포함하는 리스트를 반환합니다.</p>
<h2 id="access">딕셔너리의 특정 키-값에 접근하기</h2>
<p>Python에서는 기존 리스트 내의 특정 요소를 접근해야 할 때, 일반적으로 리스트 이름과 대괄호 표기법을 사용합니다. 대괄호 안에는 리스트 항목의 인덱스 번호를 지정합니다. 이렇게요.</p>
<p>(명확한 설명을 위해 예시를 추가합니다 --옮긴이)</p>
<pre><code class="language-python">#기존 리스트
my_list = [1993, 1995, 2022]
#대괄호와 인덱스 번호를 사용해 첫 번째 요소 접근하기
first_element = my_list[0]
print(first_element)
#출력된 결과
# 1993
</code></pre>
<p>딕셔너리에서는 리스트와 완전히 동일한 방법을 사용할 수 없습니다.딕셔너리는 키-값으로 이루어진 데이터 타입이기 때문에 인덱스 번호를 사용해 딕셔너리 내의 요소를 접근할 수 없기 때문입니다.</p>
<p>딕셔너리의 이름과 대괄호 표기법을 사용해 특정 요소에 접근한다는 점은 리스트와 비슷하지만, 딕셔너리는 이 대괄호 안에 접근하고 싶은 키를 지정합니다.</p>
<p>각 키는 특정 값에 해당하므로 접근하고 싶은 값과 지정된 키를 참조합니다.</p>
<p>특정 키-값에 접근하는 기본 문법은 다음과 같습니다.</p>
<pre><code class="language-python">dictionary_name[key]
</code></pre>
<p>Python 딕셔너리에서 특정 요소에 액세스하는 방법을 예시를 통해 살펴봅시다.</p>
<pre><code class="language-python">my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
#'age' 키에 할당된 값 접근하기
print(my_information['age'])
#출력된 결과
#28
</code></pre>
<p>주어진 딕셔너리에 존재하지 않는 키에 접근하려고 하면 어떻게 될까요?</p>
<pre><code class="language-python">my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
#존재하지 않는 'job' 키에 할당된 값 접근하기
print(my_information['job'])
#출력된 결과
#line 4, in &lt;module&gt;
#    print(my_information['job'])
#KeyError: 'job'
</code></pre>
<p>딕셔너리에 그런 키는 존재하지 않기 때문에 <code>KeyError</code> 오류가 발생합니다.</p>
<p>이와 같은 오류를 방지하는 한 가지 방법은 먼저 딕셔너리에 그 특정 키가 있는지 확인하는 것입니다.</p>
<p>바로 불린 값을 반환하는 <code>in</code> 키워드를 사용하면 됩니다. 키가 딕셔너리에 있으면 <code>True</code>를, 딕셔러니에 없으면 <code>False</code>를 반환합니다.</p>
<pre><code class="language-python">my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
#search for the 'job' key
print('job' in my_information)
#출력된 결과
#False
</code></pre>
<p><code>KeyError</code> 오류를 방지하려면 <code>get()</code> 메서드를 사용해 딕셔너리의 항목에 접근하는 방법도 있습니다.</p>
<p>찾으려는 키를 인수로 전달하면 <code>get()</code> 함수는 전달된 키에 해당하는 값을 반환합니다.</p>
<pre><code class="language-python">my_information = {'name': 'Dionysia', 'age': 28, 'location': 'Athens'}
#get() 메서드를 통해 'job' 키에 접근하기
print(my_information.get('job'))
#출력된 결과
#None
</code></pre>
<p>예시에 보인 것처럼, 존재하지 않는 키를 접근하려고 하면 <code>get()</code> 메서드는 기본적으로 <code>KeyError</code> 오류 대신 <code>None</code>을 반환합니다.</p>
<p><code>get()</code> 함수에 인수로 전달된 키가 딕셔너리에 없을 때 <code>None</code>이라는 메시지 대신 다른 메시지가 반환되도록 <code>get()</code> 함수를 사용자 정의할 수 있습니다.</p>
<p>키가 없을 때 표시되고 싶은 메시지를 <code>get()</code> 메서드의 두 번째 옵션 인수로 전달하면 됩니다.</p>
<pre><code class="language-python">my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
#get() 메서드를 통해 'job' 키에 접근하기
print(my_information.get('job', '이 값은 존재하지 않습니다'))
#출력된 결과
#이 값은 존재하지 않습니다
</code></pre>
<p>이제 딕셔너리에 없는 키를 접근하려고 하면 <code>이 값은 존재하지 않습니다</code>라는 메시지가 콘솔에 출력됩니다.</p>
<h2 id="modify">딕셔너리 수정하기</h2>
<p>딕셔너리는 "mutable," 즉, 수정 가능한 데이터 타입이기 때문에 내용을 변경할 수 있습니다.</p>
<p>프로그램이 실행되는 동안에도 딕셔너리는 규모가 커질 수도, 축소할 수도 있고, 새 항목이 추가되거나, 기존 항목이 새 값으로 수정되거나, 삭제될 수도 있습니다.</p>
<h3 id="add">딕셔너리에 새 키-값 추가하기</h3>
<p>딕셔너리에 키-값 쌍을 추가하려면 대괄호 표기법을 사용합니다.</p>
<p>새 키-값을 추가하는 기본 문법은 다음과 같습니다.</p>
<pre><code class="language-python">dictionary_name[key] = value
</code></pre>
<p>먼저 새 키-값을 추가하고 싶은 딕셔너리의 이름을 지정합니다. 그런 다음 대괄호 안에 추가하고 싶은 키의 이름을 넣고, 키에 값을 할당합니다.</p>
<p>빈 딕셔너리로 시작한다고 가정해봅시다.</p>
<pre><code class="language-python">my_dictionary = {}
print(my_dictionary)
#출력된 결과
#{}
</code></pre>
<p>이제 <code>my_dictionary</code> 딕셔너리에 키-값을 추가해보겠습니다.</p>
<pre><code class="language-python">my_dictionary = {}
#빈 딕셔너리에 키-값 추가하기
my_dictionary['name'] = "Boyeon Ihn"
#딕셔너리 출력하기
print(my_list)
#출력된 결과
#{'name': 'Boyeon Ihn'}
</code></pre>
<p>다른 새 키-값을 추가하려면 대괄호 표기법을 동일하게 사용하면 됩니다.</p>
<pre><code class="language-python">my_dictionary = {}
#빈 딕셔너리에 키-값 추가하기
my_dictionary['name'] = "Boyeon Ihn"
#키-값 또 추가하기
my_dictionary['age'] = 29
#딕셔너리 출력하기
print(my_dictionary)
#출력된 결과
#{'name': 'Boyeon Ihn', 'age': 29}
</code></pre>
<p>추가하려는 키가 해당 사전에 이미 있고 다른 값을 할당하는 경우, 기존에 있는 키의 값만 업데이트될 뿐, 새 키-값이 추가되지 않습니다.</p>
<p>키는 고유해야 한다는 점, 꼭 명심하시길 바랍니다.</p>
<pre><code class="language-python">my_dictionary = {'name': 'Boyeon Ihn', 'age': 29}
print(my_dictionary)
#'age' 키를 새로 생성하고 값을 할당하려고 시도해봅니다
#하지만 'age' 키는 이미 딕셔너리에 존재한 상황입니다.
my_dictionary['age'] = 46
#이런 경우, 존재하고 있는 'age'의 값이 29에서 46로 업데이트 될 뿐, 새 키-값이 추가되지 않습니다
print(my_dictionary)
#출력된 결과
#{'name': 'Boyeon Ihn', 'age': 29}
#{'name': 'Boyeon Ihn', 'age': 46}
</code></pre>
<p>실수로 이미 존재하는 키에 할당된 값을 변경하지 않으려면, 추가하려는 키가 딕셔너리에 이미 있는지 확인하는 게 좋습니다.</p>
<p>이전 섹션에 설명한대로 <code>in</code> 키워드를 이때 유용하게 사용할 수 있습니다.</p>
<pre><code class="language-python">my_dictionary = {'name': 'Boyeon Ihn', 'age': 29}
#'age' 키를 추가하려고 합니다. 추가하기 전에, 'age' 키가 이미 있는지 확인해봅시다.
print('age' in my_dictionary)
#출력된 결과
#True
</code></pre>
<h3 id="update">딕셔너리의 기존 키-값 수정하기</h3>
<p>딕셔너리의 키-값 요소를 업데이트 및 수정하는 방법은 딕셔너리에 키-값을 새로 추가하는 방법과 유사합니다.</p>
<p>기존 키의 값을 수정하는 경우 이전 섹션에서 본 것처럼 다음과 같은 기본 문법을 사용합니다.</p>
<pre><code class="language-python">dictionary_name[existing_key] = new_value
my_dictionary = {'name': 'Boyeon Ihn', 'age': 29}
my_dictionary['age'] = 46
print(my_dictionary)
#출력된 결과
#{'name': 'Boyeon Ihn', 'age': 29}
</code></pre>
<p>딕셔너리의 내용을 수정하려면 <code>update()</code> 내장 메서드를 사용해도 됩니다.</p>
<p>이 메서드는 딕셔너리에서 두 개 이상의 키-값을 동시에 업데이트하려는 경우 특히 유용합니다.</p>
<p>my_dictionary에서 <code>name</code>과 <code>age</code> 키의 값을 수정하고 새 키 <code>occupation</code>을 추가한다고 가정합시다.</p>
<pre><code class="language-python">my_dictionary = {'name': 'Boyeon Ihn', 'age': 29}
my_dictionary.update(name= 'Mike Green', age = 46, occupation = "software developer")
print(my_dictionary)
#출력된 결과
#{'name': 'Mike Green', 'age': 46, 'occupation': 'software developer'}
</code></pre>
<p><code>update()</code> 메서드는 키-값의 튜플을 인수로 전달 받습니다.</p>
<p>딕셔너리에 이미 존재하는 키는 새 값이 할당되었고, 새 키-값이 추가되었습니다.</p>
<p><code>update()</code> 메서드는 한 딕셔너리의 내용을 다른 딕셔너리에 추가하려는 경우에도 유용합니다.</p>
<p><code>numbers</code> 딕셔너리가 있고, <code>more_numbers</code>라는 또 다른 딕셔너리가 있다고 가정해봅시다.</p>
<p><code>more_numbers</code>내의 내용물을 <code>numbers</code>와 병합하려면 <code>update()</code> 메서드를 사용해야 합니다.</p>
<p><code>more_numbers</code>에 포함된 모든 키-값은 <code>numbers</code> 딕셔너리의 끝에 추가됩니다.</p>
<pre><code class="language-python">numbers = {'one': 1, 'two': 2, 'three': 3}
more_numbers = {'four': 4, 'five': 5, 'six': 6}
#'numbers' 딕셔너리 업데이트하기
#`more_numbers' 딕셔너리의 요소들을 기존 딕셔너리에 추가합니다
numbers.update(more_numbers)
print(numbers)
#출력된 결과
#{'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6}
</code></pre>
<h3 id="delete">딕셔너리의 키-값 삭제하기</h3>
<p>딕셔너리에서 특정 키 및 관련 값을 삭제하는 방법 중 하나는 <code>del</code> 키워드를 사용하는 것입니다.</p>
<p>키-값을 삭제하는 기본 문법은 다음과 같습니다.</p>
<pre><code class="language-python">del dictionary_name[key]
</code></pre>
<p>다음 예시를 통해 <code>my_information dictionary</code> 딕셔너리에서 <code>location</code> 키를 삭제해보겠습니다.</p>
<pre><code class="language-python">my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
del my_information['location']
print(my_information)
#출력된 결과
#{'name': 'Boyeon', 'age': 29}
</code></pre>
<p><code>del</code> 키워드를 사용하면 키와 값 둘 다 삭제된다는 것을 확인하셨나요? 키를 삭제하고 같이 제거되는 값을 따로 저장하려면 <code>pop()</code> 내장 메서드를 사용합니다.</p>
<p><code>pop()</code> 메서드는 지정한 키를 제거하지만 할당된 값을 반환합니다. 나중에 사용하거나 접근할 수 있도록 제거된 값을 변수에 저장할 수 있습니다.</p>
<p><code>pop()</code> 메서드를 사용하는 기본 문법은 다음과 같습니다. 함수에 삭제하려는 키를 인수로 전달해야 한다는 것을 확인할 수 있습니다.</p>
<pre><code class="language-python">dictionary_name.pop(key)
</code></pre>
<p>위 예시처럼 <code>location</code> 키를 삭제를 하지만, 동시에 키에 할당된 값은 따로 저장하고 싶다면 다음과 같이 <code>pop()</code> 메서드를 사용하면 됩니다.</p>
<pre><code class="language-python">my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
city = my_information.pop('location')
print(my_information)
print(city)
#출력된 결과
#{'name': 'Boyeon', 'age': 29}
#Seoul
</code></pre>
<p><code>pop()</code> 메서드에 딕셔너리에 존재하지 않는 키를 인수로 전달한다면, <code>KeyError</code> 오류 메시지가 나타납니다.</p>
<pre><code class="language-python">my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
my_information.pop('occupation')
print(my_information)
#출력된 결과
#line 3, in &lt;module&gt;
#   my_information.pop('occupation')
#KeyError: 'occupation'
</code></pre>
<p><code>KeyError</code> 오류를 방지하는 방법은 <code>pop()</code> 메서드에 두 번째 인수를 전달하는 것입니다.</p>
<p>두 번째 인수를 전달하면 위의 오류는 발생하지 않습니다. 대신, 첫 번째 인수로 전달된 키가 딕셔너리에 존재하지 않으면 <code>pop()</code>는 silent fail(조용한 에러)만 발생할 뿐 딕셔너리 자체는 바뀌지 않습니다.</p>
<pre><code class="language-python">my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
my_information.pop('occupation','Not found')
print(my_information)
#출력된 결과
#{'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
</code></pre>
<p><code>pop()</code> 메서드는 특정 키와 관련 값을 제거합니다. 하지만 딕셔너리의 마지막 키-값만 삭제하려면 어떻게 해야 할까요?</p>
<p>이런 경우 내장 메서드인 <code>popitem()</code>을 사용하세요.</p>
<p>다음 코드가 <code>popitem()</code>의 기본 문법입니다.</p>
<pre><code class="language-python">dictionary_name.popitem()
</code></pre>
<p><code>popitem()</code> 메서드는 인수를 사용하지 않고 딕셔너리의 마지막 키-값이 제거된 딕셔너리를 반환합니다.</p>
<pre><code class="language-python">my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
popped_item = my_information.popitem()
print(my_information)
print(popped_item)
#출력된 결과
#{'name': 'Boyeon', 'age': 29}
#('location', 'Seoul')
</code></pre>
<p>마지막으로, 딕셔너리에 포함된 모든 키-값을 삭제하려면 <code>clear()</code> 내장 메서드를 사용할 수 있습니다.</p>
<pre><code class="language-python">my_information = {'name': 'Boyeon', 'age': 29, 'location': 'Seoul'}
my_information.clear()
print(my_information)
#출력된 결과
#{}
</code></pre>
<p>이 메서드를 사용하면 기존 딕셔너리가 비어지는 것을 확인할 수 있습니다.</p>
<h2 id="">마치며</h2>
<p>이렇게 딕셔너리 자료형과 자주 사용하는 메서드에 대해 배워봤습니다. 긴 글을 읽느라 수고하셨습니다!</p>
<p>이 기사가 도움이 되었길 바랍니다.</p>
<p>Python에 대해 더 배워보고 싶다면 freeCodeCamp의 <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/">Python 수료증 과정</a>을 확인해보세요. 수료증 강의를 통해 초보자여도 Python을 재미있고 유익하게 배우면서 5개의 프로젝트를 해보며 배운 것을 열심히 실습할 수 있을 거에요.</p>
<p>읽어주셔서 감사합니다. Happy coding!</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 자바스크립트에서 `.splice()` 배열 메서드 사용하기 ]]>
                </title>
                <description>
                    <![CDATA[ 자바스크립트의 splice() 메서드는 배열 객체에 사용할 수 있는 내장 메서드입니다. 이는 기존 요소를 삭제하거나 교체하여 배열의 내용을 변경하며, 제거된 요소가 담긴 별도의 배열을 새로 반환합니다. 이 기사에서는 splice() 메서드를 사용하여 배열 요소를 삭제, 추가, 또는 교체하는 방법에 대해 설명하겠습니다. 먼저 배열의 요소를 삭제하는 방법부터 살펴봅시다. splice() 메서드로 배열 요소 삭제하기 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/javascript-splice-method/</link>
                <guid isPermaLink="false">63e3b17f9b0e65067a8f24d0</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Mon, 13 Feb 2023 05:34:28 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2023/02/javascript-splice-method.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/javascript-splice-how-to-use-the-splice-js-array-method/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Splice – How to Use the .splice() JS Array Method</a>
      </p><!--kg-card-begin: markdown--><h3 id="splice">자바스크립트의 <code>splice()</code> 메서드는 배열 객체에 사용할 수 있는 내장 메서드입니다. 이는 기존 요소를 삭제하거나 교체하여 배열의 내용을 변경하며, 제거된 요소가 담긴 별도의 배열을 새로 반환합니다.</h3>
<p>이 기사에서는 <code>splice()</code> 메서드를 사용하여 배열 요소를 삭제, 추가, 또는 교체하는 방법에 대해 설명하겠습니다. 먼저 배열의 요소를 삭제하는 방법부터 살펴봅시다.</p>
<h2 id="splice"><code>splice()</code> 메서드로 배열 요소 삭제하기</h2>
<p>다음과 같은 내용이 담긴 <code>months</code>라는 배열이 있다고 가정해보겠습니다. 배열 이름은 달, 월을 뜻하는 <code>months</code>지만 요일이 배열에 섞여있는 것을 확인할 수 있습니다.</p>
<pre><code class="language-js">// 월과 요일명이 혼합된 배열
let months = ["January", "February", "Monday", "Tuesday"];
</code></pre>
<p><code>splice()</code> 메서드를 사용하여 <code>months</code> 메서드에서 요일 이름을 제거하는 동시에 요일만 포함된 새 배열을 만들 수 있습니다. 이렇게 말이죠.</p>
<pre><code class="language-js">// 요일이 담긴 배열 생성하기 
let months = ["January", "February", "Monday", "Tuesday"];
let days = months.splice(2); // 인덱스 2부터 배열 변경

console.log(days); // ["Monday", "Tuesday"]
</code></pre>
<p><code>splice()</code> 메서드를 사용할 때는 <code>start</code> 매개변수에 꼭 값을 전달해야 하는데, 이 매개변수는 배열의 변경을 시작할 인덱스를 지정합니다. 위의 예시에서 인수로 전달된 <code>2</code>는 <code>splice()</code> 메서드가 인덱스 <code>2</code>에서부터 요소를 제거하기 시작할 것이라는 뜻입니다.</p>
<p><code>deleteCount</code>라는 두 번째 매개변수에 값을 전달하면 배열에서 제거할 요소의 수를 지정할 수도 있습니다. 예를 들어, 하나의 요소만 제거하기 위해 다음과 같이 숫자 <code>1</code>을 두 번째 인수로 전달할 수 있습니다. (역주: 영어 원문 기사에서는 이 매개변수를 <code>removeCount</code>라고 표기했지만, 가장 최근 업데이트된 <a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice">MDN Web Docs</a> 설명서에 따라 <code>splice()</code>의 두 번째 매개변수를 <code>deleteCount</code>라고 지칭하겠습니다.)</p>
<pre><code class="language-js">let months = ["January", "February", "Monday", "Tuesday"];
let days = months.splice(2, 1); // 요소 하나만 삭제

console.log(days); // ["Monday"]
console.log(months); // ["January", "February", "Tuesday"]
</code></pre>
<p><code>deleteCount</code> 매개변수를 생략하면 <code>splice()</code>는 지정된 <code>start</code> 인덱스부터 배열의 끝까지의 모든 요소를 제거합니다.</p>
<h2 id="splice"><code>splice()</code>를 사용해 배열 요소 제거하고 새로 추가하기</h2>
<p><code>splice()</code> 메서드로 요소를 삭제하는 동시에 바로 새 요소를 추가할 수도 있습니다. <code>deleteCount</code> 매개변수 뒤에 배열에 추가할 요소를 전달하기만 하면 됩니다.</p>
<p>필수 매개변수와 선택적 매개변수를 모두 전달하는 경우의 문법은 다음과 같습니다.</p>
<pre><code class="language-js">// 필수 매개변수와 선택적 매개변수가 포함된 splice() 문법 
Array.splice(start, deleteCount, newItem, newItem, newItem, ...)
</code></pre>
<p>다음 예시에서는 <code>months</code> 배열에 "March"와 "April"을 추가하면서 "Monday"와 "Tuesday"를 제거하는 방법을 보여줍니다.</p>
<pre><code class="language-js">let months = ["January", "February", "Monday", "Tuesday"];
let days = months.splice(2, 2, "March", "April"); // 요소 두 개를 제외하고, 다른 요소를 추가

console.log(days); // ["Monday", "Tuesday"]
console.log(months); // ["January", "February", "March", "April"]
</code></pre>
<h2 id="">요소를 제거하지 않고 새 배열 요소 추가하기</h2>
<p>마지막으로 숫자 <code>0</code>을 <code>deleteCount</code> 매개변수에 전달하여 기존 요소를 삭제하지 않고도 새 요소를 추가할 수 있습니다. 요소가 제거되지 않을 경우 빈 배열이 반환되며, 경우에 따라 반환된 빈 배열을 변수에 저장해서 사용할 수 있습니다.</p>
<p>다음 예시에서는 기존 요소를 삭제하지 않고 "February" 요소 옆에 새 요소 "March"를 추가하는 것을 보여줍니다. 앞서 언급한 것처럼 반환되는 값이 빈 배열이므로 이를 별도로 저장하지 않아도 됩니다.</p>
<pre><code class="language-js">let months = ["January", "February", "Monday", "Tuesday"];
months.splice(2, 0, "March"); // 두 번째 매개변수가 0이므로 기존 요소 모두 유지

console.log(months); 
// ["January", "February", "March", "Monday", "Tuesday"]
</code></pre>
<h2 id="">마치며</h2>
<p>이렇게 <code>splice()</code> 메서드의 사용법을 배웠습니다. 수고하셨어요!</p>
<p>이 기사에서 소개된 내용 중 핵심적인 두 가지를 정리해볼까요?</p>
<ol>
<li>우선, <code>splice()</code> 메서드는 배열의 요소를 삭제하거나 새로 추가할 때 가장 자주 사용됩니다. 경우에 따라 언급된 예시처럼 요소가 섞인 배열을 분리할 때도 <code>splice()</code>를 사용할 수 있습니다.</li>
<li>또한 이 메서드는 제거된 요소가 담긴 새 배열을 반환하며, 반환된 배열을 자유롭게 변수에 할당할 수 있습니다. 배열에서 <code>0</code>개의 요소를 제거하면 <code>splice()</code>는 빈 배열을 반환하는데, 이런 경우에는 별도로 변수에 저장하지 않아도 됩니다.</li>
</ol>
<h2 id="">이 기사를 읽어주셔서 감사합니다!</h2>
<p>자바스크립트에 대해 더 알고 싶다면 <a href="https://sebhastian.com/javascript-tutorials/">제 사이트</a>를 방문해주세요. 문자열 조작, 날짜 조작, 배열 및 객체 메서드, 알고리즘 문제 해설 등 제가 자바스크립트 프로그래밍과 관련해 작성한 100개 이상의 기사를 확인하실 수 있습니다.</p>
<p>꼭 한 번 <a href="https://sebhastian.com/">확인해보세요</a>, 감사합니다! 😉</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 자바스크립트에서 toString 메서드로 숫자를 문자열로 변환하는 방법 ]]>
                </title>
                <description>
                    <![CDATA[ toString() 메서드는 임의의 숫자형(number) 값을 문자열(string)로 변환하는 자바스크립트 Number 객체의 내장 메서드입니다. 자바스크립트에서 toString() 메서드 사용하기 toString() 메서드를 사용하려면 숫자형 값으로 메서드를 호출하기만 하면 됩니다. 다음 예시에서는 숫자형 24를 문자열로 변환하는 방법을 보여줍니다. 콘솔에 출력된 str 변수의 값이 문자열이기 때문에 큰 따옴표로 표시된 것을 확인할 수 있습니다. // `toString()` 메서드를 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/javascript-number-to-string/</link>
                <guid isPermaLink="false">63e3b1249b0e65067a8f24c0</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Mon, 13 Feb 2023 05:33:30 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2023/02/javascript-number-to-string.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/javascript-number-to-string-how-to-use-tostring-to-convert-an-int-into-a-string/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Number to String – How to Use toString to Convert an Int into a String</a>
      </p><!--kg-card-begin: markdown--><h3 id="tostringnumberstringnumber"><code>toString()</code> 메서드는 임의의 숫자형(<code>number</code>) 값을 문자열(<code>string</code>)로 변환하는 자바스크립트 <code>Number</code> 객체의 내장 메서드입니다.</h3>
<h2 id="tostring">자바스크립트에서 <code>toString()</code> 메서드 사용하기</h2>
<p><code>toString()</code> 메서드를 사용하려면 숫자형 값으로 메서드를 호출하기만 하면 됩니다. 다음 예시에서는 숫자형 <code>24</code>를 문자열로 변환하는 방법을 보여줍니다. 콘솔에 출력된 <code>str</code> 변수의 값이 문자열이기 때문에 큰 따옴표로 표시된 것을 확인할 수 있습니다.</p>
<pre><code class="language-js">// `toString()` 메서드를 사용해 숫자형에서 문자열로 변환하기
var num = 24;
var str = num.toString();

console.log(num); // 24
console.log(str); // "24"
</code></pre>
<p><code>toString()</code> 메서드를 숫자형인 값에 즉시 호출할 수 있지만, 값을 괄호 <code>()</code>안에 표시해야합니다. 괄호를 생략하면 자바스크립트에서 <code>Invalid or unexpected token</code> 에러가 발생하니 주의하세요.</p>
<p>또한 <code>toString()</code> 메서드는 다음 예시와 같이 부동소수점 숫자와 음수를 변환할 수도 있습니다.</p>
<pre><code class="language-js">// toString 메서드로 다양한 숫자 유형을 문자열로 변환하기
24.toString(); // Error: Invalid or unexpected token
(24).toString(); // "24"
(9.7).toString(); // "9.7"
(-20).toString(); // "-20"
</code></pre>
<p>마지막으로, <code>toString()</code> 메서드에는 <code>radix</code>(기수) 또는 <code>base</code> 매개변수를 전달할 수 있습니다. <code>radix</code> 매개변수는 10진법(base 10)으로 표현된 숫자를 다른 진수로 변환합니다. 단, 변환된 진수의 자료형은 문자열이라는 것을 명심해야 합니다.</p>
<p>변환 가능한 진법은 다음을 포함합니다.</p>
<ul>
<li>두 개의 숫자(0과 1)만을 사용하는 이진법(binary system, base 2)</li>
<li>세 개의 숫자(0, 1, 2)를 사용하는 삼진법(ternary system, base 3)</li>
<li>네 개의 숫자(0, 1, 2, 3)를 사용하는 사진법(quaternary system, base 4)</li>
<li>그리고 0에서 9까지의 숫자와 로마 문자 A에서 Z까지의 조합을 가진 36진법(hexatridecimal system, base 36)까지 변환할 수 있습니다.</li>
</ul>
<pre><code class="language-js">// radix 매개변수를 전달하는 toString() 메서드 기본 문법
Number.toString(radix);
</code></pre>
<p><code>radix</code> 매개변수는 값이 최소 2부터 36까지인 숫자형일 수 있습니다. 다음은 10진수 5를 2진수(base 2)로 변환하는 예시입니다.</p>
<pre><code class="language-js">// toString() 메서드를 사용해 10진수를 2진수로 변환하기 
var str = (5).toString(2);

console.log(str); // "101"
</code></pre>
<p>위 코드의 10진수 <code>5</code>는 <code>101</code>에 해당하는 이진수로 변환된 다음 문자열로 최종 변환됩니다.</p>
<h2 id="tostring"><code>toString()</code> 메서드를 다른 자료형과 함께 사용하기</h2>
<p><code>toString()</code> 메서드는 숫자 자료형을 변환하는 것 외에도 다른 자료형을 문자열로 변환할 때 사용할 수 있습니다.</p>
<p>예를 들어 다음과 같이 배열(array)를 문자열로 변환할 수 있습니다.</p>
<pre><code class="language-js">// toString() 메서드로 배열을 문자열로 변환하기 
var arr = [ "Nathan", "Jack" ];
var str = arr.toString();

console.log(str); // "Nathan,Jack"
</code></pre>
<p>이번에는 논리타입 불린(boolean)형을 문자열로 변환해봅시다.</p>
<pre><code class="language-js">var bool = true;
var str = bool.toString();

console.log(str); // "true"
</code></pre>
<p>하지만 일반적으로 <code>toString()</code> 메서드는 다른 자료형을 변환하기보단 숫자형을 문자열로 변환하는데 가장 자주 사용되리라 생각합니다. 저도 보통 그런 용도로 이 메서드를 사용합니다. :)</p>
<h2 id="">이 기사를 읽어주셔서 감사합니다!</h2>
<p>관심이 있으시다면 제가 쓴 <a href="https://sebhastian.com/javascript-tofixed/">Rounding Numbers with toFixed() method(영문 기사: toFixed() 메서드로 숫자 반올림하기)</a> 그리고 <a href="https://sebhastian.com/javascript-absolute-value-math-abs/">Calculating Absolute Value with Math.abs() method(영문 기사: Math.abs() 메서드로 숫자의 절대값 계산하기)</a>와 같은 기사를 한 번 읽어보시길 바랍니다. 이 두 기사는 가장 자주 받는 JavaScript 관련 질문 중 두 가지에 대한 내용입니다.</p>
<p>또한 웹 개발 튜토리얼(대부분 자바스크립트 관련)에 대한 <a href="https://sebhastian.com/newsletter/">무료 뉴스레터</a>도 발행합니다.</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git에서 로컬의 작업 내용을 임시 저장하기 ]]>
                </title>
                <description>
                    <![CDATA[ Git에는 저장소에 커밋하지 않고 작업한 내용의 스냅샷을 임시 저장할 수 있는 stash라는 영역이 있습니다. Stash 영역은 Git 사용자가 흔히 알고 있는 워킹 트리(Working Tree/Working Directory), 스테이징 영역(staging area), 또는 저장소(repository)와는 별개입니다. 이 기능은 해당 브랜치에 커밋할 준비가 되지 않은 변경 사항을 작업한 상태에서 다른 브랜치로 전환해야 할 때 유용합니다. (Stash는 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/git-stash-explained/</link>
                <guid isPermaLink="false">639317f0387939063fcf5478</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Sun, 11 Dec 2022 13:49:01 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/12/5f9c9d6f740569d1a4ca37bf.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/git-stash-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Git Stash Explained: How to Temporarily Store Local Changes in Git</a>
      </p><!--kg-card-begin: markdown--><h3 id="gitstashstashgitworkingtreeworkingdirectorystagingarearepository">Git에는 저장소에 커밋하지 않고 작업한 내용의 스냅샷을 임시 저장할 수 있는 stash라는 영역이 있습니다. Stash 영역은 Git 사용자가 흔히 알고 있는 워킹 트리(Working Tree/Working Directory), 스테이징 영역(staging area), 또는 저장소(repository)와는 별개입니다.</h3>
<p>이 기능은 해당 브랜치에 커밋할 준비가 되지 않은 변경 사항을 작업한 상태에서 다른 브랜치로 전환해야 할 때 유용합니다. (Stash는 영어로 안전한 곳에 무언가를 넣어두거나 숨긴다는 의미입니다. --옮긴이).</p>
<h3 id="stash">작업한 내용을 stash(임시 저장) 하기</h3>
<p>변경 사항을 stash 영역에 저장하려면 다음과 같은 명령어를 실행합니다.</p>
<pre><code class="language-bash">git stash save "&lt;사용자 옵션(optional message)&gt;"
</code></pre>
<p>이 명령어를 실행하면 작업한 내용이 임시 저장되고, 워킹 트리가 최신 커밋이 적용된 시점으로 되돌아갑니다. Stash된 변경 사항은 해당 저장소의 모든 브랜치에서 접근할 수 있습니다.</p>
<p>여기서 중요한 점 한 가지는 저장할 변경 사항은 <code>tracked file</code>(즉, Git 저장소에서 변경 사항을 추적하고 있는 상태의 파일 --옮긴이)에 있어야 한다는 사실입니다. 새 파일을 만든 후 변경 사항을 stash하려고 하면 저장할 로컬 변경 사항이 없다는 의미의 <code>(No local changes to save)</code>에러가 발생할 수 있습니다.</p>
<p>(<code>git stash --include-untracked</code>라는 명령어를 실행하면 <code>untracked file</code>도 stash가 가능합니다. --옮긴이)</p>
<h3 id="stash">Stash한 변경 사항 확인하기</h3>
<p>Stash 영역에 무엇이 있는지 확인하려면 다음 명령어를 실행합니다.</p>
<pre><code class="language-bash">git stash list
</code></pre>
<p>명령어가 실행되면 임시 저장된 스냅샷의 목록을 <code>stash@{0}: On &lt;stash한 내용이 담긴 브랜치 이름: 사용자 선택 메시지&gt;</code>형식으로 반환합니다. <code>stash@{0}</code>부분은 해당 stash의 이름이고, 중괄호(<code>{ }</code>) 안의 숫자는 해당 stash의 인덱스입니다. Stash 영역에 여러 개의 변경 사항을 저장한 경우 각 임시 저장의 인덱스가 다릅니다.</p>
<p>Stash 영역에 어떤 내용이 임시 저장되었는지 잊어버린 경우에는 <code>git stash show &lt;STASH 이름&gt;</code>로 요약을 확인할 수 있습니다. 일반적인 diff-style의 패치 레이아웃(라인별 변경 사항을 <code>+</code>와 <code>-</code>기호로 표시된)으로 변경 사항을 확인하고 싶다면, 명령어에 패치라는 의미의 <code>-p</code> 플래그를 포함하면 됩니다. 예시를 확인해보시죠.</p>
<pre><code class="language-diff">git stash show -p stash@{0}

# 예시 결과물:
diff --git a/PathToFile/fileA b/PathToFile/fileA
index 2417dd9..b2c9092 100644
--- a/PathToFile/fileA
+++ b/PathToFile/fileA
@@ -1,4 +1,4 @@
-현재 브랜치에 보이는 내용 
+stash된 변경 사항이 반영된 내용
</code></pre>
<h3 id="stashed">Stashed된 내용을 불러오기</h3>
<p>Stashed된 내용을 불러오고 현재 체크아웃된 브랜치에 적용하려면 두 가지 방법이 있습니다.</p>
<ol>
<li><code>git stash apply &lt;STASH-이름&gt;</code>명령어는 변경 사항을 적용하고 해당 내용의 복사본을 stash 영역에 남깁니다.</li>
<li><code>git stash pop &lt;STASH-이름&gt;</code>명령어는 변경 사항을 적용하고 적용된 파일을 stash 영역에서 삭제합니다.</li>
</ol>
<p>변경 사항을 적용할 때 충돌이 발생할 수 있습니다. 이때 병합 충돌(merge conflict)과 유사한 방법으로 충돌을 해결할 수 있습니다(<a href="https://www.freecodecamp.org/news/the-ultimate-guide-to-git-merge-and-git-rebase/"><code>git merge</code>에 관한 아티클을 확인해보세요</a>).</p>
<h3 id="stash">Stash된 작업 내용 삭제하기</h3>
<p>Stash된 내용을 브랜치에 적용하지 않은 상태에서 삭제하려면 다음 명령어를 실행합니다.</p>
<pre><code class="language-bash">git stash drop &lt;STASH-이름&gt;
</code></pre>
<p>Stash 영역에 있는 모든 내용을 삭제하려면 다음과 같은 명령어를 실행합니다.</p>
<pre><code class="language-bash">git stash clear
</code></pre>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript를 사용해 JSON 객체 구문분석(Parse)하기 ]]>
                </title>
                <description>
                    <![CDATA[ JSON(JavaScript Object Notation의 약자)은 어디를 가든 흔히 접할 수 있는 파일 형식입니다. 웹 애플리케이션을 사용해 본 적이 있다면 JSON을 사용해 서버와 기기 간에 데이터를 구축, 저장 및 전송과 같은 작업을 해봤을 가능성이 높습니다. 이 기사에서는 JSON과 JavaScript의 차이점을 간략하게 설명한 다음 브라우저와 Node.js 프로젝트에서 JavaScript를 사용해 JSON을 구문분석(parsing)하는 다양한 방법을 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/javascript-json-parse/</link>
                <guid isPermaLink="false">63882d7037582306394d7ca6</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Wed, 07 Dec 2022 07:14:12 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/12/602358380a2838549dcc2554.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/json-stringify-example-how-to-parse-a-json-object-with-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JSON Stringify Example – How to Parse a JSON Object with JS</a>
      </p><!--kg-card-begin: markdown--><h3 id="jsonjavascriptobjectnotationjson">JSON(JavaScript Object Notation의 약자)은 어디를 가든 흔히 접할 수 있는 파일 형식입니다. 웹 애플리케이션을 사용해 본 적이 있다면 JSON을 사용해 서버와 기기 간에 데이터를 구축, 저장 및 전송과 같은 작업을 해봤을 가능성이 높습니다.</h3>
<p>이 기사에서는 JSON과 JavaScript의 차이점을 간략하게 설명한 다음 브라우저와 Node.js 프로젝트에서 JavaScript를 사용해 JSON을 구문분석(parsing)하는 다양한 방법을 살펴보겠습니다.</p>
<h2 id="jsonjavascript">JSON과 JavaScript의 차이</h2>
<p>JSON은 일반 JavaScript처럼 보이지만 JSON을 텍스트 파일과 유사한 데이터 형식으로 이해하는 것이 좋습니다. JSON이 JavaScript와 매우 비슷해 보이는 이유는 JSON은 JavaScript 문법에서 영감을 받아 만들어졌기 때문입니다.</p>
<p>JSON 객체와 JSON 배열의 예시를 본 후 JavaScript 객체와 비교해보겠습니다.</p>
<h3 id="jsonjavascriptobjectliteral">JSON 객체와 JavaScript 객체 리터럴(object literal)</h3>
<p>우선 JSON 객체 문법을 보여드리겠습니다.</p>
<pre><code class="language-json">{
  "name": "Jane Doe",
  "favorite-game": "Stardew Valley", 
  "subscriber": false
}
</code></pre>
<figcaption>jane-profile.json</figcaption>
<p>JSON 객체와 일반 JavaScript 객체(객체 리터럴이라고도 합니다)의 주요 차이점은 따옴표입니다. JSON 객체의 모든 키(key)와 문자열 유형 값은 큰따옴표(<code>"</code>)로 감싸야 합니다.</p>
<p>반면 JavaScript 객체 리터럴은 조금 더 유연합니다. 객체 리터럴을 사용하면 키와 문자열을 큰따옴표로 묶을 필요가 없습니다. 키에 작은따옴표(<code>'</code>)를 사용하거나 따옴표 자체를 생략해도 됩니다.</p>
<p>위에 코드를 JavaScript 객체 리터럴 문법으로 변환해본다면 다음과 같습니다.</p>
<pre><code class="language-js">const profile = {
  name: 'Jane Doe',
  'favorite-game': 'Stardew Valley',
  subscriber: false
}
</code></pre>
<p>위의 예시에서는 <code>'favorite-game'</code> 키가 작은따옴표로 묶인 것을 확인할 수 있습니다. 객체 리터럴 문법에서는 대시(<code>-</code>)로 구분된 키는 따옴표로 감싸야 하기 때문입니다.</p>
<p>따옴표를 사용하지 않으려면 키를 카멜 표기법(camel case)인 <code>favoriteGames</code> 또는 언더바 표기법(underscore case)인 <code>favorite_game</code>으로 수정하면 됩니다.</p>
<h3 id="jsonjavascript">JSON 배열과 JavaScript 배열</h3>
<p>JSON 배열은 JavaScript 배열과 거의 같은 방식으로 작동하며 문자열, 불린(boolean), 숫자 및 기타 JSON 개체를 포함할 수 있습니다.</p>
<p>예시:</p>
<pre><code class="language-json">[
  {
    "name": "Jane Doe",
    "favorite-game": "Stardew Valley",
    "subscriber": false
  },
  {
    "name": "John Doe",
    "favorite-game": "Dragon Quest XI",
    "subscriber": true
  }
]
</code></pre>
<figcaption>profiles.json</figcaption>
<p>JavaScript 문법에서는 다음과 같이 표시됩니다.</p>
<pre><code class="language-js">const profiles = [
  {
    name: 'Jane Doe',
    'favorite-game': 'Stardew Valley',
    subscriber: false
  },
  {
    name: 'John Doe',
    'favorite-game': 'Dragon Quest XI',
    subscriber: true
  }
];
</code></pre>
<h2 id="json">JSON은 사실 문자열</h2>
<p>JSON 또한 객체와 배열이 있다면 일반 JavaScript 객체 리터럴이나 배열처럼 프로그램에서 사용할 수 없는지 의문이 들 수도 있습니다.</p>
<p>하지 못하는 이유는 JSON은 사실 문자열에 불과하기 때문입니다.</p>
<p>예를 들어 <code>jane-profile.json</code> 또는 <code>profiles.json</code>과 같은 별도의 파일에 JSON을 작성하면 해당 파일은 JavaScript처럼 보이지만 사실 JSON 객체 또는 JSON 배열 형식의 문자열이 담깁니다.</p>
<p>이때 API에 요청하면 다음과 같은 내용이 반환됩니다.</p>
<pre><code class="language-json">{"name":"Jane Doe","favorite-game":"Stardew Valley","subscriber":false}
</code></pre>
<p>텍스트 파일과 마찬가지로 프로젝트에서 JSON을 사용하려면 해당 파일을 구문분석하거나 프로그래밍 언어가 이해할 수 있는 형식으로 변경해야 합니다. 예를 들어, Python에서 JSON 객체를 구문분석하면 딕셔너리(dictionary)가 생성됩니다.</p>
<p>이러한 이해를 바탕으로 JavaScript에서 JSON을 구문분석하는 다양한 방법을 배워볼까요?</p>
<h2 id="json">브라우저에서 JSON 구문분석하기</h2>
<p>일반적으로 API를 통해 데이터를 수신하거나 보낼 때 브라우저에서 JSON으로 작업하는 경우가 많습니다.</p>
<p>몇 가지 예를 살펴보겠습니다.</p>
<h3 id="fetchjson"><code>fetch</code>를 사용해 JSON 구문분석하기</h3>
<p>API에서 데이터를 가져오는 가장 쉬운 방법은 <code>.json()</code> 메서드를 통해 JSON 응답을 JavaScript 객체 리터럴 또는 배열로 자동으로 구문분석하는 <code>fetch</code>를 사용하는 것입니다.</p>
<p>다음 예시는 무료 <a href="https://api.chucknorris.io/">Chuck Norris Jokes API</a>에서 개발자 관련 유머 데이터에 대한 GET 요청을 하기 위해 <code>fetch</code>를 사용하는 코드입니다.</p>
<pre><code class="language-js">fetch('https://api.chucknorris.io/jokes/random?category=dev')
  .then(res =&gt; res.json()) // .json() 메서드는 JSON 응답을 JavaScript 객체 리터럴로 구문분석합니다.
  .then(data =&gt; console.log(data));
</code></pre>
<p>브라우저에 해당 코드를 실행하면 콘솔에 다음과 같은 내용이 표시됩니다.</p>
<pre><code class="language-js">{
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "elgv2wkvt8ioag6xywykbq",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/elgv2wkvt8ioag6xywykbq",
    "value": "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
}
</code></pre>
<p>해당 내용은 JSON 객체처럼 보이지만 실제로는 JavaScript 객체 리터럴이기 때문에 프로그램에서 자유롭게 사용할 수 있습니다.</p>
<h3 id="jsonstringifyjson"><code>JSON.stringify()</code>로 JSON 문자열로 변환하기</h3>
<p>API로 데이터를 보내고 싶다면 어떻게 해야 할까요?</p>
<p>예를 들어 Chuck Norris Jokes API에 농담 데이터를 보내 다른 사람들이 나중에 읽을 수 있도록 하고 싶다면 말이죠.</p>
<p>먼저 보내고 싶은 농담 데이터를 JavaScript 객체 리터럴로 작성합니다.</p>
<pre><code class="language-js">const newJoke = {
  categories: ['dev'],
  value: "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
};
</code></pre>
<p>그런 다음, API로 데이터를 보내기 위해서는 방금 생성한 농담 객체 리터럴을 JSON 문자열로 변환해야 합니다.</p>
<p>JavaScript에는 이런 작업을 실행하기 위한 매우 유용한 메서드가 포함되어 있습니다 - 바로 <code>JSON.stringify()</code>입니다.</p>
<pre><code class="language-js">const newJoke = {
  categories: ['dev'],
  value: "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
};

console.log(JSON.stringify(newJoke)); // {"categories":["dev"],"value":"Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."}

console.log(typeof JSON.stringify(newJoke)); // string
</code></pre>
<p>이 예시에서 객체 리터럴을 JSON 문자열로 변환하는 것처럼 <code>JSON.stringify()</code>는 배열에서도 똑같이 작동합니다.</p>
<p>마지막으로 JSON 문자열로 변환된 농담 데이터를 POST 요청과 함께 API로 다시 보내면 됩니다.</p>
<p>Chuck Norris Jokes API에는 실제로 이 기능이 없지만, 있다고 가정하면 코드는 다음과 같을 것입니다.</p>
<pre><code class="language-js">const newJoke = {
  categories: ['dev'],
  value: "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
};

fetch('https://api.chucknorris.io/jokes/submit', { // fake API endpoint
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(newJoke), // JavaScript 객체 리터럴을 JSON 문자열로 변환하기
})
  .then(res =&gt; res.json())
  .then(data =&gt; console.log(data))
  .catch(err =&gt; {
    console.error(err);
  });
</code></pre>
<p>이렇게 가져온 JSON을 <code>fetch</code>로 구문분석하고 <code>JSON.stringify()</code>를 사용해 JavaScript 객체 리터럴을 JSON 문자열로 변환했습니다.</p>
<h3 id="json">브라우저에서 로컬 JSON 파일 작업하기</h3>
<p>안타깝게도 브라우저에서 로컬 JSON 파일을 로딩하는 것은 가능하지 않고 권장하지 않습니다.</p>
<p>로컬 파일을 로딩하려고 하면 <code>fetch</code>에서 오류가 발생합니다. 예를 들어 농담 데이터가 포함된 JSON 파일이 있다고 가정해봅시다.</p>
<pre><code class="language-json">[
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "elgv2wkvt8ioag6xywykbq",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/elgv2wkvt8ioag6xywykbq",
    "value": "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
  },
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "ae-78cogr-cb6x9hluwqtw",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/ae-78cogr-cb6x9hluwqtw",
    "value": "There is no Esc key on Chuck Norris' keyboard, because no one escapes Chuck Norris."
  }
]
</code></pre>
<figcaption>jokes.json</figcaption>
<p>이 JSON 파일을 구문분석하고 농담 목록을 간단한 HTML 페이지에 만들고 싶다면 어떻게 해야 할까요?</p>
<p>예시:</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /&gt;
    &lt;meta name="viewport" content="width=device-width" /&gt;
    &lt;title&gt;Fetch Local JSON&lt;/title&gt;
  &lt;/head&gt;
  &lt;script&gt;
    fetch("./jokes.json", { mode: "no-cors" }) // disable CORS because path does not contain http(s)
      .then((res) =&gt; res.json())
      .then((data) =&gt; console.log(data));
  &lt;/script&gt;
&lt;/html&gt;
</code></pre>
<figcaption>index.html</figcaption>
<p>위 예시의 HTML 페이지를 만들고 브라우저에서 여는 경우, 콘솔에는 다음과 같은 메시지가 출력됩니다.</p>
<p><code>Fetch API cannot load file://&lt;path&gt;/jokes.json. URL scheme "file" is not supported</code></p>
<p>기본적으로 브라우저는 보안상의 이유로 로컬 파일에 대한 액세스를 허용하지 않습니다. 이런 제한은 사용자의 보안과 안전을 위한 것이기 때문에 이 기본 동작을 변경하려고 하면 안 됩니다.</p>
<p>대신 로컬 JSON 파일을 JavaScript로 변환하는 것이 가장 좋은 방법입니다. JSON 문법은 JavaScript와 매우 비슷하므로 이런 변환 작업은 어렵지 않습니다.</p>
<p>먼저 새 파일을 만들고 JSON 데이터를 변수로 선언하기만 하면 됩니다. 다음과 같이 말이죠.</p>
<pre><code class="language-js">const jokes = [
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "elgv2wkvt8ioag6xywykbq",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/elgv2wkvt8ioag6xywykbq",
    "value": "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
  },
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "ae-78cogr-cb6x9hluwqtw",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/ae-78cogr-cb6x9hluwqtw",
    "value": "There is no Esc key on Chuck Norris' keyboard, because no one escapes Chuck Norris."
  }
]
</code></pre>
<figcaption>jokes.js</figcaption>
<p>그런 다음 별도의 스크립트로 HTML 페이지에 추가합니다.</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /&gt;
    &lt;meta name="viewport" content="width=device-width" /&gt;
    &lt;title&gt;Fetch Local JSON&lt;/title&gt;
  &lt;/head&gt;
  &lt;script src="jokes.js"&gt;&lt;/script&gt;
  &lt;script&gt;
    console.log(jokes);
  &lt;/script&gt;
&lt;/html&gt;
</code></pre>
<p>이제 코드에서 농담 배열을 자유롭게 사용할 수 있습니다.</p>
<p>JavaScript 모듈을 사용해 같은 작업을 수행할 수도 있지만, 이 기사에서는 모듈 사용에 대한 소개는 생략하겠습니다.</p>
<p>하지만 컴퓨터에 Node.js가 설치된 상태에서 로컬 JSON files로 작업하고 싶다면 어떻게 해야 할까요? 이어서 살펴보겠습니다.</p>
<h2 id="nodejsjson">Node.js에서 JSON 구문분석하기</h2>
<p>Node.js는 브라우저 외부에서 JavaScript를 실행할 수 있는 JavaScript 런타임입니다. Node.js에 대한 소개는 <a href="https://www.freecodecamp.org/news/the-definitive-node-js-handbook-6912378afc6e/">여기(영문 기사)</a>에서 확인할 수 있습니다.</p>
<p>Node.js를 사용하여 컴퓨터에서 로컬로 코드를 실행하든 서버에서 전체 웹 응용 프로그램을 실행하든, 기본적인 Node.js와 JSON 사용법은 알아두는 것이 좋습니다.</p>
<p>다음 예에서는 같은 <code>jokes.json</code> 파일을 사용하겠습니다.</p>
<pre><code class="language-json">[
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "elgv2wkvt8ioag6xywykbq",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/elgv2wkvt8ioag6xywykbq",
    "value": "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
  },
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "ae-78cogr-cb6x9hluwqtw",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/ae-78cogr-cb6x9hluwqtw",
    "value": "There is no Esc key on Chuck Norris' keyboard, because no one escapes Chuck Norris."
  }
]
</code></pre>
<figcaption>jokes.json</figcaption>
<h3 id="requirejson"><code>require()</code>로 JSON 파일 구문분석하기</h3>
<p>가장 쉬운 방법부터 시작해보겠습니다.</p>
<p>로컬 JSON 파일이 있다면 <code>require()</code>를 사용해 다른 Node.js 모듈처럼 로딩하기만 하면 됩니다.</p>
<pre><code class="language-js">const jokes = require('./jokes.json');
</code></pre>
<p>JSON 파일이 자동으로 구문분석되고 프로젝트에 이 파일을 바로 사용할 수 있습니다.</p>
<pre><code class="language-js">const jokes = require('./jokes.json');

console.log(jokes[0].value); // "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
</code></pre>
<p>이 작업은 동기적으로(synchronous) 처리되므로 전체 파일의 구문분석이 완료할 때까지 프로그램이 일시 중지되기 때문에 JSON 파일이 크면 프로그램 속도가 느려질 수 있다는 점을 주의하세요.</p>
<p>또한 JSON을 이 방법으로 구문분석하면 파일 전체가 메모리에 로딩되므로 정적 JSON 파일에만 이 방법을 사용하는 것이 좋습니다. 프로그램이 실행되는 동안 JSON 파일이 변경된다면 해당 프로그램을 다시 시작하고 업데이트된 JSON 파일을 구문분석할 때까지 변경 사항에 접근할 수 없습니다.</p>
<h3 id="fsreadfilesyncjsonparsejson"><code>fs.readFileSync()</code>와 <code>JSON.parse()</code>를 사용해 JSON 파일 구문분석하기</h3>
<p>두 번째 방법은 Node.js 프로젝트에서 JSON 파일을 구문분석하는 더 보편적인 방법입니다. <code>fs</code>(파일 시스템) 모듈로 파일을 읽은 다음 <code>JSON.parse()</code>로 구문분석합니다.</p>
<p><code>fs.readFileSync()</code> 메서드를 사용해 이 작업을 실행하는 방법에 대해 알아보겠습니다. 먼저 프로젝트에 <code>fs</code> 모듈을 추가합니다.</p>
<pre><code class="language-js">const fs = require('fs');
</code></pre>
<p>그런 다음 <code>jokes.json</code> 파일의 출력된 내용을 저장할 새 변수를 만들고 <code>fs.readFileSync()</code> 메서드를 할당합니다.</p>
<pre><code class="language-js">const fs = require('fs');
const jokesFile = fs.readFileSync();
</code></pre>
<p><code>fs.readFileSync()</code> 메서드는 몇 가지 인수를 사용합니다. 첫 번째 인수는 읽을 파일의 경로입니다.</p>
<pre><code class="language-js">const fs = require('fs');
const jokesFile = fs.readFileSync('./jokes.json');
</code></pre>
<p>지금 <code>jokesFile</code>을 콘솔에 출력한다면, 다음과 같은 내용이 표시됩니다.</p>
<pre><code>&lt;Buffer 5b 0a 20 20 7b 0a 20 20 20 20 22 63 61 74 65 67 6f 72 69 65 73 22 3a 20 5b 22 64 65 76 22 5d 2c 0a 20 20 20 20 22 63 72 65 61 74 65 64 5f 61 74 22 3a ... 788 more bytes&gt;
</code></pre>
<p>이런 내용은 <code>fs</code> 모듈이 파일을 읽고 있지만 파일의 인코딩이나 형식을 알지 못한다는 것을 의미합니다. <code>fs</code>은 JSON과 같은 텍스트 기반 파일뿐만 아니라 거의 모든 파일을 로딩하는 데 사용될 수 있으므로 해당 파일이 어떻게 인코딩되는지 알려줘야 합니다.</p>
<p>텍스트 기반 파일의 경우 인코딩은 일반적으로 <code>utf8</code>입니다.</p>
<pre><code class="language-js">const fs = require('fs');
const jokesFile = fs.readFileSync('./jokes.json', 'utf8');
</code></pre>
<p>이제 <code>jokesFile</code>를 콘솔에 출력하면 파일의 내용이 표시됩니다.</p>
<p>하지만 로딩이 완료된 파일은 여전히 문자열입니다. 다른 메서드를 사용해 <code>jokesFile</code>을 JavaScript 객체 또는 배열로 구문분석해야 하는데, 이때 <code>JSON.parse()</code>를 사용하면 됩니다.</p>
<pre><code class="language-js">const fs = require('fs');
const jokesFile = fs.readFileSync('./jokes.json', 'utf8');
const jokes = JSON.parse(jokesFile);

console.log(jokes[0].value); // "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
</code></pre>
<p>메서드 이름에서 알 수 있듯이 <code>JSON.parse()</code>는 JSON 문자열을 사용해 JavaScript 객체 리터럴 또는 배열로 구문분석합니다.</p>
<p>위의 <code>require</code> 메서드와 마찬가지로 <code>fs.readFileSync()</code>는 동기 메서드입니다. 즉, 큰 파일을 처리해야 할 때 프로그램이 느려질 수 있습니다.</p>
<p><code>fs.readFileSync()</code>와 <code>JSON.parse()</code>를 사용해 JSON 파일 구문분석하는 방법 또한 파일을 한 번만 읽고 메모리에 로딩합니다. 파일이 도중에 변경된다면 어느 시점에서 파일을 다시 읽어야 합니다. 파일을 쉽게 다시 읽을 수 있는 간단한 기능을 만드는 것이 좋겠죠. 다음과 같이 말이에요.</p>
<pre><code class="language-js">const fs = require('fs');
const readFile = path =&gt; fs.readFileSync(path, 'utf8');

const jokesFile1 = readFile('./jokes.json');
const jokes1 = JSON.parse(jokesFile1);

console.log(jokes1[0].value); // "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."

// jokes.json 파일이 어느 지점에서 변경됩니다 

const jokesFile2 = readFile('./jokes.json');
const jokes2 = JSON.parse(jokesFile2);

console.log(jokes2[0].value); // "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
</code></pre>
<h3 id="fsreadfilejsonparsejson"><code>fs.readFile()</code>과 <code>JSON.parse()</code>를 사용해 JSON 구문분석하기</h3>
<p><code>fs.readFile()</code> 메서드는 <code>fs.readFileSync()</code>와 매우 비슷하지만, 비동기적으로 작동한다는 중요한 차이점이 있습니다. 읽으려고 하는 파일 크기가 크고 로딩 작업이 진행되는 동안 나머지 코드의 실행이 지연되지 않도록 하려면 <code>fs.readFile()</code>을 매우 유용하게 사용할 수 있습니다.</p>
<p>간단한 예시를 봅시다.</p>
<pre><code class="language-js">const fs = require('fs');

fs.readFile('./jokes.json', 'utf8');
</code></pre>
<p><code>jokesFile</code>과 같은 변수에 메서드를 할당하지 않는다는 점을 제외하면 지금까지 <code>fs.readFileSync()</code>를 사용한 작업과 유사합니다. <code>fs.readFile()</code>은 비동기식이기 때문에 이후의 코드는 파일 읽기가 끝나기 전에 실행됩니다.</p>
<p><code>fs.readFileSync()</code>와 또 다른 점은 바로 <code>fs.readFile()</code>는 JSON 구문분석하는 콜백 함수를 사용해 내부에 있는 JSON을 구문분석한다는 것입니다.</p>
<pre><code class="language-js">const fs = require('fs');

fs.readFile('./jokes.json', 'utf8', (err, data) =&gt; {
  if (err) console.error(err);
  const jokes = JSON.parse(data);

  console.log(jokes[0].value);
});

console.log("이게 먼저 실행됩니다!");
</code></pre>
<p>그러면 콘솔에 다음 내용이 출력됩니다.</p>
<pre><code>이게 먼저 실행됩니다!
Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris.
</code></pre>
<p><code>fs.readFileSync()</code>와 마찬가지로 <code>fs.readFile()</code>도 파일을 메모리에 로딩하므로 파일이 변경되면 다시 읽어야 합니다.</p>
<p>또한 <code>fs.readFile()</code>이 비동기적으로 작동하지만, 작업이 완료되면 읽히는 전체 파일을 메모리로 로딩한다는 점은 <code>fs.readFile()</code>과 같습니다. 대용량 파일이 있는 경우 대신 <a href="https://www.freecodecamp.org/news/node-js-streams-everything-you-need-to-know-c9141306be93/">Node.js 스트림(stream)</a>을 사용하는 것을 추천합니다.</p>
<h3 id="nodejsjsonstringifyjson">Node.js에서 <code>JSON.stringify()</code>를 사용해 JSON 문자열로 변환하기</h3>
<p>마지막으로, Node.js로 JSON을 구문분석하면 API 응답으로 JSON을 반환해야 할 수도 있습니다.</p>
<p>다행히 이 작업은 브라우저와 같은 방식으로 작동합니다. <code>JSON.stringify()</code>를 사용해 JavaScript 객체 리터럴 또는 배열을 JSON 문자열로 변환하면 됩니다.</p>
<pre><code class="language-js">const newJoke = {
  categories: ['dev'],
  value: "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
};

console.log(JSON.stringify(newJoke)); // {"categories":["dev"],"value":"Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."}
</code></pre>
<p>이렇게 지금까지 브라우저 및 Node.js 프로젝트에서 JSON 관련 작업하는 데 필요한 여러 방법에 대해 살펴보았습니다.</p>
<p>이제 나가서 JSON을 마음껏 구문분석하거나 문자열화하세요!</p>
<p>제가 이 기사에서 빠트린 내용이 있거나, 독자분께서 선호하시는 JSON을 구문분석하는 방법이 있다면, <a href="https://twitter.com/kriskoishigawa">트위터를</a> 통해 알려주세요!</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python에서 문자열과 변수 출력하는 방법 ]]>
                </title>
                <description>
                    <![CDATA[ Python은 유연하고 다목적으로 사용할 수 있는 프로그래밍 언어입니다. 보통 한 가지를 프로그래밍하기 위해 다양한 방법으로 작업을 수행할 수 있습니다. 이 튜토리얼에서는 문자열과 변수를 함께 출력할 수 있는 몇 가지 방법을 살펴보겠습니다. 그럼 시작해볼까요? Python에서 print() 함수 사용하기 Python에서 무언가를 출력하려면 print() 함수를 사용합니다. print 키워드 뒤에 괄호 () 한 쌍을 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/python-print-string-variable/</link>
                <guid isPermaLink="false">63858ad437582306394d7c72</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Wed, 07 Dec 2022 07:12:21 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/11/denise-jans-_dXkaD3l574-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/python-print-variable-how-to-print-a-string-and-variable/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Print Variable – How to Print a String and Variable</a>
      </p><!--kg-card-begin: markdown--><h3 id="python">Python은 유연하고 다목적으로 사용할 수 있는 프로그래밍 언어입니다. 보통 한 가지를 프로그래밍하기 위해 다양한 방법으로 작업을 수행할 수 있습니다.</h3>
<p>이 튜토리얼에서는 문자열과 변수를 함께 출력할 수 있는 몇 가지 방법을 살펴보겠습니다.</p>
<p>그럼 시작해볼까요?</p>
<h2 id="pythonprint">Python에서 <code>print()</code> 함수 사용하기</h2>
<p>Python에서 무언가를 출력하려면 <code>print()</code> 함수를 사용합니다. <code>print</code> 키워드 뒤에 괄호 <code>()</code> 한 쌍을 붙입니다.</p>
<pre><code class="language-python">#문자열 출력하는 방법
print("Hello world")

#정수 출력하는 방법 
print(7)

#변수 출력하는 방법 
#변수 자체를 출력하려면 변수 이름만 표기합니다 

fave_language = "Python"
print(fave_language)

#출력된 값

#Hello world
#7
#Python
</code></pre>
<p>괄호를 생략하면 오류가 발생합니다.</p>
<pre><code class="language-python">print "hello world"

#코드 실행 후 출력된 값:
#File "/Users/dionysialemonaki/python_articles/demo.py", line 1
#    print "hello world"
#    ^^^^^^^^^^^^^^^^^^^
#SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
</code></pre>
<p>Visual Studio Code에서 <a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python">Python 확장 프로그램</a>을 다운로드 받고 Python 코드를 작성하면, 잘못된 코드에 밑줄과 힌트가 표시되어 오류가 발생했다는 것을 알 수 있습니다.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2021/12/Screenshot-2021-12-07-at-3.08.14-PM.png" alt="오류가 발생해서 코드가 밑줄이 그어져있고 힌트가 표시됩니다" width="600" height="400" loading="lazy"></p>
<p>위에서 얘기했듯이, <code>print()</code> 함수는 텍스트 및 숫자 데이터, 변수 및 기타 데이터 유형 같은 모든 종류의 정보를 출력하는 데 사용됩니다.</p>
<p>또한 변수와 결합된 텍스트(또는 문자열)를 한 번에 출력할 수도 있습니다. 다음 섹션에서는 이 작업을 수행하는 몇 가지 방법에 대해 다루겠습니다.</p>
<h2 id="pythonconcatenation">Python에서 문자열을 변수와 결합해서(concatenation) 출력하기</h2>
<p>사전에 따르면, "concatenate"은 무언가를 일렬로 함께 연결하는 것을 의미합니다.</p>
<p>Python에서는 <code>+</code> 덧셈 연산자를 사용하여 다양한 항목 또는 데이터를 추가합니다.</p>
<p>결합하기(concatenation)는 문자열에만 사용되기 때문에 문자열과 연결하려는 변수가 정수 데이터 유형이면 <code>str()</code> 함수를 사용해 문자열로 변환해야 합니다.</p>
<p>다음 예시에서는 변수 값을 다른 문자열과 함께 출력해보겠습니다.</p>
<p>문자열은 큰따옴표로 묶고 변수 이름은 묶지 않고 덧셈 연산자를 사용해 모두 함께 연결합니다.</p>
<pre><code class="language-python">fave_language = "Python"

print("I like coding in " + fave_language + " the most")

#output
#I like coding in Python the most

</code></pre>
<p>문자열을 결합할 때는 공백을 직접 추가해야 합니다. 이전 예에서 따옴표 안에 공백을 포함하지 않았다면 다음과 같이 출력됩니다.</p>
<pre><code class="language-python">fave_language = "Python"

print("I like coding in" + fave_language + "the most")

#output
#I like coding inPythonthe most
</code></pre>
<p>다음과 같이 공백을 별도로 추가할 수도 있습니다.</p>
<pre><code class="language-python">fave_language = "Python"

print("I like coding in" + " " + fave_language + " "  + "the most")

#output
#I like coding in Python the most
</code></pre>
<p>이 방법은 오류가 발생하기 쉽고 시간이 오래 걸릴 수 있기 때문에 문자열과 변수를 출력하는 데 가장 선호하는 방법은 아닙니다.</p>
<h2 id="python">Python에서 변수와 문자열을 쉼표로 구분하여 출력하기</h2>
<p>변수와 텍스트를 쉼표로 구분 지어서 두 데이터 유형을 함께 출력할 수 있습니다.</p>
<pre><code class="language-python">first_name = "John"

print("Hello",first_name)

#output
#Hello John

</code></pre>
<p>위의 예에서는 먼저 큰따옴표로 출력할 텍스트 (문자열 <code>Hello</code>)를 묶습니다.</p>
<p>해당 텍스트와 <code>first_name</code> 변수가 가르키는 값을 구분하기 위해 텍스트를 묶은 닫힘 따옴표 뒤에 쉼표를 추가합니다.</p>
<p>또한 변수 뒤에 다음과 같이 텍스트를 더 추가할 수 있습니다.</p>
<pre><code class="language-python">first_name = "John"

print("Hello",first_name,"good to see you")

#output
#Hello John good to see you

</code></pre>
<p>이 방법은 두 개 이상의 변수가 있을 때도 실행됩니다.</p>
<pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello",first_name,last_name,"good to see you")

#output
Hello John Doe good to see you
</code></pre>
<p>모든 항목을 쉼표로 구분해야 합니다. 위의 예시에 나타난 것과 같이 텍스트와 변수를 구분할 때, 그리고 변수와 변수 사이를 구분할 때 쉼표를 추가해야 합니다.</p>
<p>쉼표를 <code>first_name</code>과 <code>last_name</code> 변수 사이에 추가하지 않으면 다음과 같은 오류가 발생됩니다.</p>
<pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello",first_name last_name,"good to see you")

#output
#File "/Users/dionysialemonaki/python_articles/demo.py", line 4
#    print("Hello",first_name last_name,"good to see you")
#                 ^^^^^^^^^^^^^^^^^^^^
#SyntaxError: invalid syntax. Perhaps you forgot a comma?
</code></pre>
<p>보시다시피 Python 오류 메시지는 매우 유용하며 디버깅 프로세스를 조금 더 수월하게 해줍니다 :)</p>
<h2 id="stringformatting">파이썬에서 문자열 포매팅(string formatting) 방법을 사용해 변수와 문자열 출력하기</h2>
<p>변수 값을 추가할 위치에 중괄호 <code>{}</code> 한 쌍을 포함하여 문자열 포매팅을 합니다.</p>
<pre><code class="language-python">first_name = "John"

print("Hello {}, hope you're well!")
</code></pre>
<p>이 예에서는 하나의 변수 <code>first_name</code>이 있습니다.</p>
<p><code>print()</code>문 안에는 출력해야 하는 텍스트를 묶은 큰따옴표 <code>""</code> 한 쌍이 있습니다.</p>
<p>큰따옴표 안에 변수 <code>first_name</code>의 값을 배치하고 싶은 곳에 중괄호 <code>{}</code> 쌍을 표기했습니다.</p>
<p>이 코드를 실행하면 다음과 같은 출력이 나타납니다:</p>
<pre><code class="language-python">#output
#Hello {}, hope you're well!
</code></pre>
<p><code>first_name</code> 값이 실제로 출력되지 않았습니다.</p>
<p>변수 값을 출력하려면 문자열의 닫힌 따옴표 바로 뒤에 <code>.format()</code> 문자열 메서드를 추가해야 합니다.</p>
<pre><code class="language-python">first_name = "John"

print("Hello {}, hope you're well!".format(first_name))

#output
#Hello John, hope you're well!
</code></pre>
<p>변수가 두 개 이상 있으면 출력하려는 변수의 개수만큼 중괄호 <code>{}</code>를 사용합니다.</p>
<pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello {} {}, hope you're well!")
</code></pre>
<p>이 예에서는 두 개의 변수를 생성하고 두 변수를 차례로 출력하려고 합니다. 변수를 대체할 위치에 중괄호 <code>{}</code> 두 쌍을 추가했습니다.</p>
<p><code>.format()</code> 메서드를 사용할 때는 변수 이름을 배치하는 순서가 중요합니다.</p>
<p>다시 말해, <code>.format()</code> 메소드 내에서 먼저 추가된 변수의 값은 첫 번째 중괄호 <code>{}</code> 쌍에 위치하고, 두 번째로 추가된 변수의 값은 두 번째 중괄호 <code>{}</code> 쌍에 위치합니다.</p>
<p>메서드 내에서는 변수 이름을 쉼표로 구분해야 합니다.</p>
<pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello {} {}, hope you're well!".format(first_name,last_name))

#output
#Hello John Doe, hope you're well!
</code></pre>
<p>메서드 내에  변수의 순서를 반대로 바꾼다면 출력된 값도 다르게 나타납니다.</p>
<pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello {} {}, hope you're well!".format(last_name,first_name))

#output
#Hello Doe John, hope you're well!
</code></pre>
<h2 id="pythonfstrings">Python에서 <code>f-strings</code>를 사용해 변수와 문자열을 출력하기</h2>
<p><code>f-strings</code>은 이전 섹션에서 다룬 방법보다 문자열 포매팅을 더 읽기 쉽고 간결하게 만들어 줍니다.</p>
<p>이 방법은 더 쉽고 수동으로 입력해야 할 항목이 비교적으로 적습니다.</p>
<p><code>f-string</code>을 만드는 일반적인 문법은 다음과 같습니다.</p>
<pre><code class="language-python">print(f"I want this text printed to the console!")

#output
#I want this text printed to the console!
</code></pre>
<p>먼저 <code>print()</code> 함수 안에 있는 따옴표 <code>""</code> 쌍 앞에 문자  <code>f</code> 를 붙여줍니다.</p>
<p>변수를 문자열과 함께 한 줄에 출력하려면 따옴표 바로 앞인 동일한 위치에 문자 <code>f</code>를 표기합니다.</p>
<p>그런 다음 따옴표 안에 원하는 텍스트를 추가하고 변수 값을 추가할 위치에 변수 이름를 묶은 중괄호 <code>{}</code> 쌍을 추가합니다.</p>
<pre><code class="language-python">first_name = "John"

print(f"Hello, {first_name}!")

#output
#Hello, John!
</code></pre>
<p>두 개 이상의 변수를 출력하려면 두 번째 변수 이름을 묶은 중괄호 <code>{}</code> 쌍을 추가합니다.</p>
<pre><code class="language-python">first_name = "John"
last_name = "Doe"

print(f"Hello, {first_name} {last_name}!")

#output
#Hello, John Doe!
</code></pre>
<p>변수 이름을 배치하는 순서에 따라 출력된 값이 달라지기 떄문에 변수 이름을 원하는 순서로 정렬해야 합니다.</p>
<p>변수 이름의 순서를 거꾸로 하면 다음과 같은 값이 출력됩니다.</p>
<pre><code class="language-python">first_name = "John"
last_name = "Doe"

print(f"Hello, {last_name} {first_name}!")

#output
#Hello, Doe John!
</code></pre>
<h2 id="">결론</h2>
<p>끝까지 읽어주셔서 감사합니다! 이 튜토리얼에서는 Python에서 문자열과 변수를 한 줄로 함께 출력하는 몇 가지 방법을 배웠습니다.</p>
<p>Python에 대해 더 배우고 싶다면 freeCodeCamp의 <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/">Python 수료증 과정</a>을 확인해보세요. 이 수료증 과정은 기초부터 시작해서 점차 고급 개념으로 진도를 나가기 때문에 초보자에게 적합합니다. 또한 5개의 프로젝트를 해보며 수료과정 동안 배운 모든 프로그래밍 지식을 실습할 수 있을 거에요.</p>
<p>Happy Coding!</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python에서 List Index Out of Range 오류 메세지 해결하기 ]]>
                </title>
                <description>
                    <![CDATA[ 이 기사에서는 Python에서 리스트 인덱스가 범위를 벗어났다는 의미의 Indexerror: list index out of range 오류가 발생하는 몇 가지 이유에 대해 살펴보겠습니다. 오류가 발생하는 이유에 대해 알아본 후 이 오류를 방지하는 몇 가지 방법도 배워보겠습니다. 그럼 시작해볼까요? Python 리스트 생성하기 Python에서 리스트 객체를 생성하려면 다음을 실행해야 합니다.  * 리스트 객체의 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/python-list-index-out-of-range/</link>
                <guid isPermaLink="false">6362efc8c0cb07062cace68f</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Sat, 05 Nov 2022 14:06:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/11/computer.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/list-index-out-of-range-python-error-message-solved/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">List Index Out of Range – Python Error Message Solved</a>
      </p><!--kg-card-begin: markdown--><h3 id="pythonindexerrorlistindexoutofrange">이 기사에서는 Python에서 리스트 인덱스가 범위를 벗어났다는 의미의 <code>Indexerror: list index out of range</code> 오류가 발생하는 몇 가지 이유에 대해 살펴보겠습니다.</h3>
<p>오류가 발생하는 이유에 대해 알아본 후 이 오류를 방지하는 몇 가지 방법도 배워보겠습니다.</p>
<p>그럼 시작해볼까요?</p>
<h2 id="python">Python 리스트 생성하기</h2>
<p>Python에서 리스트 객체를 생성하려면 다음을 실행해야 합니다.</p>
<ul>
<li>리스트 객체의 이름을 지정하고,</li>
<li>할당 연산자인 <code>=</code>를 사용하고,</li>
<li>대괄호 <code>[]</code> 안에 0개 이상의 리스트 항목을 포함합니다. 각 리스트 항목은 쉼표로 구분해야 합니다.</li>
</ul>
<p>예를 들어, 이름 목록을 작성하려면 다음과 같은 코드를 실행합니다.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
</code></pre>
<p>위의 코드는 <code>Kelly, Nelly, Jimmy, Lenny</code>의 네 가지 값을 가진 <code>names</code>라는 리스트를 생성합니다.</p>
<h3 id="python">Python 리스트 길이 확인하기</h3>
<p>리스트의 길이를 확인하려면 Python의 내장 함수 <code>len()</code>를 사용하면 됩니다.</p>
<p><code>len()</code>은 리스트에 저장된 항목의 수인 정수를 반환합니다.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

#name_length라는 변수를 만들어 리스트의 길이를 저장합니다
name_length = len(names)

#변수의 값을 콘솔에 출력합니다. 
print(name_length)

#출력된 값 
#4
</code></pre>
<p>리스트에 저장된 항목이 4개이므로 리스트의 길이 또한 4입니다.</p>
<h3 id="python">Python 리스트의 개별 항목에 접근하는 방법</h3>
<p>리스트의 각 항목은 고유한 <i>인덱스 번호(index number)</i>가 있습니다.</p>
<p>Python 및 대부분의 현대 프로그래밍 언어에서는 인덱싱이 0부터 시작합니다.</p>
<p>즉, 리스트의 첫 번째 항목은 0, 두 번째 항목은 1의 인덱스를 갖습니다.</p>
<p>인덱스를 활용해 개별 항목에 접근할 수 있습니다.</p>
<p>그러려면 먼저 리스트 이름을 작성합니다. 그런 다음 대괄호 안에 항목의 인덱스에 해당하는 정수를 포함합니다.</p>
<p>이전 예시의 경우 인덱스를 사용해 리스트 내의 각 항목에 접근하는 방법은 다음과 같습니다.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

names[0] # Kelly
names[1] # Nelly
names[2] # Jimmy
names[3] # Lenny
</code></pre>
<p>음수 인덱스(negative index)를 사용해 Python 리스트 내 항목에 접근할 수도 있습니다.</p>
<p><strong>마지막</strong> 항목에 접근하려면 인덱스 값 -1을 사용하면 됩니다. 마지막에서 두 번째 항목에 접근하려면 인덱스 값 -2를 사용합니다.</p>
<p>다음 코드 블록은 음수 인덱스를 사용해 리스트 내의 각 항목에 접근하는 방법입니다.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

names[-4] # Kelly
names[-3]# Nelly
names[-2] # Jimmy
names[-1] # Lenny
</code></pre>
<h2 id="indexerrorlistindexoutofrangeerror"><code>Indexerror: list index out of range error</code> 오류가 발생하는 이유</h2>
<h3 id="">첫 번째 원인: 리스트 범위를 벗어나는 인덱스 사용</h3>
<p>리스트의 인덱스 범위를 벗어난, 존재하지 않는 값을 사용해 항목에 접근하려고 하면 <code>Index error: list index out of range</code> 오류가 발생합니다.</p>
<p>이 오류는 리스트의 마지막 항목에 접근하거나 음수 인덱스를 사용해 첫 번째 항목에 접근할 때 흔히 발생합니다.</p>
<p>예시를 다시 살펴봅시다.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
</code></pre>
<p>리스트의 마지막 항목인 <code>Lenny</code>에 접근하려고 다음과 같은 코드를 실행했다고 가정해봅시다.</p>
<pre><code class="language-python">print(names[4])

#출력된 값 

#Traceback (most recent call last):
#  File "/Users/boyeonihn/python_articles/demo.py", line 3, in &lt;module&gt;
#    print(names[4])
#IndexError: list index out of range
</code></pre>
<p>일반적으로 리스트의 인덱스 범위는 <code>0에서 n-1</code>이며, 여기서 <code>n</code>은 리스트의 총 항목 수입니다.</p>
<p>예시의 <code>names</code> 리스트는 총 항목 수가 <code>4</code>이고 인덱스 범위는 <code>0에서 3</code>입니다.</p>
<p>이제 음수 인덱스로 리스트 항목을 접근해봅시다.</p>
<p>음수 인덱스를 사용해 첫 번째 항목인 <code>Kelly</code>에 접근한다고 가정해볼까요?</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

print(names[-5])

#출력된 값 

#Traceback (most recent call last):
#  File "/Users/boyeonihn/python_articles/demo.py", line 3, in &lt;module&gt;
#    print(names[-5])
#IndexError: list index out of range
</code></pre>
<p>음수 인덱스를 사용할 경우 리스트의 인덱스 범위는 <code>-1에서 -n</code>입니다. 여기서 <code>-n</code>은 리스트에 포함된 총 항목 수입니다.</p>
<p>리스트의 총 항목 수가 <code>4</code>라면, 인덱스 범위는 <code>-1에서-4</code>입니다.</p>
<h3 id="forrange">두 번째 원인: <code>for</code>문에서 <code>range()</code> 함수에 잘못된 값 전달</h3>
<p>리스트를 순회할 때 존재하지 않는 항목에 접근하려고 하면 <code>Indexerror: list index out of range</code> 오류가 발생합니다.</p>
<p>이런 오류가 발생하는 흔한 경우 중 하나는 Python의 <code>range()</code> 함수에서 잘못된 정수를 사용했을 때입니다.</p>
<p><code>range()</code> 함수에는 일반적으로 카운트가 종료하는 위치(종료값이라고도 불립니다 --옮긴이)를 나타내는 정수 하나가 전달됩니다.</p>
<p>예를 들어 <code>range(5)</code>는 카운트가 <code>0</code>에서 시작해 <code>4</code>에서 종료됨을 나타냅니다.</p>
<p>다시 말해 카운트는 기본적으로 <code>0</code>에서 시작되고 전달된 종료값에서 1을 뺀 값까지 매번 <code>1</code>씩 증가합니다. <code>range()</code> 함수에 인자로 전달된 종료값은 카운트에 포함되지 않는다는 점을 꼭 명심하세요.</p>
<p>예시를 확인해봅시다.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(5):
    print(names[name])
    
#출력된 값 

#Kelly
#Nelly
#Jimmy
#Lenny
#Traceback (most recent call last):
#  File "/Users/boyeonihn/python_articles/demo.py", line 7, in &lt;module&gt;
#   print(names[name])
#IndexError: list index out of range
</code></pre>
<p><code>names</code> 리스트에는 네 가지 값이 있습니다.</p>
<p>이 리스트를 순회하고 각 항목의 값을 출력하고 싶다는 가정해보겠습니다.</p>
<p><code>range(5)</code>를 사용할 때 Python 인터프리터에게 <code>0에서 4까지</code>에 위치한 값을 출력하라는 지시를 전하는 의미입니다.</p>
<p>그러나 <code>4</code> 위치에는 항목이 없습니다.</p>
<p>위치 번호를 출력한 후 해당 위치의 값을 출력해보면 이 사실을 확인할 수 있습니다.</p>
<pre><code class="language-python">#0
#Kelly
#1
#Nelly
#2
#Jimmy
#3
#Lenny
#4
#Traceback (most recent call last):
#  File "/Users/dionysialemonaki/python_articles/demo.py", line 8, in &lt;module&gt;
#    print(names[name])
#IndexError: list index out of range
</code></pre>
<p><code>range(5)</code>는 <code>0에서 4까지</code>의 위치를 나타냅니다. <code>0</code> 위치에는 "Kelly", <code>1</code> 위치에는 "Nelly", <code>2</code> 위치에는 "Jimmy", 그리고 <code>3</code> 위치에는 "Lenny"라는 값이 있다는 것을 확인할 수 있습니다.</p>
<p><code>4</code> 위치의 경우 출력할 값이 없으므로 인터프리터가 오류를 발생시킵니다.</p>
<p>이 오류를 해결하는 한 가지 방법은 <code>range()</code>에 전달된 정수를 낮추는 것입니다.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(4):
    print(name)
    print(names[name])
    
#출력된 값

#0
#Kelly
#1
#Nelly
#2
#Jimmy
#3
#Lenny
</code></pre>
<p><code>for</code>문을 사용할 때 이 오류를 해결하는 또 다른 방법은 리스트의 길이를 <code>range()</code> 함수에 인수로 전달하는 것입니다. 이전 섹션에서 설명한 것처럼 내장 함수 <code>len()</code>를 사용하면 됩니다.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(len(names)):
    print(names[name])

#출력된 값

#Kelly
#Nelly
#Jimmy
#Lenny
</code></pre>
<p><code>len()</code>을 <code>range()</code>에 인수로 전달할 때 다음과 같은 실수를 조심하세요.</p>
<pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(len(names) + 1):
    print(names[name])
</code></pre>
<p>이런 코드를 실행하면 <code>IndexError: list index out of range</code> 오류가 다시 발생합니다.</p>
<pre><code class="language-python">#Kelly
#Nelly
#Jimmy
#Lenny
#Traceback (most recent call last):
#  File "/Users/boyeonihn/python_articles/demo.py", line 4, in &lt;module&gt;
#    print(names[name])
#IndexError: list index out of range
</code></pre>
<h2 id="">마치며</h2>
<p>이제 <code>IndexError: list index out of range</code> 오류가 발생하는 이유와 이를 방지할 수 있는 몇 가지 방법에 대해 이해가 잘 되셨나요?</p>
<p>Python에 대해 더 배워보고 싶다면 freeCodeCamp의 <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/">Python 수료증 과정</a>을 확인해보세요. 수료증 강의를 통해 초보자여도 Python을 재미있고 유익하게 배우면서 5개의 프로젝트를 해보며 배운 것을 열심히 실습할 수 있을 거에요.</p>
<p>읽어주셔서 감사합니다. Happy coding!</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git 로컬 및 원격 브랜치 삭제하기 ]]>
                </title>
                <description>
                    <![CDATA[ Git은 많은 이들의 사랑을 받고 있는 버전 관리 시스템이자 웹 개발자의 필수 도구입니다. 브랜치(branch)는 Git이 제공하는 강력하고 중요한 기능 중 하나입니다. 이번 기사에서는 Git의 로컬 및 원격 브랜치를 삭제하는 기본적인 방법을 다뤄보겠습니다. 브랜치란 브랜치는 커밋을 가리키는 포인터(pointer)입니다. Git 브랜치는 특정 시점에서의 프로젝트 변경이력을 기록하는 스냅숏입니다. (스냅숏(snapshot)은 특정 시점에 프로젝트 파일의 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/git-delete-local-or-remote-branch/</link>
                <guid isPermaLink="false">6342c9b086d53d05fdf62478</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Tue, 18 Oct 2022 16:33:46 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/10/elaine-alex-OFMEk4ar9RA-unsplash--1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/git-delete-branch-how-to-remove-a-local-or-remote-branch/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Git Delete Branch – How to Remove a Local or Remote Branch</a>
      </p><!--kg-card-begin: markdown--><h3 id="git">Git은 많은 이들의 사랑을 받고 있는 버전 관리 시스템이자 웹 개발자의 필수 도구입니다.</h3>
<p>브랜치(branch)는 Git이 제공하는 강력하고 중요한 기능 중 하나입니다.</p>
<p>이번 기사에서는 Git의 로컬 및 원격 브랜치를 삭제하는 기본적인 방법을 다뤄보겠습니다.</p>
<h2 id="">브랜치란</h2>
<p>브랜치는 커밋을 가리키는 포인터(pointer)입니다.</p>
<p>Git 브랜치는 특정 시점에서의 프로젝트 변경이력을 기록하는 스냅숏입니다. (스냅숏(snapshot)은 특정 시점에 프로젝트 파일의 상태를 마치 사진 찍듯이 저장해 기록하는 기술을 의미합니다. - 옮긴이)</p>
<p>규모가 큰 프로젝트의 소스 코드를 관리할 때, 기준이 되는 기본 저장소를 <code>main</code> 또는 <code>master</code>라고 부릅니다(최근 <code>master</code>란 단어가 노예제를 연상시킨다는 이유로 기본 저장소를 <code>main</code>으로 부르는 것을 권장하고 있습니다. - 옮긴이).</p>
<p>브랜치는 작업 중인 프로젝트의 독립적인 버전을 따로 만들 수 있는 기능을 제공합니다. 프로젝트를 진행하다 보면 코드 수정, 새 기능 추가, 디버깅을 위한 테스트 작성 등과 같은 작업이 필요합니다. 이와 같은 작업을 새로 생성한 브랜치에서 진행하면 메인 소스 코드를 안전하게 보호할 수 있습니다.</p>
<p>다시 말해, 브랜치를 활용하면 변경 사항을 적용할 준비가 완벽하게 되기 전까지 메인 소스 코드에 그 어떤 영향을 주지 않으면서도 다양한 작업을 진행할 수 있습니다.</p>
<p>브랜치를 이용한 작업을 하면 코드베이스를 깔끔하고 일목요연하게 유지할 수 있습니다.</p>
<h2 id="">브랜치를 삭제하는 이유</h2>
<p>프로젝트에서 코드의 변경 사항을 저장하기 위해 브랜치를 만들었다고 가정해봅시다.</p>
<p>그렇지만 해당 브랜치의 변경 사항이나 새 기능을 프로젝트의 본 버전에 반영 완료한 후에는 해당 브랜치를 유지할 필요가 없어집니다. 따라서 프로젝트 저장소가 복잡해지지 않도록 작업이 완료된 브랜치는 삭제하는 것이 일반적입니다.</p>
<h2 id="">로컬 브랜치 삭제하기</h2>
<p>로컬 브랜치는 작업자 본인의 컴퓨터에 있는 브랜치이기 때문에 원격 브랜치에 영향을 끼치지 않습니다.</p>
<p>로컬 브랜치를 삭제하는 명령어는 다음과 같습니다.</p>
<pre><code>git branch -d &lt;로컬 브랜치 이름&gt; 
</code></pre>
<ul>
<li><code>git branch</code>는 로컬 브랜치를 삭제하는 명령어입니다.</li>
<li><code>-d</code>는 <code>--delete</code>의 약자이며 위 명령어에 추가할 수 있는 선택적 플래그입니다. 무언가를 삭제하고 싶다는 의미를 담고 있는 플래그입니다.</li>
<li><code>&lt;로컬 브랜치 이름&gt;</code>은 삭제하고 싶은 로컬 브랜치를 가리킵니다.</li>
</ul>
<p>예시를 통해 <code>git branch</code> 명령어 활용법을 더 자세히 살펴봅시다.</p>
<p>우선 로컬 브랜치 목록을 확인하기 위해 다음 명령어를 사용합니다.</p>
<pre><code>git branch 
</code></pre>
<p>이 예시에는 <code>main</code>, <code>test2</code>라는 두 로컬 브랜치가 있습니다. <code>(*)</code>는 현재 <code>test2</code> 브랜치에서 작업 중이라는 것을 의미합니다.</p>
<p><img src="https://i.ibb.co/PZxppnQ/git-branch.png" alt=" 명령어 사용 후 나타나는 화면" width="154" height="78" loading="lazy"></p>
<p>이때 <code>test2</code> 브랜치를 삭제하고 싶어도 현재 작업 중인 브랜치는 삭제할 수 없습니다.</p>
<p>삭제를 시도하면 다음과 같은 에러가 발생합니다.</p>
<p><img src="https://i.ibb.co/jgx7y3V/Screenshot-2022-10-09-222230.png" alt="현재 작업 중인 브랜치를 삭제할 때 보여지는 에러 메시지" width="640" height="69" loading="lazy"></p>
<p>따라서 로컬 브랜치를 삭제하기 전에 <code>git checkout</code> 명령어를 사용해 삭제 대상이 아닌 다른 브랜치로 전환해야 합니다.</p>
<pre><code>git checkout &lt;브랜치 이름&gt;
</code></pre>
<ul>
<li><code>&lt;브랜치 이름&gt;</code>은 전환하고 싶은 브랜치입니다</li>
<li><code>main</code> 브랜치로 전환하려면 명령어가 다음과 같습니다.</li>
<li><code>git checkout main</code></li>
</ul>
<p>명령어를 실행하면 다음과 같은 메시지가 나타납니다.</p>
<p><img src="https://i.ibb.co/b23f0wW/Screenshot-2022-10-09-222629.png" alt=" 실행 후 나타나는 메시지" width="454" height="86" loading="lazy"></p>
<p>이제 원하는 브랜치를 삭제할 수 있습니다.</p>
<p><img src="https://i.ibb.co/Cz8HXZN/Screenshot-2022-10-09-222718.png" alt="브랜치 삭제 후 나타나는 메시지" width="640" height="66" loading="lazy"></p>
<p>브랜치에 병합되지 않은 변경 사항 및 푸시되지 않은 커밋이 있는 경우 <code>-d</code> 플래그를 사용해 로컬 브랜치를 삭제할 수 없습니다.</p>
<p>브랜치가 가지고 있는 커밋이 다른 브랜치 혹은 저장소에 기록되어 있지 않을 경우, 커밋 기록이 실수로 손실되는 것을 Git이 방지하기 때문입니다.</p>
<p>만일 이러한 상황에서 <code>git branch -d</code> 명령어를 실행하면 다음과 같은 에러가 발생합니다.</p>
<p><img src="https://i.ibb.co/bFRhX6P/Screenshot-2022-10-09-222959.png" alt="병합되지 않은 커밋을 저장한 브랜치를 삭제할 때 나타나는 에러 메시지" width="640" height="86" loading="lazy"></p>
<p>따라서 해당 브랜치를 삭제하려면 에러 메시지에 제시된 것처럼 <code>-D</code> 플래그를 사용해야 합니다.</p>
<pre><code>git branch -D &lt;로컬 브랜치 이름&gt;
</code></pre>
<p>대문자 "D"가 있는 <code>-D</code> 플래그는 <code>--delete --force</code>(강제 삭제)의 줄임말이며, 병합 여부와 관계없이 로컬 브랜치를 강제로 삭제합니다.</p>
<p>브랜치 삭제 여부를 재확인하는 절차가 따로 없으므로 이 명령어는 주의해서 사용해야 합니다.</p>
<p>로컬 브랜치를 확실히 삭제하려는 경우에만 사용해야 한다는 점을 잊지 마세요.</p>
<p>다른 브랜치로 변경 이력을 병합하거나 코드 베이스의 원격 브랜치로 푸시하지 않은 상태에서 로컬 브랜치를 삭제하면 변경 사항이 손실될 위험이 있습니다.</p>
<p><img src="https://i.ibb.co/p1DGWmX/Screenshot-2022-10-09-223057.png" alt=" 명령어를 실행한 화면" width="458" height="91" loading="lazy"></p>
<h2 id="">원격 브랜치 삭제하기</h2>
<p>원격 브랜치와 로컬 브랜치는 독립적인 별개의 개체입니다.</p>
<p>작업자의 컴퓨터에 저장되어 있는 로컬 브랜치와 달리, 원격 브랜치는 원격 서버에 저장되어 있으며 원격 서버를 통해 접근할 수 있습니다.</p>
<p>원격 브랜치를 삭제하는 명령어는 다음과 같습니다.</p>
<pre><code>git push &lt;원격 저장소 이름&gt; -d &lt;원격 브랜치 이름&gt;
</code></pre>
<ul>
<li>로컬 브랜치를 삭제하는 <code>git branch</code> 명령어를 사용하는 대신 <code>git push</code> 명령어를 이용해 원격 브랜치를 삭제해야 합니다.</li>
<li><code>git push</code> 명령어 다음에 원격 저장소의 이름을 전달해야 합니다. 대부분은 <code>origin</code>입니다.</li>
<li><code>-d</code> 플래그는 삭제라는 의미를 가진 <code>--delete</code>의 줄임말입니다.</li>
<li><code>&lt;원격 브랜치 이름&gt;</code>은 삭제하고 싶은 원격 브랜치입니다.</li>
</ul>
<p>예시를 통해 원격 브랜치를 삭제하는 과정을 살펴봅시다.</p>
<p>원격 브랜치 목록을 확인하려면 다음과 같은 명령어를 사용해야 합니다.</p>
<pre><code>git branch -a
</code></pre>
<p><code>-a</code> 플래그(모두란 의미를 가진 <code>--all</code>의 줄임말)를 사용하면 로컬, 원격 브랜치를 모두 확인할 수 있습니다.</p>
<p><img src="https://i.ibb.co/vDNT0ds/branch-a.png" alt=" 명령어 실행 후 나타나는 화면" width="380" height="153" loading="lazy"></p>
<p>위의 예시에서는 <code>main</code>, <code>test2</code>라는 두 개의 로컬 브랜치와 <code>origin/main</code>, <code>origin/test2</code>라는 두 개의 원격 브랜치가 있다는 것을 확인할 수 있습니다.</p>
<p><code>--remotes</code>의 줄임말인 <code>-r</code> 플래그를 사용하면 원격 저장소만 확인할 수 있습니다.</p>
<p><img src="https://i.ibb.co/YbpBkNy/branch-r.png" alt="git branch -r 명령어를 실행한 후 보이는 화면" width="460" height="89" loading="lazy"></p>
<p><code>origin/test2</code> 브랜치를 삭제하길 원한다면 다음과 같은 명령어를 사용해야 합니다.</p>
<pre><code>git push origin -d test2
</code></pre>
<p>다음과 같은 메시지가 보일 거예요.</p>
<p><img src="https://i.ibb.co/WygNwxL/Screenshot-2022-10-09-224019.png" alt="원격 브랜치 삭제 후 보이는 메시지" width="640" height="81" loading="lazy"></p>
<p>이렇게 <code>origin</code> 저장소에 있는 <code>test2</code> 브랜치가 삭제되었습니다!</p>
<p><code>git branch -r</code> 명령어를 사용해 <code>origin/test2</code> 원격 저장소가 브랜치 목록에 더 이상 보이지 않다는 걸 확인할 수 있습니다.</p>
<p><img src="https://i.ibb.co/MZfYTTc/branch-r.png" alt="업데이트 된 원격 브랜치 목록" width="640" height="65" loading="lazy"></p>
<h2 id="">마치며</h2>
<p>이렇게 로컬, 원격 브랜치 삭제하는 방법을 배워보았습니다!</p>
<p>Git에 대해 더 알고 싶다면, freeCodeCamp의 유튜브 채널에서 다음과 같은 강의를 볼 수 있습니다.</p>
<ul>
<li><a href="https://www.youtube.com/watch?v=RGOj5yH7evk">초보자를 위한 GitꞏGitHub 단기 특강 강의 (영문)</a>를 통해 기본적인 Git 사용법, 자주 사용하는 중요한 Git 명령어, 그리고 일반적인 Git 워크플로에 대한 개요를 배울 수 있습니다.</li>
<li>Git 브랜치와 브랜치 작동법에 대해 좀 더 자세히 알아보고 싶다면 <a href="https://www.youtube.com/watch?v=e2IbNHi4uCI&amp;t=6s">Git 브랜치 강의 (영문)</a>를 시청해보세요.</li>
</ul>
<p>이 기사를 읽어주셔서 감사하고 즐거운 학습 되시길 바랍니다!</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git 원격 브랜치 체크아웃하기 ]]>
                </title>
                <description>
                    <![CDATA[ Git은 프로젝트의 여러 버전을 관리하고 기록할 수 있는 버전 관리 시스템(version control system)입니다. 새로운 업데이트로 인해 앱에서 에러가 발생할 때 Git을 사용하면 앱을 이전 버전으로 되돌릴 수 있습니다. Git을 통해 버전 관리 외에도 여러 환경에서 동시에 작업할 수 있습니다. 여기서 여러 환경이란 브랜치를 의미합니다. 브랜치의 필요성 Git에서 작업하면 main이라는 메인 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/git-remote-branch-checkout/</link>
                <guid isPermaLink="false">6342c93786d53d05fdf62470</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Tue, 18 Oct 2022 16:32:31 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/10/5ffda02d75d5f706921cc25f.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/git-checkout-remote-branch-tutorial/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Git Checkout Remote Branch Tutorial</a>
      </p><!--kg-card-begin: markdown--><h3 id="gitversioncontrolsystemgit">Git은 프로젝트의 여러 버전을 관리하고 기록할 수 있는 버전 관리 시스템(version control system)입니다. 새로운 업데이트로 인해 앱에서 에러가 발생할 때 Git을 사용하면 앱을 이전 버전으로 되돌릴 수 있습니다.</h3>
<p>Git을 통해 버전 관리 외에도 여러 환경에서 동시에 작업할 수 있습니다. 여기서 여러 환경이란 브랜치를 의미합니다.</p>
<h2 id="">브랜치의 필요성</h2>
<p>Git에서 작업하면 <code>main</code>이라는 메인 브랜치가 있습니다. 이 특정 브랜치에는 앱이 제품으로 출시될 때 배포되는 소스 코드가 저장되어 있습니다.</p>
<p>앱을 업데이트하려는 경우 이 브랜치에 커밋 및 변경 사항을 추가할 수도 있습니다. 사소한 업데이트라면 크게 상관없을 수도 있지만, 규모가 큰 업데이트라면 이야기가 달라집니다. 바로 이때 브랜치 기능이 중요한 역할을 합니다.</p>
<p>터미널을 사용해 프로젝트 디렉터리에서 브랜치를 생성하려면 다음과 같은 명령어를 실행합니다.</p>
<pre><code class="language-bash"># 새 브랜치 생성하기 
git branch 브랜치-이름
# 생성된 브랜치로 전환하기 
git checkout 브랜치-이름 
</code></pre>
<p>이제 새 브랜치에서 업데이트 작업을 진행할 수 있습니다. 그런 다음 작업을 마치면 <code>main</code> 브랜치와 병합할 수 있습니다.</p>
<p>브랜치의 또 다른 이점은 여러 개발자가 동일한 프로젝트에서 동시에 작업할 수 있다는 것입니다. 여러 개발자가 동일한 <code>main</code> 브랜치에서 작업한다면 문제점이 많습니다. 특히 각 개발자의 코드 간에 변경 사항이 너무 많아서 병합 충돌(merge conflict)이 자주 발생하게 됩니다.</p>
<p>Git을 사용하면 한 브랜치에서 작업을 진행하는 동안 다른 브랜치(즉, 다른 환경)에서 새 업데이트를 추가할 수 있습니다.</p>
<h2 id="git">Git 원격 브랜치 체크아웃한다는 의미</h2>
<p>Git으로 프로젝트를 시작하면 로컬 컴퓨터에 있는 로컬 <code>main</code> 브랜치와 GitHub와 같은 Git 지원 플랫폼에 있는 원격 <code>main</code> 브랜치라는 두 가지 환경을 줍니다.</p>
<p>로컬 <code>main</code> 브랜치에서 원격 <code>main</code> 브랜치로 변경 사항을 푸시할 수 있고, 원격 브랜치에서 변경 사항을 <code>pull</code> 명령어를 통해 로컬 브랜치로 가져올 수도 있습니다.</p>
<p>로컬 환경에서 브랜치를 생성하면 GitHub로 푸시되여 원격 브랜치가 될 때까지 로컬 환경에만 존재합니다. 다음 예시를 확인해봅시다.</p>
<p>예시:</p>
<pre><code class="language-bash"># 새 브랜치 생성하기 
git branch 새-브랜치-이름
# 생성된 브랜치로 전환하기 
git checkout 새-브랜치-이름 
# 파일 추가하기 
touch new-file.js
# 수정사항 커밋하기 
git add .
git commit -m "새 파일 추가"
# 새 원격 브랜치로 푸시하기 
git push --set-upstream origin 새-브랜치-이름
</code></pre>
<p>위의 예시에서 <code>origin 새-브랜치-이름</code>은 원격 브랜치가 됩니다. 새 원격 브랜치로 푸시하기 전에 먼저 새 브랜치를 만들고 변경 사항을 커밋했다는 것을 눈치채셨나요?</p>
<p>하지만 이미 기존에 있는 원격 브랜치와 그 브랜치의 모든 변경이력을 로컬 환경으로 가져오려면 어떻게 할까요?</p>
<p>이때 원격 브랜치를 체크아웃하면 됩니다.</p>
<h2 id="">원격 브랜치 체크아웃하기</h2>
<p>다른 개발자가 생성한 원격 브랜치의 내용을 로컬 환경에 가져오려면 다음과 같은 방법을 사용해야 합니다.</p>
<h3 id="1fetch">1. 모든 원격 브랜치 가져오기(fetch)</h3>
<pre><code class="language-bash">git fetch origin
</code></pre>
<p>이 명령어를 실행하면 원격 저장소의 모든 원격 브랜치를 로컬에 가져옵니다. 위 예시에서는 <code>origin</code> 원격 저장소의 데이터를 가져옵니다. <code>upstream</code> 원격 저장소의 브랜치를 가져오려면 <code>git fetch upstream</code>을 사용해야겠죠.</p>
<h3 id="2">2. 체크아웃할 수 있는 브랜치 목록 보기</h3>
<p>체크아웃할 수 있는 브랜치 목록을 보려면 다음과 같은 명령어를 실행합니다.</p>
<pre><code class="language-bash">git branch -a
</code></pre>
<p>명령어를 실행하면 체크아웃할 수 있는 브랜치 목록이 출력됩니다. 원격 브랜치에는 <code>remotes/origin</code> 접두사가 붙은 것을 확인할 수 있습니다.</p>
<h3 id="3pull">3. 원격 브랜치의 변경이력 가져와 병합하기(Pull)</h3>
<p>원격 브랜치에는 직접 작업할 수 없습니다. 변경 사항을 추가하기 위해서는 원격 브랜치의 복사본이 필요합니다. 예를 들어 <code>fix-failing-tests</code>라는 원격 브랜치를 복사하고 싶다면 다음과 같은 명령어를 실행합니다.</p>
<pre><code class="language-bash">git checkout -b fix-failing-tests origin/fix-failing-tests
</code></pre>
<p>이 명령어를 다음과 같은 세 동작이 실행됩니다.</p>
<ul>
<li><code>fix-failing-tests</code>라는 새 브랜치를 생성하고,</li>
<li>새 브랜치로 체크아웃이 되며,</li>
<li><code>origin/fix-falling-tests</code>의 변경이력을 새 브랜치로 가져옵니다.</li>
</ul>
<p>이제 원하는 원격 브랜치의 복사본이 있습니다. 해당 원격 브랜치에 커밋도 푸시할 수 있습니다. 바로 시도해 볼까요?</p>
<p>예시:</p>
<pre><code class="language-bash">touch new-file.js
git add .
git commit -m "새 파일 추가"
git push
</code></pre>
<p>이렇게 하면 커밋된 변경 내용이 <code>origin/fix-failing-tests</code>로 푸시 됩니다. <code>git push origin fix-failing-tests</code>와 같이 커밋을 푸시할 원격 브랜치를 지정할 필요가 없이 <code>git push</code> 명령어만 실행했다는 것을 확인하셨나요? Git이 로컬 브랜치가 자동으로 원격 브랜치를 추적하도록 설정하기 때문입니다.</p>
<h2 id="">마치며</h2>
<p>Git 브랜치를 통해 프로젝트 개발 작업을 진행하면서 수월하게 협업할 수 있습니다.</p>
<p>다시 말해, 브랜치를 활용하면 여러 개발자가 동시에 다양한 작업을 할 수 있습니다.</p>
<p>또한 원격 브랜치 체크아웃 기능을 사용하면 개발자가 로컬 환경에 원격 브랜치를 복사와 변경하기, 그리고 원격 브랜치로 푸시하기가 가능해지기 때문에 협업이 더욱 원활해집니다.</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git add 취소하기 ]]>
                </title>
                <description>
                    <![CDATA[ 커밋하기 전에 git add를 취소하려면 git reset <파일명> 또는 git reset 명령어를 실행하면 됩니다(명령어에 파일명을 전달하지 않으면 모든 파일을 unstaged 상태로 변경합니다. Unstaged란 파일이 Staging area에 더 이상 들어있지 않다는 것을 의미합니다. -옮긴이). 이전 버전에서는 git reset HEAD <파일>, git reset HEAD 명령어가 사용되었지만, Git 1.8.2 버전부터 각각 git reset ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/git-undo-add/</link>
                <guid isPermaLink="false">63156481b9e78405860294bc</guid>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Wed, 07 Sep 2022 18:55:01 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/09/5f9c9deb740569d1a4ca3a5e.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/how-to-undo-a-git-add/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Undo a Git Add</a>
      </p><!--kg-card-begin: markdown--><h3 id="gitaddgitresetgitresetunstagedunstagedstagingarea">커밋하기 전에 git add를 취소하려면 git reset &lt;파일명&gt; 또는 git reset 명령어를 실행하면 됩니다(명령어에 파일명을 전달하지 않으면 모든 파일을 unstaged 상태로 변경합니다. Unstaged란 파일이 Staging area에 더 이상 들어있지 않다는 것을 의미합니다. -옮긴이).</h3>
<p>이전 버전에서는 <code>git reset HEAD &lt;파일&gt;</code>, <code>git reset HEAD</code> 명령어가 사용되었지만, Git 1.8.2 버전부터 각각 <code>git reset &lt;파일명&gt;</code>, <code>git reset</code>으로 변경되었습니다.</p>
<p>자주 사용되는 다른 Git 작업 명령어에 대해 자세히 알아보고 싶다면 다음 기사를 확인해보세요.</p>
<ul>
<li><a href="https://guide.freecodecamp.org/git/git-checkout/">Git checkout (영문)</a></li>
<li><a href="https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/">Git pull vs Git fetch (국문)</a></li>
<li><a href="https://guide.freecodecamp.org/git/gitignore/">Gitignore (영문)</a></li>
</ul>
<h2 id="git">Git에 대해 더 자세히 알아볼까요?</h2>
<h3 id="git">Git 프로젝트의 세 가지 영역</h3>
<p>Git 프로젝트에는 총 세 가지 영역이 있습니다.</p>
<ol>
<li>Git 디렉터리(Git Directory)</li>
<li>워킹 트리(Working Tree/Working Directory)</li>
<li>스테이징 영역 (Staging area)</li>
</ol>
<p>(세 번째 영역인 스테이징 영역은 Staging area라는 표현이 보편적으로 사용되므로 이 부분 외의 본문에서는 별도로 음차 표기하지 않겠습니다. -옮긴이)</p>
<p><strong>Git 디렉터리</strong>(<code>작업하는-프로젝트-경로/.git/</code>에 있음)는 Git이 프로젝트를 정확하게 기록하고 관리하는 데 필요한 모든 것을 저장하는 곳입니다. 프로젝트의 메타데이터와 파일의 압축 버전을 포함한 객체 데이터베이스가 저장되어 있습니다.</p>
<p><strong>워킹 트리</strong>는 사용자가 작업을 진행하며 여러 변경 사항을 발생시키는 곳입니다. 워킹 트리는 Git 디렉터리에 있는 객체 데이터베이스의 파일을 사용자의 로컬 컴퓨터로 가져옵니다(이를 곧 <code>pull</code>이라고 표현합니다. -옮긴이).</p>
<p><strong>Staging area</strong>는 다음 커밋에 들어갈 내용에 대한 정보를 저장하는 파일입니다("인덱스(index)", "스테이지(stage)" 또는 "캐시(cache)"라고도 합니다). 커밋은 사용자가 Git에게 Staging area에 있는 파일들을 저장하라는 의미를 전하는 지시입니다. 이때 Git은 파일의 스냅샷을 만들고, 해당 스냅샷을 Git 디렉터리에 영구 저장합니다.</p>
<p>Git 프로젝트가 세 가지 영역으로 나뉘어 관리되는 것처럼, 프로젝트에 있는 파일 역시 <code>committed</code>, <code>modified</code>, 또는 <code>staged</code> 세 가지의 상태로 관리됩니다. 각각의 상태를 Git 프로젝트의 세 가지 영역과 연관지어 생각해보면 이해하기 쉽습니다.</p>
<ol>
<li>워킹 트리에 있는 파일 중 수정한 파일은 <i>modified</i> 상태가 됩니다.</li>
<li>파일을 Staging area로 옮기면 파일은 곧 커밋될 것이라는 의미를 가진 <i>staged</i> 상태가 됩니다.</li>
<li>마지막으로 커밋된 파일은 <i>committed</i> 상태가 됩니다.</li>
</ol>
<h2 id="git">Git 설치하기</h2>
<ul>
<li>Ubuntu: <code>sudo apt-get install git</code></li>
<li>Windows: <a href="https://git-scm.com/download/win">다운로드하기</a></li>
<li>Mac: <a href="https://git-scm.com/download/mac">다운로드하기</a></li>
</ul>
<h2 id="git">Git 환경 설정하기</h2>
<p>Git에는 Git의 사용 환경을 설정할 수 있는 <code>git config</code>라는 도구가 있습니다. 특정 구성 변수(configuration variables)를 설정하면서 Git 터미널의 테마 혹은 기능을 변경할 수 있습니다. 변경 사항을 저장하려면 로컬 컴퓨터의 커맨드라인 인터페이스(CLI, command line interface)에서 <code>git config</code> 명령어를 실행해야 합니다(Mac에선 Terminal, Windows에선 Command Prompt 또는 Powershell).</p>
<p>구성 변수는 세 가지 레벨 중 하나에 저장됩니다.</p>
<ol>
<li>시스템(System): <code>/etc/gitconfig</code>에 위치합니다. 로컬 시스템의 모든 사용자에게 기본 설정을 적용합니다. 이 파일을 변경하려면 <code>git config</code> 명령어와 함께 <code>--system</code> 옵션을 사용합니다.</li>
<li>사용자(User): <code>~/.gitconfig</code>, <code>~/.config/git/confi</code>에 위치합니다. 특정 사용자(즉, 현재 사용자)에게만 적용되는 설정을 저장합니다. 이 파일을 변경하려면 <code>git config</code> 명령어를 <code>--global</code> 옵션과 같이 사용합니다.</li>
<li>프로젝트(Project): <code>작업하는-프로젝트-이름/.git/config</code>에 위치합니다. 특정 저장소에만 설정을 적용합니다. 이 파일을 변경하려면 <code>git config</code> 명령어를 실행합니다.</li>
</ol>
<p>세 파일 간에 충돌하는 설정이 있는 경우 역순으로 높은 우선순위를 갖습니다. 즉, 프로젝트 설정이 사용자 설정보다 우선하고, 사용자 설정이 시스템 설정보다 우선합니다.</p>
<p>참고로 Windows 사용자의 경우 Git은 <code>$HOME</code> 디렉터리(<code>C:\Users\$USER</code>)에서 <code>.gitconfig</code> 사용자 설정 파일을 찾습니다. 일반적으로 <code>/etc/gitconfig</code> 시스템 설정 파일 또한 같은 경로에서 찾는데, 이 경로는 MSys 루트의 상대경로입니다. MSys 루트는 Git을 Windows에 설치할 때 결정됩니다. 'Git for Windows'(윈도우 Git) 2.0 이후 버전을 사용 중이라면 Windows XP 사용자는 <code>C:\Documents and Settings\All Users\Application Data\Git\config</code> 경로에서, Windows Vista 이후 버전 사용자는 <code>C:\ProgramData\Git\config</code> 경로에서 <code>/etc/gitconfig</code> 시스템 설정 파일을 찾을 수 있습니다. 이 시스템 설정 파일의 경로를 변경하려면 관리자 권한으로 <code>git config -f &lt;파일&gt;</code> 명령어를 실행해야 합니다.</p>
<h3 id="">이름, 이메일 설정하기</h3>
<p>Git은 커밋할 때마다 사용자 이름과 이메일 주소 정보를 저장합니다. 다음 명령어를 통해 사용자 설정 파일에 이를 미리 지정해둘 수 있습니다.</p>
<pre><code class="language-bash">git config --global user.name "영문 이름"
git config --global user.email "myemail@example.com"
</code></pre>
<h3 id="texteditor">편집기(text editor) 설정하기</h3>
<p>Git은 기본적으로 시스템의 기본 편집기를 사용하지만, 이 또한 변경할 수 있습니다. Atom 에디터를 대신 사용하려면 다음과 같은 명령어를 실행합니다(<code>--wait</code> 옵션은 설정된 편집기 작업이 끝날 때까지 셸(shell)을 대기시키는 옵션입니다).</p>
<pre><code class="language-bash">git config --global core.editor "atom --wait"
</code></pre>
<h3 id="git">Git 출력물에 색상 설정하기</h3>
<p>다음 명령어를 사용하면 셸 출력물에 색을 입힐 수 있습니다.</p>
<pre><code class="language-bash">git config --global color.ui true
</code></pre>
<p><code>git config --list</code> 명령어를 실행하면 지정되어 있는 모든 환경설정을 확인할 수 있습니다.</p>
<h2 id="git">Git 프로젝트 저장소 생성(초기화)하기</h2>
<p>Git로 버전 관리를 시작하려면 Git 설치와 환경설정을 마친 후 프로젝트에 Git 저장소를 생성(초기화)해야 합니다. 먼저 커맨드 라인에서 <code>cd</code>를 사용해 프로젝트의 루트 경로(root directory)로 이동합니다. 그 다음 <code>git init</code> 명령어를 실행하면 Git이 프로젝트를 관리하기 위해 필요한 파일과 객체가 담긴 <code>.git</code> 디렉터리 폴더가 설치됩니다.</p>
<p>이 <code>.git</code> 디렉터리 폴더가 프로젝트 루트 경로에 설치되어야 한다는 점을 명심하세요. Git은 해당 프로젝트의 하위 폴더에 대한 버전은 관리할 수 있지만, 상위 디렉터리의 파일은 추적하지 않습니다.</p>
<h2 id="git">Git 도움말 보기</h2>
<p>Git 명령어 작동법이 기억나지 않는다면 아래의 명령어 중 한 가지를 사용하여 커맨드 라인에서 도움말을 볼 수 있습니다.</p>
<pre><code class="language-bash">git help COMMAND
git COMMAND --help
man git-COMMAND
</code></pre>
<p>위의 명령어를 실행하면 Git 설명서가 셸 창에 나타납니다. 상하 화살표 키로 스크롤 하거나 다음 단축키를 사용하여 설명서 내용을 살펴볼 수 있습니다.</p>
<ul>
<li><code>f</code>, 스페이스 바: 페이지 앞으로 이동</li>
<li><code>b</code>: 페이지 뒤로 이동</li>
<li><code>q</code>: 설명서 창 나가기</li>
</ul>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python Modulus 나머지 연산자 - % 기호는 Python에서 무엇을 의미할까요? ]]>
                </title>
                <description>
                    <![CDATA[ % 기호를 보면 퍼센트를 생각할 수 있습니다. 그러나 Python을 비롯한 대부분의 프로그래밍 언어에서는 다른 의미를 가집니다. Python에서 % 기호는 나머지 연산자(modulo operator)라고 합니다. (모듈로 연산자라고 불리기도 합니다 -옮긴이). 이 연산자는 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 그 나머지를 반환합니다. 나눗셈 문제의 나머지를 계산할 때 사용합니다. 나머지 연산자는 +, -, /, ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/python-modulus/</link>
                <guid isPermaLink="false">62fc45f1b9e7840586029356</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Thu, 01 Sep 2022 06:07:50 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/08/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f73697a652f77323030302f323032302f30312f707974686f6e2d6d6f64756c6f2d696d6167652e6a7067.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/the-python-modulo-operator-what-does-the-symbol-mean-in-python-solved/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Python Modulo Operator - What Does the % Symbol Mean in Python? (Solved)</a>
      </p><!--kg-card-begin: markdown--><h3 id="python">% 기호를 보면 퍼센트를 생각할 수 있습니다. 그러나 Python을 비롯한 대부분의 프로그래밍 언어에서는 다른 의미를 가집니다.</h3>
<p>Python에서 <code>%</code> 기호는 나머지 연산자(modulo operator)라고 합니다. (모듈로 연산자라고 불리기도 합니다 -옮긴이). 이 연산자는 왼쪽 피연산자를 오른쪽 피연산자로 나눈 후 그 나머지를 반환합니다. 나눗셈 문제의 나머지를 계산할 때 사용합니다.</p>
<p>나머지 연산자는 <code>+</code>, <code>-</code>, <code>/</code>, <code>*</code>, <code>**</code>, <code>//</code>와 같은 산술 연산자입니다.</p>
<p>다음은 나머지 연산자의 기본 문법입니다.</p>
<pre><code class="language-python">a % b 
</code></pre>
<p>위의 예시에서 <code>a</code>는 <code>b</code>로 나누고 나머지를 반환합니다. 숫자가 들어간 예를 보겠습니다.</p>
<pre><code class="language-python">7 % 2
</code></pre>
<p>예시의 결과는 <strong>1</strong>입니다. 2이 7에 3번 들어간 후 나머지로 <strong>1</strong>이 남습니다.</p>
<p>아래 다이어그램은  <code>7 / 2</code> 와 <code>7 % 2</code> 산술식을 시각적으로 표현합니다 ("R" 는 "나머지"라는 뜻인 "remainder"를  의미합니다). 녹색 화살표가 가리키는 오른편 Python 로고는 나눗셈 문제의 나머지입니다. <code>7 % 2</code>의 답이기도 합니다.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/09/image-196.png" alt="7과2를 나누거나 모듈로 연산자를 사용했을 때의 결과를 표시해주는 그림" width="600" height="400" loading="lazy"></p>
<p>다음은 다른 예입니다.</p>
<pre><code class="language-python">3 % 4
</code></pre>
<p>결과는 <strong>3</strong>입니다. 4는 3이란 숫자에 아예 들어갈 수 없어서 <strong>3</strong>이 그대로 남습니다. 아래 다이어그램이 이 산술식을 표현합니다. 나머지 연산자는 나눗셈 후 남은 값을 반환합니다. 나머지는 3입니다.</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2019/09/image-197.png" alt="3과 4을 나누거나 모듈로 연산자를 사용했을 때의 결과를 표시해주는 그림" width="600" height="400" loading="lazy"></p>
<blockquote>
<p>다이어그램 해석: 3이란 숫자를 4로 나눌 수 없습니다</p>
</blockquote>
<h2 id="">나머지 연산자를 사용한 예시</h2>
<p>나머지 연산자의 일반적인 용도 중 하나는 짝수 또는 홀수를 찾는 것입니다. 아래 코드는 나머지 연산자 <code>%</code>를 사용해 0에서 10 사이의 모든 홀수를 출력합니다.</p>
<pre><code class="language-python">for number in range(1, 10):
    if(number % 2 != 0):
        print(number)
</code></pre>
<p>결과:</p>
<pre><code class="language-python">1
3
5
7
9
</code></pre>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript에서 forEach 함수를 사용해 배열 순회하기 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript의 forEach 메서드는 배열을 순회하는 여러 방법 중 하나입니다. 사용자는 실행하는 작업에 따라 각각의 특징을 고려하여 어떤 메서드를 사용할지 결정해야 합니다. 이 기사에서는 JavaScript의 forEach 메서드를 자세히 살펴보겠습니다. 다음과 같은 숫자 배열이 있습니다. const numbers = [1, 2, 3, 4, 5]; 기존의 for 반복문을 사용해 배열을 순회하는 방법은 다음과 같습니다. ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/javascript-foreach-how-to-loop-through-an-array/</link>
                <guid isPermaLink="false">62f456abb9e7840586029337</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Thu, 01 Sep 2022 05:19:18 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/08/68747470733a2f2f63646e2d6d656469612d322e66726565636f646563616d702e6f72672f77313238302f3566396339396438373430353639643161346361323230342e6a7067.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/javascript-foreach-how-to-loop-through-an-array-in-js/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript forEach – How to Loop Through an Array in JS</a>
      </p><!--kg-card-begin: markdown--><h3 id="javascriptforeach">JavaScript의 forEach 메서드는 배열을 순회하는 여러 방법 중 하나입니다. 사용자는 실행하는 작업에 따라 각각의 특징을 고려하여 어떤 메서드를 사용할지 결정해야 합니다.</h3>
<p>이 기사에서는 JavaScript의 forEach 메서드를 자세히 살펴보겠습니다.</p>
<p>다음과 같은 숫자 배열이 있습니다.</p>
<pre><code class="language-javascript">const numbers = [1, 2, 3, 4, 5];
</code></pre>
<p>기존의 <code>for</code> 반복문을 사용해 배열을 순회하는 방법은 다음과 같습니다.</p>
<pre><code class="language-javascript">for (i = 0; i &lt; numbers.length; i++) {
  console.log(numbers[i]);
} 
</code></pre>
<h2 id="foreach">forEach 메서드는 어떻게 다른가요?</h2>
<p>forEach 메서드도 배열을 순회하기 위해 사용되지만, 기본적인 <code>for</code> 반복문과는 다른 방식으로 함수를 사용합니다.</p>
<p>forEach 메서드는 다음 매개변수(parameter)와 함께 배열의 각 요소에 적용하게 될 콜백 함수(callback function)를 전달합니다.</p>
<ul>
<li>Current Value (명명된 매개변수) - 처리할 현재 요소</li>
<li>Index (선택적 매개변수) - 처리할 현재 요소의 인덱스</li>
<li>Array (선택적 매개변수) - forEach 메서드를 호출한 배열</li>
</ul>
<p>주어진 매개변수를 하나씩 설명하겠습니다.</p>
<p>우선 forEach 메서드를 사용해 배열을 순회하려면 콜백 함수 또는 익명 함수가 필요합니다.</p>
<pre><code class="language-javascript">numbers.forEach(function() {
    // code
});
</code></pre>
<p>콜백 함수는 각 요소에 대해 실행되며, 배열의 요소를 나타내는 매개변수를 반드시 하나 이상 사용해야 합니다.</p>
<pre><code class="language-javascript">numbers.forEach(function(number) {
    console.log(number);
});
</code></pre>
<p>그럼 배열을 순회해볼까요?</p>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/Ads-z-2.png" alt="배열 순회하면서 1에서 5 숫자를 출력한다" width="600" height="400" loading="lazy"></p>
<p>ES6 화살표 함수 표현을 사용하면 코드를 단순화할 수 있습니다.</p>
<p>화살표 함수 표현 예시:</p>
<pre><code class="language-javascript">numbers.forEach(number =&gt; console.log(number));
</code></pre>
<h2 id="">선택적 매개변수</h2>
<h3 id="index">인덱스(Index)</h3>
<p>이어서 선택적 매개변수에 대해 알아봅시다.</p>
<p>첫 번째 선택적 매개변수는 각 요소의 순서를 나타내는 인덱스입니다.</p>
<p>즉 두 개의 매개변수를 활용하여 메서드를 사용하면 두 번째 매개변수를 통해 요소의 인덱스를 확인할 수 있습니다.</p>
<pre><code class="language-javascript">numbers.forEach((number, index) =&gt; {
    console.log('Index: ' + index + ' Value: ' + number);
});
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/06/Ads-z-3.png" alt="배열 순회하면서 인덱스와 주어진 값을 출력한다" width="600" height="400" loading="lazy"></p>
<h3 id="array">배열(Array)</h3>
<p>배열 매개변수는 필요에 따라 다양하게 활용할 수 있는 선택적 매개변수로, 원본 배열 그 자체입니다. 단순히 호출하기만 하면 배열의 요소 수만큼 배열이 출력되는 것을 볼 수 있습니다.</p>
<pre><code class="language-javascript">numbers.forEach((number, index, array) =&gt; {
    console.log(array);
});
</code></pre>
<p><img src="https://www.freecodecamp.org/news/content/images/2020/07/Ads-z.png" alt="배열을 순회하면서 요소 값을 매번 출력한다" width="600" height="400" loading="lazy"></p>
<p>다음 영상에서는 forEach 메서드의 활용 사례를 볼 수 있습니다 (주석: 원문 글쓴이의 영상이기 때문에 내용은 영어로 되어있습니다).</p>
<figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.25%;" class="fluid-width-video-wrapper">
            <iframe width="560" height="315" src="https://www.youtube.com/embed/E2GawbHDFfs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0"></iframe>
          </div>
        </div>
      </figure>
<h2 id="">브라우저 지원</h2>
<p>Array.forEach 메서드는 IE 버전 8 이하를 제외한 모든 브라우저에서 지원됩니다.</p>
<figure>
    <img src="https://www.freecodecamp.org/news/content/images/2020/06/Ads-z.png" alt="caniuse.com 웹사이트 스크린샷" width="600" height="400" loading="lazy">
    <figcaption>caniuse.com</figcaption>
</figure>
<p>제 <a href="https://www.youtube.com/channel/UC1EgYPCvKCXFn8HlpoJwY3Q?view_as=subscriber">유튜브 채널</a>에서 웹 개발에 대해 더 자세한 내용을 확인해보세요.</p>
<p>읽어주셔서 감사합니다.</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python 리스트 길이 구하는 방법 ]]>
                </title>
                <description>
                    <![CDATA[ Python에서는 리스트를 사용해 문자열 및 숫자와 같은 다양한 유형의 데이터를 저장합니다. 리스트를 정의할 때는 대괄호 []가 사용되며, 개별 값 및 항목은 쉼표로 구분됩니다. Python 리스트의 길이를 확인하려면 내장 함수 len() 을 사용하면 됩니다. len() 함수 외에도 for문과 length_hint() 함수를 사용해 리스트의 길이를 구할 수 있습니다. 이 기사에서는 리스트의 길이를 구하는 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/how-to-get-python-list-length/</link>
                <guid isPermaLink="false">62f22895b9e784058602932d</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Mon, 22 Aug 2022 19:59:40 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/08/68747470733a2f2f7777772e66726565636f646563616d702e6f72672f6e6577732f636f6e74656e742f696d616765732f73697a652f77323030302f323032322f30332f63616c656e6461722d673265643838343765665f313238302e6a7067.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/python-list-length-how-to-get-the-size-of-a-list-in-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python List Length – How to Get the Size of a List in Python</a>
      </p><!--kg-card-begin: markdown--><h3 id="python">Python에서는 리스트를 사용해 문자열 및 숫자와 같은 다양한 유형의 데이터를 저장합니다.</h3>
<p>리스트를 정의할 때는 대괄호 <code>[]</code>가 사용되며, 개별 값 및 항목은 쉼표로 구분됩니다.</p>
<p>Python 리스트의 길이를 확인하려면 내장 함수 <code>len()</code> 을 사용하면 됩니다.</p>
<p><code>len()</code> 함수 외에도 <code>for</code>문과 <code>length_hint()</code> 함수를 사용해 리스트의 길이를 구할 수 있습니다.</p>
<p>이 기사에서는 리스트의 길이를 구하는 세 가지 방법을 보여드리겠습니다.</p>
<h2 id="forpython"><code>For</code>문을 사용해 Python 리스트의 길이 구하는 방법</h2>
<p>튜플, 딕셔너리와 마찬가지로 리스트는 반복 가능한 이터러블(iterable)한 객체이기 때문에, Python의 <code>for</code>문을 사용해 리스트의 길이를 구할 수 있습니다.</p>
<p>이 방법을 일반적으로 나이브 메서드(naïve method)라고 합니다.</p>
<p>아래 예시는 나이브 메서드를 사용해 Python에서 리스트의 길이를 가져오는 방법을 보여줍니다.</p>
<pre><code class="language-python">demoList = ["Python", 1, "JavaScript", True, "HTML", "CSS", 22]

# 카운터 변수를 생성합니다 
counter = 0

for item in demoList:
    # 리스트의 각 항목을 가져오기 위해 카운터 변수를 1씩 증가시킵니다 
    counter = counter + 1

    # 카운터 변수를 문자열로 변환해 결과를 콘솔에 출력합니다 
print("나이브 메서드(naive method)를 사용해 구한 리스트 길이의 값은: " + str(counter) + "입니다")
# 출력된 값: 나이브 메서드(naive method)를 사용해 구한 리스트 길이의 값은: 7입니다

</code></pre>
<h2 id="len"><code>len()</code> 함수를 사용해 리스트의 길이 구하는 방법</h2>
<p>반복 가능한 객체의 길이를 구하는 가장 일반적인 방법은 <code>len()</code> 함수를 사용하는 것입니다.</p>
<p>이 방법은 <code>for</code>문을 사용하는 것보다 더 간단합니다.</p>
<p><code>len()</code> 메서드를 사용하는 구문은 <code>len(리스트이름)</code>입니다.</p>
<p>아래 코드 블록은 <code>len()</code> 함수를 사용해 리스트의 길이를 가져오는 방법입니다:</p>
<pre><code class="language-python">demoList = ["Python", 1, "JavaScript", True, "HTML", "CSS", 22]

sizeOfDemoList = len(demoList)

print("출력된 값: len() 메서드를 사용해 구한 리스트 길이의 값은: " + str(sizeOfDemoList) + "입니다")
# 출력된 값: len() 메서드를 사용해 구한 리스트 길이의 값은: 7입니다
</code></pre>
<h2 id="length_hint"><code>length_hint()</code> 함수를 사용해 리스트의 길이 구하는 방법</h2>
<p><code>length_hint()</code> 메서드는 리스트 및 기타 반복 가능한 객체들의 길이를 구하는 덜 알려진 방법입니다.</p>
<p><code>length_hint()</code>는 operator 모듈에 정의되어 있어서 사용하려면 먼저 Python에서 불러와야 합니다.</p>
<p><code>length_hint()</code>를 사용하는 구문은 <code>length_hint(리스트이름)</code>입니다.</p>
<p>아래 예시는 <code>length_hint()</code> 메서드를 사용해 리스트의 길이를 가져오는 방법입니다:</p>
<pre><code class="language-python">from operator import length_hint

demoList = ["Python", 1, "JavaScript", True, "HTML", "CSS", 22]

sizeOfDemoList = length_hint(demoList)
print("length_hint() 메서드를 이용해 구한 리스트 길이의 값은: " + str(sizeOfDemoList) + "입니다")
# 출력된 값: length_hint() 메서드를 이용해 구한 리스트 길이의 값은: 7입니다 

</code></pre>
<h2 id="">글을 마치며</h2>
<p>이 기사에서는 <code>for</code>문, <code>len()</code> 함수 및 operator 모듈의 <code>length_hint()</code> 함수의 세 가지 방법으로 리스트의 길이를 구하는 방법을 다뤘습니다.</p>
<p>이 세 가지 방법 중 어떤 방법을 사용해야 할지 궁금할 수 있습니다.</p>
<p><code>for</code>문과 <code>length_hint()</code> 함수에 비해 사용법이 간단한 <code>len()</code>함수를 추천합니다.</p>
<p>또한 <code>len()</code>의 실행 속도는 <code>for</code>문과 <code>length_hint()</code>보다 빠른 편입니다.</p>
<p>글이 도움이 되었다면 이 글이 필요한 다른 분들도 볼 수 있도록 공유해 주세요.</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Git 브랜치 전환하는 방법 ]]>
                </title>
                <description>
                    <![CDATA[ Git에서 자주 하는 일 중 하나는 브랜치 전환입니다. 브랜치 전환은 git checkout 명령어를 사용하면 됩니다. 새 브랜치 생성하기 새 브랜치를 만드려면 git checkout 명령어와 함께 -b 플래그와 새 브랜치 이름을 전달해야 합니다. 명령어가 실행되면 현재 작업 중인 브랜치에서 새 브랜치가 생성됩니다. 새 브랜치의 커밋 히스토리는 작업하고 있던 브랜치의 마지막 커밋에서 ]]>
                </description>
                <link>https://www.freecodecamp.org/korean/news/git-switch-branch/</link>
                <guid isPermaLink="false">62ea3891b9e78405860292b5</guid>
                
                    <category>
                        <![CDATA[ Git ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Boyeon Ihn ]]>
                </dc:creator>
                <pubDate>Thu, 04 Aug 2022 06:52:10 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/korean/news/content/images/2022/08/68747470733a2f2f63646e2d6d656469612d322e66726565636f646563616d702e6f72672f77313238302f36303737303734.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>기사 원문:</strong> <a href="https://www.freecodecamp.org/news/git-fetch-vs-pull/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Git Fetch vs Pull: What's the Difference Between the Git Fetch and Git Pull Commands?</a>
      </p><!--kg-card-begin: markdown--><h3 id="git">Git에서 자주 하는 일 중 하나는 브랜치 전환입니다.</h3>
<p>브랜치 전환은 <code>git checkout</code> 명령어를 사용하면 됩니다.</p>
<h2 id="">새 브랜치 생성하기</h2>
<p>새 브랜치를 만드려면 <code>git checkout</code> 명령어와 함께 <code>-b</code> 플래그와 새 브랜치 이름을 전달해야 합니다.</p>
<p>명령어가 실행되면 현재 작업 중인 브랜치에서 새 브랜치가 생성됩니다. 새 브랜치의 커밋 히스토리는 작업하고 있던 브랜치의 마지막 커밋에서 시작됩니다.</p>
<p>현재 작업 중인 브랜치가 <code>main</code>이라고 가정해봅시다.</p>
<pre><code>(main)$ git checkout -b my-feature
Switched to a new branch 'my-feature'
(my-feature)$
</code></pre>
<p><code>main</code>에서 <code>my-feature</code>라는 새 브랜치가 생성된 것을 확인할 수 있습니다.</p>
<h2 id="git">Git에서 생성된 브랜치로 전환하기</h2>
<p>다른 브랜치로 전환하려면 <code>git checkout</code>을 <code>-b</code> 플래그 없이 다시 사용합니다. 이동하고 싶은 브랜치의 이름을 명령어와 같이 전달합니다.</p>
<p>예시:</p>
<pre><code>(my-feature)$ git checkout main
Switched to branch 'main'
(main)$
</code></pre>
<p>이전 브랜치로 돌아가려면 브랜치 이름 대신 <code>-</code>를 <code>git checkout</code>과 함께 사용하는 편리한 방법도 있습니다.</p>
<pre><code>(my-feature)$ git checkout -
Switched to branch 'main'
(main)$ git checkout -
Switched to branch 'my-feature'
(my-feature)$
</code></pre>
<h2 id="">특정 커밋으로 이동하기</h2>
<p>특정 커밋으로 이동하는 것도 <code>git checkout</code>로 가능합니다. 대신 브랜치 이름이 아닌 <a href="https://ko.wikipedia.org/wiki/SHA">SHA(Secure Hash Algorithm, 안전한 해시 알고리즘)</a>를 명령어와 함께 전달해야 합니다.</p>
<p>브랜치는 사실상 특정 커밋들을 기록하는 포인터 같은 개체이기 때문에 특정 커밋으로의 이동 또한 브랜치 전환과 크게 다르지 않습니다.</p>
<h3 id="sha">커밋 SHA 찾기</h3>
<p>특정 커밋의 SHA를 찾는 한 가지 방법은 Git 로그를 조회하는 것입니다.</p>
<p>이때 <code>git log</code> 명령어를 사용합니다.</p>
<pre><code>(my-feature)$ git log
commit 94ab1fe28727b7f8b683a0084e00a9ec808d6d39 (HEAD -&gt; my-feature, main)
Author: John Mosesman &lt;johnmosesman@gmail.com&gt;
Date:   Mon Apr 12 10:31:11 2021 -0500

    This is the second commmit message.

commit 035a128d2e66eb9fe3032036b3415e60c728f692 (blah)
Author: John Mosesman &lt;johnmosesman@gmail.com&gt;
Date:   Mon Apr 12 10:31:05 2021 -0500

    This is the first commmit message.
</code></pre>
<p>각 커밋 기록의 첫 번째 줄에는 <code>commit</code>이라는 단어 뒤에 숫자와 문자가 조합된 긴 문자열이 있습니다: <code>94ab1fe28727...</code></p>
<p>이 문자열이 SHA입니다. SHA는 특정 커밋을 가리키는 고유 식별자입니다.</p>
<p>특정 커밋으로 이동하려면 커밋의 SHA를 <code>git checkout</code> 매개변수로 전달하면 됩니다.</p>
<p>예시:</p>
<pre><code>(my-feature)$ git checkout 035a128d2e66eb9fe3032036b3415e60c728f692
Note: switching to '035a128d2e66eb9fe3032036b3415e60c728f692'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c &lt;new-branch-name&gt;

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 035a128 a
((HEAD detached at 035a128))$
</code></pre>
<blockquote>
    <p>
        <strong>참고:</strong> 일반적으로 SHA 값의 앞 4-5자만으로도 저장소 안에서 특정 커밋을 충분히 식별할 수 있기 때문에 SHA의 앞 몇 글자로 줄여 써도 됩니다. 
    </p>
</blockquote>
<h2 id="detachedheadhead">detached HEAD(떨어져나온 HEAD) 상태의 의미</h2>
<p>특정 커밋을 체크아웃하면 "detached HEAD" 상태가 됩니다.</p>
<p><a href="https://git-scm.com/docs/git-checkout#_detached_head">Git 설명서</a>에 의하면:</p>
<blockquote>
    <p>
        [a detached HEAD state(떨어져나온 HEAD 상태)]는 `HEAD`가 특정 브랜치가 아닌 특정 커밋을 직접 참조하고 있는 상태를 말합니다.
    </p>
</blockquote>
<p><code>HEAD</code>는 Git 히스토리 안에서 사용자가 현재 어느 지점에 있는지 기록하는 Git의 내부 포인터 중 하나입니다. "Detached HEAD" 상태는 <code>HEAD</code>가 기존 브랜치에서 우회했다는 것을 의미합니다. 이 시점에서 새 변경 사항이 발생하면 Git 히스토리에서 새로운 경로가 생성됩니다.</p>
<p>Git은 사용자가 "detached HEAD" 상태에서 작업하고 싶다는 것을 확인하기 위해 실험적인 변경이 가능한 "여유 공간"을 제공합니다.</p>
<p>출력된 메세지에 의하면:</p>
<pre><code>You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

한글 번역: 
현재 '떨어져나간 HEAD' 상태에 있습니다. 둘러보고 실험적 변경을 실행하고 커밋할 수 있습니다.
또한 브랜치 전환을 하면 다른 브랜치에 영향을 주지 않고 
'떨어져나간 HEAD' 상태 중 실행한 커밋을 취소할 수 있습니다.
</code></pre>
<p>이런 경우 두 가지 옵션이 있습니다.</p>
<ul>
<li>실험한 다음 이전 브랜치로 돌아가 변경 사항을 취소하기</li>
<li>작업 후 이 지점부터 새 브랜치 생성하기</li>
</ul>
<p><code>git switch</code> 명령어를 통해 변경한 내용을 취소하고 이전 브랜치로 돌아갈 수 있습니다.</p>
<p>변경 이력을 유지한 상태로 작업을 계속하려면 <code>git switch -c &lt;새-브랜치-이름&gt;</code>를 사용해 현재 커밋 히스토리부터 시작하는 <i>새 브랜치</i>를 만들 수 있습니다.</p>
<h2 id="">요약</h2>
<p><code>git checkout</code> 명령어는 여러모로 유용한 명령어입니다.</p>
<p>이 명령어 하나로 브랜치 생성, 브랜치 전환, 특정 커밋 이동 등과 같은 작업이 가능합니다.</p>
<p>이 튜토리얼이 마음에 드셨다면, 제 <a href="https://twitter.com/johnmosesman">트위터 계정</a>과 <a href="https://johnmosesman.com/">사이트</a>를 통해 이런 주제에 대한 글을 확인할 수 있습니다.</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
