<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>pdistudy_02.log</title>
        <link>https://velog.io/</link>
        <description>IT취준을 희망하는 대학생. Do it! Do velog!</description>
        <lastBuildDate>Thu, 10 Sep 2026 18:27:53 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>pdistudy_02.log</title>
            <url>https://velog.velcdn.com/images/pdistudy_02/profile/c87c512c-7206-4799-b9aa-747bea55d051/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. pdistudy_02.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/pdistudy_02" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[AIO 프리코스 2일차 학습회고 ㅣ Python ch.4 (반복문 · 리스트 · 딕셔너리)]]></title>
            <link>https://velog.io/@pdistudy_02/AIO-%ED%94%84%EB%A6%AC%EC%BD%94%EC%8A%A4-%ED%95%99%EC%8A%B5-2%EC%9D%BC%EC%B0%A8-%ED%9A%8C%EA%B3%A0-Python-ch.4-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC</link>
            <guid>https://velog.io/@pdistudy_02/AIO-%ED%94%84%EB%A6%AC%EC%BD%94%EC%8A%A4-%ED%95%99%EC%8A%B5-2%EC%9D%BC%EC%B0%A8-%ED%9A%8C%EA%B3%A0-Python-ch.4-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%94%95%EC%85%94%EB%84%88%EB%A6%AC</guid>
            <pubDate>Thu, 10 Sep 2026 18:27:53 GMT</pubDate>
            <description><![CDATA[<h4 id="오늘-다룬-범위">오늘 다룬 범위</h4>
<p><strong>4. 시퀀스 자료형: *<em>리스트, 튜플, 세트, 딕셔너리
*</em>5. 제어문:</strong> for문, while/break/continue, List comprehension</p>
<hr>
<h2 id="1-리스트">1. 리스트</h2>
<p>리스트는 파이썬에서 가장 유연한 자료형이라고 했다. 대괄호로 요소를 담고, 순서(인덱스)가 있어서 인덱싱·슬라이싱이 되고, 수정·삽입·삭제가 자유로운 가변 자료형이라는 게 핵심 개념이었다.</p>
<p><strong>실습</strong></p>
<ul>
<li><code>squares = [1, 4, 9]</code>를 만들고 <code>len()</code>으로 길이 확인, 인덱싱(<code>squares[0]</code>, <code>squares[-1]</code>)과 슬라이싱(<code>squares[:]</code>) 실습</li>
<li>리스트끼리 <code>+</code>로 합치기, <code>*</code>로 반복하기 (단, 원본 리스트에 재할당하지 않으면 값은 그대로 유지된다는 것도 확인)</li>
<li><code>cubes</code> 리스트에서 세제곱 값 하나가 잘못 들어간 걸(65 → 64) 인덱싱으로 직접 수정, <code>letters</code> 리스트는 슬라이싱으로 두 개 요소를 한 번에 교체(이때 교체할 요소 개수가 같아야 한다는 조건 확인)</li>
<li>리스트 안에 리스트(중첩 리스트)를 만들고, 인덱싱을 두 번 해서 안쪽 요소까지 접근</li>
<li><code>in</code>으로 특정 값이 리스트에 있는지 True/False로 확인</li>
<li>append(끝에 추가), insert(위치 지정 추가), extend(리스트끼리 합치기), remove(값으로 첫 번째 요소 삭제), pop(마지막 요소 반환하면서 삭제), index(첫 위치 찾기), count(개수 세기), sort(정렬, 반환값 None), reverse(순서만 뒤집기, 정렬 아님), clear(전체 삭제)를 하나씩 직접 실행</li>
<li>리스트를 스택처럼 활용하는 실습: append로 값을 쌓고 pop을 반복 호출해서 나중에 넣은 값부터 꺼내지는 걸 직접 확인 (LIFO)</li>
</ul>
<blockquote>
<p><strong>&quot;Talk&quot;</strong>
메소드 종류가 많아서 처음엔 다 외워야 하나 싶었는데, append와 pop만으로 스택 구조가 만들어지는 걸 직접 보니까 문법이 아니라 &quot;왜 이 메소드를 쓰는가&quot;가 먼저 이해돼야 한다는 걸 알았다.</p>
</blockquote>
<hr>
<h2 id="2-튜플">2. 튜플</h2>
<p>튜플은 리스트와 거의 같은데 소괄호를 쓰고, 불변이라는 점만 다르다고 했다. 그래서 수정·삽입·삭제는 안 되고 조회(인덱싱, 슬라이싱)만 가능하다.</p>
<p><strong>실습</strong></p>
<ul>
<li>소괄호로 튜플 생성, <code>type()</code>으로 확인</li>
<li>빈 튜플을 만드는 두 가지 방법: <code>()</code>와 <code>tuple()</code></li>
<li><code>x1[1] = ...</code>처럼 인덱싱으로 값을 바꾸려 하면 에러, 슬라이싱으로 값을 넣으려 해도 에러, <code>del</code>로 요소를 지우려 해도 에러 — 세 가지를 직접 실행해서 &quot;불변&quot;을 눈으로 확인</li>
<li>소괄호를 생략하고 콤마만으로 튜플을 만드는 것도 가능하다는 것 확인 (<code>type()</code>으로 튜플임을 검증)</li>
</ul>
<blockquote>
<p><strong>&quot;Talk&quot;</strong>
&quot;다 되는 리스트를 두고 왜 굳이 제약 있는 튜플을 쓰나&quot; 싶었는데, 리스트는 크기가 계속 변할 수 있어서 메모리 구조가 복잡하고 튜플은 고정이라 더 빠르게 동작한다는 설명을 듣고 납득했다. 변하지 않아야 하는 값에는 튜플을 쓰라는 말이 인상적이었다.</p>
</blockquote>
<hr>
<h2 id="3-세트">3. 세트</h2>
<p>세트는 중복을 허용하지 않고 순서도 없는 자료형이다. 중괄호를 쓰지만 딕셔너리와 달리 키:값이 아니라 값 하나만 요소로 갖는다.</p>
<p><strong>실습</strong></p>
<ul>
<li><code>{}</code>로 만들면 딕셔너리가 되어버려서, 빈 세트는 반드시 <code>set()</code> 함수로 만들어야 한다는 것 확인</li>
<li><code>add()</code>로 같은 값을 여러 번 넣어도 하나만 남는 것을 직접 확인 (중복 저장 안 됨)</li>
<li><code>remove()</code>로 값 삭제, 없는 값을 remove하면 에러 발생 → <code>discard()</code>는 없는 값이어도 에러 없이 넘어간다는 차이 확인</li>
<li><code>pop()</code>은 리스트처럼 마지막 요소가 아니라 임의의 요소를 삭제 (순서가 없기 때문)</li>
<li><code>clear()</code>로 전체 삭제, <code>len()</code>으로 요소 개수 확인</li>
<li>합집합(<code>union()</code> / <code>|</code>), 교집합(<code>intersection()</code> / <code>&amp;</code>), 차집합(<code>difference()</code> / <code>-</code>)을 직접 계산, <code>update()</code>류로 A 자체에 결과를 덮어쓰는 복합대입 실습</li>
<li>부분집합(<code>issubset</code>)·상위집합(<code>issuperset</code>)·겹치는 값 없는지(<code>isdisjoint</code>) 판별</li>
</ul>
<blockquote>
<p><strong>&quot;Talk&quot;</strong>
문법 자체는 리스트보다 단순했는데, 교집합·차집합 개념이 숫자 예제로만 다뤄지다 보니 &quot;이걸 실제로 어디에 쓰나&quot;는 아직 감이 잘 안 잡힌다. 중복 제거 용도로는 확실히 쓸 것 같은데 집합 연산 부분은 좀 더 예제를 봐야 할 것 같다.</p>
</blockquote>
<hr>
<h2 id="4-딕셔너리">4. 딕셔너리</h2>
<p>딕셔너리는 순서가 없는 자료형(단, 최신 파이썬에서는 입력 순서가 어느 정도 보장된다고도 언급됨)이라 인덱스 대신 키로 값에 접근한다. 키:값을 콜론으로, 요소끼리는 콤마로 구분한다.</p>
<p><strong>실습</strong></p>
<ul>
<li>딕셔너리 생성, <code>type()</code> 확인, 같은 키로 두 번 값을 넣으면 마지막 값으로 덮어써지는 것을 직접 확인</li>
<li>키로 문자열/정수/실수/불리언/튜플을 섞어서 써봤는데, 이 과정에서 <code>True</code>와 <code>1</code>이 같은 키로 취급되어 값이 덮어써지는 걸 직접 확인 — 처음엔 왜 값 하나가 사라졌는지 못 알아챘다가, 파이썬에서 True==1이라는 걸 뒤늦게 깨달음</li>
<li>값(value)에는 리스트를 포함해 어떤 자료형이든 올 수 있다는 것을 문자열/정수/실수/불리언/튜플/리스트를 섞어 만들어보며 확인, <code>.values()</code>와 <code>map(type, ...)</code>으로 값들의 타입을 리스트로 뽑아 검증</li>
<li>빈 딕셔너리를 <code>{}</code>와 <code>dict()</code> 두 가지로 생성</li>
<li><code>dict(키=값, ...)</code> 형태로 만들면 키가 무조건 문자열로 고정된다는 제약을 직접 실험 (숫자를 키 자리에 쓰면 에러)</li>
<li>그 제약을 우회하는 방법으로 <code>dict([(키, 값), (키, 값)])</code>처럼 튜플/리스트 쌍을 넣는 방법, 그리고 <code>zip(keys, values)</code>로 키 리스트와 값 리스트를 묶어서 <code>dict(zip(...))</code>로 변환하는 방법까지 실습</li>
<li>키로 인덱싱해서 값 조회, 값 재할당, 없는 키에 값을 할당하면 새 요소가 추가된다는 것 확인, 없는 키를 조회하면 KeyError 발생</li>
<li><code>in</code>으로 키 존재 여부 확인 (<code>.values()</code>를 거치면 값 존재 여부도 확인 가능)</li>
<li><code>del</code>로 특정 키 삭제, <code>len()</code>으로 요소(=키의 개수=값의 개수) 확인</li>
</ul>
<blockquote>
<p><strong>&quot;Talk&quot;</strong>
사실 딕셔너리는 예전에 <a href="https://blog.naver.com/ej_diary510/224401862566">네이버 블로그</a>에서 한 번 정리했던 적이 있어서 &quot;아는 내용이겠지&quot; 하고 가볍게 들었는데, 착각이었다. 키에 어떤 자료형이 올 수 있는지, <code>dict()</code> 함수를 쓰면 키가 문자열로 고정된다는 제약이나 그걸 zip으로 우회하는 방법, True와 1이 충돌한다는 디테일 같은 건 전혀 몰랐던 내용이었다. 지금까지 개념을 너무 얕게 학습해왔다는 걸 이번 강의에서 확실히 체감했고, &quot;들어본 개념&quot;과 &quot;설명할 수 있는 개념&quot;은 다르다는 걸 다시금 느꼈다.</p>
</blockquote>
<hr>
<h2 id="5-for문">5. for문</h2>
<p>&quot;Hello World&quot;를 1000번 출력해야 하는데 문구가 바뀌면 1000줄을 일일이 고쳐야 하는 상황을 예시로 들면서 반복문의 필요성을 설명했다. for문은 반복 가능한(iterable) 대상에서 요소를 하나씩 꺼내 변수에 담고, 그때마다 코드 블록을 한 번씩 실행하는 구조다.</p>
<p><strong>실습</strong></p>
<ul>
<li><code>range(1000)</code>으로 &quot;Hello World&quot;를 반복 출력 (실습에서는 10번, 5번으로 줄여서 확인)</li>
<li><code>range(시작, 끝, 증감)</code>의 동작 원리 확인: 끝 값은 미만으로 처리되고, 생략 시 시작은 0, 증감은 1이 기본값</li>
<li><code>range(2, 100, 20)</code>처럼 규칙적인 숫자를 만들고, <code>list()</code>로 감싸서 실제 리스트로 변환</li>
<li>range는 리스트처럼 보이지만 필요할 때마다 값을 만들어 내는 반면, 리스트는 모든 값을 메모리에 미리 만들어 둔다는 차이점 설명</li>
<li>문자열, 튜플도 for문으로 반복 가능하다는 것을 직접 실행 (문자열은 한 글자씩 순회)</li>
<li><code>reversed()</code>로 문자열을 거꾸로 출력해서 &quot;olleh&quot; 만들기</li>
<li><code>range(len(리스트))</code>로 인덱스 번호를 만들어서 인덱싱하는 방식으로 &quot;가나다라&quot; 리스트를 순회<blockquote>
<p><strong>&quot;Talk&quot;</strong>
1000줄 예시가 와닿았다. 반복 작업을 손으로 하다가 실수하는 상황이 실무에서도 똑같이 생길 것 같아서, for문이 단순히 코드를 줄이는 문법이 아니라 실수를 막는 장치라는 설명이 기억에 남는다.</p>
</blockquote>
</li>
</ul>
<hr>
<h2 id="6-while--break--continue">6. while / break / continue</h2>
<p>while문은 for문처럼 요소 개수만큼이 아니라 &quot;조건이 참인 동안&quot; 반복한다. 보통 초기식 → 조건식 → (블록 실행) → 증감식 순으로 구성되고, 증감식을 빠뜨리면 무한루프가 된다는 주의사항이 강조됐다. break는 반복문을 완전히 빠져나가는 것, continue는 그 회차만 건너뛰고 반복은 계속 유지하는 것이라는 차이도 다뤘다.
<img src="https://velog.velcdn.com/images/pdistudy_02/post/c252751a-0543-4251-8863-090e6b837d41/image.png" alt=""></p>
<p><strong>실습</strong></p>
<ul>
<li><p><code>i = 0</code>, <code>while i &lt; 10:</code>, 블록 안에서 <code>i += 1</code>로 &quot;Hello World&quot; 10번 출력 (증감식을 빼먹어서 무한루프가 나는 걸 직접 겪고 커널 재시작으로 복구)</p>
</li>
<li><p>사용자 입력값을 카운터로 받아 3, 2, 1까지 출력하고 0이 되면 반복이 끝나는 카운트다운 예제</p>
</li>
<li><p><code>idx</code>를 인덱스처럼 활용해서 <code>[98, 89, 28]</code> 리스트를 while문으로 순회하며 인덱싱</p>
</li>
<li><p><code>range(100)</code> 반복 중 값이 100이 될 때 break로 빠져나가는 예제, 그리고 점수 리스트를 순회하다 특정 값(92)을 만나면 break로 멈추는 예제</p>
</li>
<li><p><code>while True:</code> 무한루프에 조건 + break를 결합해서 i가 100이 되면 빠져나가는 예제 (input과 조합하면 사용자가 원하는 값을 입력할 때까지 계속 반복시킬 수 있다는 응용까지 언급)
<img src="https://velog.velcdn.com/images/pdistudy_02/post/8a60b460-0776-4fce-be3b-1780bc936ac0/image.png" alt=""></p>
</li>
<li><p><code>range(100)</code> 반복 중 2의 배수를 만나면 continue로 건너뛰어 홀수만 출력하는 예제, 같은 로직을 while문으로도 다시 작성
<img src="https://velog.velcdn.com/images/pdistudy_02/post/731da0e4-ec49-4afc-8983-4399400700b5/image.png" alt=""></p>
</li>
</ul>
<blockquote>
<p><strong>&quot;Talk&quot;</strong>
증감식을 빼먹어서 무한루프가 나는 걸 직접 겪어보니 왜 이걸 강의에서 계속 강조하는지 체감이 됐다. for문이 &quot;몇 번&quot;을 기준으로 한다면 while문은 &quot;어떤 조건까지&quot;를 기준으로 한다는 차이가 명확해졌고, 예전에 네이버 블로그에 정리했던 AI 프로젝트 설계 때도 비슷한 로직(사용자가 원하는 값을 입력할 때까지 반복)을 감으로 짰던 게 생각났는데, 이번엔 초기식·조건식·증감식 구조로 정확하게 뜯어보면서 복기할 수 있어서 좋았다.</p>
</blockquote>
<hr>
<h2 id="7-리스트-컴프리헨션">7. 리스트 컴프리헨션</h2>
<p><img src="https://velog.velcdn.com/images/pdistudy_02/post/bf4f9c3b-eb7b-4d04-91e2-70491f0bc6ea/image.png" alt=""><code>[표현식 for 변수 in 이터러블]</code> 형태로, for문으로 반복하면서 요소를 가공해 새 리스트를 한 줄로 만드는 문법이다. 조건문을 붙여서 특정 조건을 만족하는 값만 담을 수도 있지만 elif·else는 쓸 수 없다는 제약이 있다.</p>
<p><strong>실습</strong>
<img src="https://velog.velcdn.com/images/pdistudy_02/post/874bbf69-d2d4-4f71-b2fa-9db363ac1d57/image.png" alt=""></p>
<ul>
<li><code>[i for i in range(1, 10)]</code>로 1~9 리스트 만들기</li>
<li>조건을 추가해서 <code>range(10)</code> 중 3의 배수만 담는 리스트 만들기</li>
<li>2의 배수만 걸러서 제곱한 값으로 담는 리스트 만들기 (<code>[i**2 for i in range(10) if i % 2 == 0]</code> 형태)</li>
<li>리스트 컴프리헨션 안에 <code>print()</code>처럼 반환값이 없는 걸 넣으면 <code>None</code>만 쌓인 리스트가 된다는 주의사항, for문을 중첩해서 쓸 수도 있다는 것까지 언급</li>
</ul>
<blockquote>
<p><strong>&quot;Talk&quot;</strong>
문법 자체는 생소했지만 for문의 동작 원리를 이미 이해하고 있어서 따라가는 데 어렵지 않았다. 같은 결과를 더 간결하게 만드는 방법이라는 게 신선했다.</p>
</blockquote>
<hr>
<h2 id="todays-회고">Today&#39;s 회고</h2>
<p>ch.4는 자료형(리스트/튜플/세트/딕셔너리)과 반복문(for/while/리스트 컴프리헨션)을 훑는 회차였다. 리스트·튜플·세트는 아직 실습을 따라치는 수준이라 완전히 소화됐다고 말하긴 어렵고, 딕셔너리는 예전에 이미 안다고 생각했던 부분이 사실 얕은 이해였다는 걸 확인한 게 오늘의 소득이었다. for/while/continue/break는 이전에 다뤄본 적 있는 로직을 훨씬 구조적으로 다시 짚을 수 있어서 유익했다. 내용이 꽤 길어 생각보다 진도는 많이 못 나갔지만, 실습 하나하나 놓치지 않고 하는 것에 보다 큰 의미를 두어야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AIO 프리코스 1일차 학습회고 ㅣ 파이썬 기초 문법 정리]]></title>
            <link>https://velog.io/@pdistudy_02/AIO-%ED%94%84%EB%A6%AC%EC%BD%94%EC%8A%A4-1%EC%9D%BC%EC%B0%A8-%ED%95%99%EC%8A%B5%ED%9A%8C%EA%B3%A0-%E3%85%A3-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@pdistudy_02/AIO-%ED%94%84%EB%A6%AC%EC%BD%94%EC%8A%A4-1%EC%9D%BC%EC%B0%A8-%ED%95%99%EC%8A%B5%ED%9A%8C%EA%B3%A0-%E3%85%A3-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 09 Sep 2026 04:30:48 GMT</pubDate>
            <description><![CDATA[<p>엔코아 AIO 3기 프리코스 - 파이썬 1일차.
오늘은 Python 기초 Ch.1 ~ Ch.3 까지 학습했다.</p>
<p><strong>Ch.1</strong> - 파이썬 소개 &amp; 개발 환경
<strong>Ch.2</strong> - 자료형 · 변수 · 연산자
<strong>Ch.3</strong> - 조건문 (if/elif/else)</p>
<hr>
<h2 id="ch1-파이썬으로-할-수-있는-것--개발-환경">Ch.1 파이썬으로 할 수 있는 것 &amp; 개발 환경</h2>
<p>컴퓨터는 전기 신호(0과 1)의 있고 없음을 이진법으로 구분해 논리 연산과 저장을 수행하는 기계다. 우리가 컴퓨터를 쓸 때는 결국 목적에 따라 파일을 실행하는 것(브라우저, 게임 클라이언트, 워드 등)이고, 그 동작 원리는 저장장치에 있던 파일이 실행되면 필요한 부분이 RAM에 복사되고, RAM과 CPU가 빠르게 데이터를 주고받으며 연산하는 방식이다.</p>
<p>프로그래밍은 현실 문제에 대한 해결책을 찾아 설계하고, 그것을 프로그래밍 언어로 구현하기까지의 모든 과정을 말한다. 그 중 소스 코드(프로그래밍 언어로 작성한 텍스트 파일)를 작성하는 행위가 코딩이고, 이 소스 코드는 결국 컴퓨터가 이해할 수 있도록 0과 1로 번역돼야 한다. 이 번역 방식에 따라 언어가 둘로 나뉜다는 것도 배웠다.</p>
<ul>
<li><strong>인터프리터(Python)</strong>: 즉석에서 해석하며 바로 실행 → 생산적(작성 후 바로 실행 가능)</li>
<li><strong>컴파일러(Java)</strong>: 미리 전부 번역해두고 필요할 때 실행 → 속도가 빠름</li>
</ul>
<p>즉 생산성과 실행 속도는 트레이드오프 관계라는 점. 프로그래밍 언어 사용 순위(Python &gt; Java &gt; JavaScript &gt; C++ &gt; TypeScript)도 짚었는데, 결국 &quot;제일 좋은 언어&quot;는 없고 목적에 얼마나 부합하는지가 기준이라는 설명이 와닿았다. 파이썬은 문법이 사람 언어에 가깝고 Numpy·Pandas 같은 데이터 라이브러리, Matplotlib·Seaborn 같은 시각화, Django·Flask 웹 프레임워크, Tensorflow·PyTorch 같은 딥러닝 프레임워크까지 폭넓게 갖추고 있어 데이터·AI 분야에 강점이 있는 반면, 모바일 앱(Java/Kotlin, Swift), 시스템 프로그래밍(C, 어셈블리), 프론트엔드(JavaScript, TypeScript 등)는 다른 언어가 더 적합하다는 것도 정리했다. 나중에 자바를 배울 때 자료형·범위 표시·문자열 리터럴·Bool 리터럴·실행 방식에서 파이썬과 어떻게 다른지 비교해보면 좋을 것 같다고 언급해 주셨다.</p>
<p><img src="https://velog.velcdn.com/images/pdistudy_02/post/dd04a258-0e16-482a-93cc-f74412be911c/image.png" alt=""></p>
<p>개발 환경은 내 컴퓨터가 32비트/64비트인지 등 시스템 환경을 먼저 확인한 뒤, 아나콘다(Anaconda3, 64-bit)를 설치하고, 아나콘다 프롬프트에서 <code>(base)</code>가 붙어 있는지로 정상 설치를 확인했다. 이후 <code>jupyter lab</code> 명령으로 주피터랩을 실행하고, 소스 코드를 모을 python 폴더를 만든 뒤 jupyter 설정 파일에서 노트북 기본 경로를 지정했다. <code>01python.ipynb</code> 파일을 만들어 파이썬 버전을 확인하고, <code>!dir</code> 명령으로 현재 경로를 점검하는 것까지가 1일차 환경 세팅이었다.</p>
<blockquote>
<p><strong>&quot;Talk&quot;</strong>
지금까지 대학교에서나 파이썬을 쓸 때에 실습 위주로 돌아가서 만들어진 문법과 모듈을 그대로 따라 사용하기 바빴는데, 파이썬이란 언어가 실무에서 어떤 기능을 하고 어떤 역할을 하는지, 그리고 무슨 원리인지 처음 기초부터 차근차근 이해하고 강의를 들으며 앞으로는 그것을 사용하면서도, 내가 직접 자기주도적으로 이해한 문법을 토대로 코드를 직접 짜보는 연습을 많이 해야겠다고 느꼈다. 기초지식을 넘어 실무에서도 직접 활용할 수 있도록. 그리고 각 언어별로 이러한 차이점이 있구나 한눈에 표로 볼 수 있어서 이해가 쉬웠다.</p>
</blockquote>
<hr>
<h2 id="ch2-자료형·변수·연산자">Ch.2 자료형·변수·연산자</h2>
<h3 id="출력과-입력">출력과 입력</h3>
<p><code>print()</code>는 콘솔에 값을 출력하는 함수로, 여러 값을 쉼표로 구분해 넘기면 기본적으로 공백 하나로 이어 출력한다. 이 구분 기호는 <code>sep</code> 매개변수로 바꿀 수 있고, <code>print()</code>가 끝날 때 자동으로 붙는 개행 문자는 <code>end</code> 매개변수로 제어할 수 있다(<code>end=&quot;&quot;</code>로 주면 줄바꿈 없이 이어 출력).</p>
<pre><code class="language-python">print(&quot;Hello world&quot;)                     #기본 중에 기본
print(&quot;Hong&quot;, &quot;Gil-dong&quot;, sep=&quot;, &quot;)      # Hong, Gil-dong
print(&quot;done&quot;, end=&quot;&quot;)                     # 줄바꿈 없이 출력

#주석을 열심히 달기. 추후 소스 코드 파악이 용이해진다.</code></pre>
<p><code>input()</code>은 키보드로부터 값을 받아오되, 받아온 값은 무조건 문자열(str)이라는 점이 핵심이다. 숫자로 계산하려면 <code>int()</code>나 <code>float()</code>로 변환해야 하고, 정수로 바꿀 수 없는 문자열(실수, 영어 단어 등)을 <code>int()</code>에 넣으면 <code>ValueError</code>가 난다. <code>input()</code>과 <code>int()</code>를 한 줄로 묶어 바로 정수형으로 받는 패턴(<code>int(input())</code>)도 자주 쓰인다.</p>
<h3 id="파이썬-언어의-특징">파이썬 언어의 특징</h3>
<ul>
<li><strong>동적 타이핑</strong>: 자료형을 따로 지정하지 않아도 파이썬이 알아서 판별 → 편하지만 그만큼 느릴 수 있음</li>
<li><strong>인터프리터 방식</strong>: 소스 코드를 즉석 번역해 바로 실행</li>
<li><strong>UTF-8 지원</strong>: ASCII보다 훨씬 넓은 범위의 문자 표현 가능(한글 포함)</li>
<li><strong>식별자 명명</strong>: 한글 식별자도 가능하지만 협업·표준을 위해 영어 권장</li>
<li><strong>세미콜론 생략 &amp; 들여쓰기</strong>: 문장 끝 세미콜론은 생략 가능하지만, 들여쓰기(표준 PEP8 기준 4칸)는 코드 블록 범위를 나타내는 필수 문법이라 잘못 쓰면 오류가 난다.</li>
</ul>
<p>주석(<code>#</code>)은 파이썬 명령어로 동작하지 않는 설명용 텍스트이고, 리터럴은 문자·숫자·불리언처럼 프로그램 안의 &quot;값 자체&quot;를 말한다. 변수는 그 값을 담아두는 메모리 공간이며, <code>=</code>는 수학의 &quot;같다&quot;가 아니라 오른쪽 값을 왼쪽 변수에 &quot;대입&quot;한다는 의미라는 점을 다시 짚었다.</p>
<h3 id="연산자와-자료형">연산자와 자료형</h3>
<ul>
<li>사칙연산(<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>)은 수학과 동일한 우선순위(곱셈·나눗셈 먼저)를 따르고, 나눗셈 결과는 항상 실수(float)로 나온다.</li>
<li>몫은 <code>//</code>, 나머지는 <code>%</code>, 거듭제곱은 <code>**</code>로 구한다.</li>
<li>숫자 자료형은 정수(int)·실수(float)·복소수가 있고, <code>int()</code>/<code>float()</code>로 서로 변환 가능(변환 불가 시 <code>ValueError</code>).</li>
<li>지수 표기(<code>1.2345e5</code> = 1.2345×10⁵)와 2진수(<code>0b</code>)·8진수(<code>0o</code>)·16진수(<code>0x</code>) 표기, 그리고 <code>bin()</code>/<code>oct()</code>/<code>hex()</code> 변환 함수도 있다.</li>
</ul>
<pre><code class="language-python">print(0b10001)   # 17 (이진수)
print(0x1f)      # 31 (십육진수)</code></pre>
<ul>
<li>논리 연산자: <code>and</code>(모두 참이어야 참), <code>or</code>(하나만 참이어도 참), <code>not</code>(반전)</li>
<li>비교 연산자: <code>==</code>, <code>!=</code>, <code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code>, <code>&gt;=</code> — 특히 대입 연산자 <code>=</code>와 비교 연산자 <code>==</code>를 혼동하지 않는 게 중요하다.</li>
</ul>
<h3 id="변수-심화">변수 심화</h3>
<p>변수명은 영어·숫자·언더바(<code>_</code>)로 구성하되 숫자로 시작할 수 없고, 대소문자를 구분하며, 공백을 쓸 수 없고, <code>if</code>/<code>for</code>/<code>while</code> 같은 예약어는 쓸 수 없다. 권장 명명 규칙은 스네이크 케이스(<code>snake_case</code>)다. 변수 삭제는 <code>del</code>로 가능하고, 삭제 후 접근하면 <code>NameError</code>가 난다. <code>a += 20</code>처럼 복합 대입 연산자를 쓰면 <code>a = a + 20</code>과 동일하게 동작해 코드를 간결하게 만들 수 있다. <code>None</code>은 &quot;값이 없음&quot;을 나타내는 예약어이고, 파이썬에는 상수를 강제하는 키워드가 없어 관례상 변하지 않는 값은 변수명을 모두 대문자로 쓴다.</p>
<h3 id="시퀀스-자료형과-문자열">시퀀스 자료형과 문자열</h3>
<p>문자열(str)은 순서대로 값을 갖는 시퀀스 자료형 중 하나이며, 각 요소는 0부터 시작하는 인덱스를 가진다(음수 인덱스는 뒤에서부터, <code>-1</code>이 마지막 요소). 문자열은 작은따옴표·큰따옴표 어느 쪽으로 감싸도 되고, 따옴표 자체를 포함하려면 다른 종류의 따옴표로 감싸거나 역슬래시(<code>\</code>)로 이스케이프한다. <code>\n</code>으로 강제 줄바꿈이 가능하고, 역슬래시를 문자 그대로 쓰고 싶을 땐 문자열 앞에 <code>r</code>을 붙이는 로우 스트링을 쓰거나 <code>\\</code>처럼 두 번 쓴다. 삼중 따옴표(<code>&#39;&#39;&#39;</code> 또는 <code>&quot;&quot;&quot;</code>)를 쓰면 여러 줄 문자열을 그대로 담을 수 있다.</p>
<p>슬라이싱은 <code>[시작:끝]</code>(끝 인덱스는 미포함) 형태로 부분 문자열을 뽑고, <code>[시작:끝:증감]</code>으로 간격도 지정할 수 있다. 인덱싱은 범위를 벗어나면 <code>IndexError</code>가 나지만, 슬라이싱은 범위를 벗어나도 에러 없이 유연하게 처리된다는 차이도 알아뒀다. 문자열은 불변(immutable) 자료형이라 개별 문자를 직접 바꾸거나 삭제할 수 없고, 길이는 <code>len()</code>으로 구한다.</p>
<pre><code class="language-python">s = &quot;Python&quot;
print(s[0], s[-1])   # P n
print(s[1:4])         # yth
print(s * 2 + &quot;!&quot;)    # PythonPython!</code></pre>
<blockquote>
<p><strong>&quot;Talk&quot;</strong>
print() 함수 기본과 구분자(sep), 줄바꿈 문자(end) 제어, input() 함수, 입력값의 자료형 등 기초적인 걸 알아봤다. 전부 배웠던 내용들인데, 개념 정리는 오랜만이라 다시금 예전 수업들을 복기하는 느낌이었다. 한동안 파이썬을 쓸 일이 잘 없었어서(이제 정말 많이 사용해야겠지만!) 잊혀져가고 있었는데, 가볍게 복기해주었다. 역시 기초가 탄탄해야 오류를 잡아내고 하는 데에 쉬울 것 같다. 기초를 더욱 탄탄히.
겉핥기로 알긴 알지만 직접 코드를 짜보라 할 때 매번 헷갈릴 수 있는 부분을 확실히 잡고 가는 느낌이다.</p>
</blockquote>
<hr>
<h2 id="ch3-조건문-if--elif--else">Ch.3 조건문 (if / elif / else)</h2>
<p><code>if 조건식:</code> 형태로 작성하며, 조건이 참(True)일 때만 들여쓰기된 코드 블록을 실행하고 거짓(False)이면 실행하지 않는다. 당장 작성할 내용이 없을 땐 <code>pass</code>로 문법 오류를 방지할 수 있고, 조건식에 대입 연산자(<code>=</code>)가 아닌 비교 연산자(<code>==</code>)를 써야 한다는 점도 다시 확인했다.</p>
<ul>
<li><code>else</code>: <code>if</code> 조건이 거짓일 때 실행되는 블록. <code>if</code>/<code>else</code>로 두 가지 흐름 중 하나만 실행되게 분기한다.</li>
<li><code>elif</code>: <code>if</code> 조건이 거짓일 때 추가 조건을 이어서 체크. 여러 번 쓸 수 있고, 앞선 조건이 참이면 뒤 조건은 따지지 않고 바로 빠져나간다.</li>
<li>복합 조건이 필요하면 <code>and</code>/<code>or</code>/<code>not</code> 논리 연산자를 활용하거나, <code>10 &lt; value &lt;= 20</code>처럼 범위 조건을 한 번에 표현할 수 있다.</li>
<li>조건이 상호 배타적이지 않을 경우(예: 6의 배수이면서 3의 배수인 경우) <code>if</code>/<code>elif</code> 순서에 따라 결과가 달라질 수 있다는 점이 중요한 포인트였다 — 먼저 참이 되는 조건의 블록만 실행되고 나머지는 검사하지 않고 건너뛰기 때문이다.</li>
</ul>
<pre><code class="language-python">score = int(input(&quot;점수 입력: &quot;))

if score &gt;= 90:
    print(&quot;A&quot;)
elif score &gt;= 80:
    print(&quot;B&quot;)
elif score &gt;= 70:
    print(&quot;C&quot;)
else:
    print(&quot;F&quot;)</code></pre>
<p>나이에 따른 연령대 구분, 점수에 따른 학점 부여 실습을 이런 식으로 진행했다.</p>
<blockquote>
<p><strong>Talk</strong>
if문의 경우 개념부터 실습까지 간단히 진행해봤다. 나이에 따른 연령대 구분, 점수에 따른 학점 부여 등의 실습이었다. 확실히 혼자 AI 프로젝트를 설계해 실습을 진행했을 때보다 더 디테일한 느낌이었다. (<a href="https://blog.naver.com/ej_diary510/224400998386">https://blog.naver.com/ej_diary510/224400998386</a>)
그래도 혼자 이전에 공부한 내용과 겹치는 지점이 많아 보다 쉽고 빠르게 이해할 수 있었던 것 같다. 바이브코딩 파트도 쌓아야 할 개념과 지식이 많기에, 몇 번 해본 파이썬은 일단 빠르게 복기하는 식으로 강의를 듣고 실습을 빠르게 해보려 한다(앞으로도).</p>
</blockquote>
<hr>
<p><img src="https://velog.velcdn.com/images/pdistudy_02/post/b4e15533-20c0-4415-a29e-e43818327c39/image.png" alt=""></p>
<p>#AIO #엔코아 #프리코스 #파이썬 #TIL</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[첫 글, velog를 시작하며]]></title>
            <link>https://velog.io/@pdistudy_02/%EC%B2%AB-%EA%B8%80-velog%EB%A5%BC-%EC%8B%9C%EC%9E%91%ED%95%98%EB%A9%B0</link>
            <guid>https://velog.io/@pdistudy_02/%EC%B2%AB-%EA%B8%80-velog%EB%A5%BC-%EC%8B%9C%EC%9E%91%ED%95%98%EB%A9%B0</guid>
            <pubDate>Mon, 07 Sep 2026 12:03:34 GMT</pubDate>
            <description><![CDATA[<h3 id="안녕하세요-velog는-처음인데요">안녕하세요, velog는 처음인데요.</h3>
<h4 id="4학년-박두잇-인사드립니다">4학년 박두잇, 인사드립니다.</h4>
<p>나는 서울 모 대학교에서 미디어를 전공하고 있고, 그중에서도 전략커뮤니케이션을 주전공으로 하고 있다. 3학년까지는 광고 및 콘텐츠 마케팅을 준비했는데, 근래 IT분야, 그 중에서도 IT서비스기획에 푹 빠지면서 본격적으로 이 직무를 꿈꾸게 되었다.</p>
<p>실제 서비스기획도 개발도 실무 경험이 전혀 없는 상태다. 그래도 지금까지 쌓아온 메타인지와 실행력은 그대로 남아있으니, 이 강점을 토대로 부족한 부분을 하나씩 채워나가려 한다. 그 과정을 직접 부딪혀보며 배운 걸 기록으로 남겨보려 한다.</p>
<h4 id="velog-시작-계기">velog 시작 계기</h4>
<p>그 첫걸음으로, 2026년 9월부터 2027년 3월까지 엔코아 AI캠퍼스 Course3(멀티에이전트 AI 오케스트레이션) 3기 과정을 듣는다. 바이브코딩, LLM 에이전트, LangGraph 기반 멀티에이전트 협업, n8n 워크플로우 자동화를 배우고 실제 프로젝트를 만드는 과정이다.</p>
<p>이 기간 동안 배우는 내용을 그때그때 기록해두지 않으면 금방 흩어질 것 같았다. 지금까지는 네이버 블로그 하나에 모든 걸 기록해왔는데, 코드나 에러 로그, 실습 과정을 정리하기엔 구조가 잘 맞지 않아서 별도 채널을 만들기로 했다.</p>
<h4 id="velog를-선택한-이유">velog를 선택한 이유</h4>
<p>마크다운으로 바로 쓸 수 있고 코드 블록이 깔끔하게 정리되는 게 필요했고, 개발 학습자들이 TIL(Today I Learned)을 남기는 용도로 많이 쓰는 곳이라는 점도 velog를 선택한 이유다.</p>
<p>앞으로 두 채널의 역할은 이렇게 나눠본다.</p>
<ul>
<li><p>velog: 실습 로그, 코드, 에러와 해결 과정 중심의 TIL
(<a href="https://velog.io/@pdistudy_02/posts">https://velog.io/@pdistudy_02/posts</a>)</p>
</li>
<li><p>네이버 블로그: velog 글을 링크로 가져와서 소감·생각·방향성을 정리
(<a href="https://blog.naver.com/ej_diary510">https://blog.naver.com/ej_diary510</a>)</p>
</li>
</ul>
<h4 id="앞으로의-포부">앞으로의 포부</h4>
<p>프리코스 기간(개강 전)부터 개강 이후까지, 그날 배운 것 / 막혔던 부분 / 해결한 방법 위주로 짧고 담백하게 남기려 한다. 최대한 학습 당일에 바로 정리하는 걸 목표로, 꾸준히 기록해보려 한다.</p>
<p>부족한 점이 많은 만큼 갈 길도 멀지만,
일단 실행하는, Do it하는 사람이 되자.</p>
]]></description>
        </item>
    </channel>
</rss>