<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>세모난 책</title><link>https://semonan.com/kr/</link><description>Recent content on 세모난 책</description><generator>Hugo</generator><language>ko-KR</language><lastBuildDate>Sun, 04 Jan 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://semonan.com/kr/rss.xml" rel="self" type="application/rss+xml"/><item><title>LED의 역사</title><link>https://semonan.com/kr/book/technology-history/elec/led/</link><pubDate>Sun, 04 Jan 2026 00:00:00 +0900</pubDate><guid>https://semonan.com/kr/book/technology-history/elec/led/</guid><description>&lt;h1 id="ledlight-emitting-diode의-역사"&gt;LED(Light Emitting Diode)의 역사&lt;a class="anchor" href="#ledlight-emitting-diode%ec%9d%98-%ec%97%ad%ec%82%ac"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;LED는 조명, 디스플레이, 신호 전달 등 전 세계 어디서나 다양하게 활용되고 있습니다.&lt;br&gt;
LED가 어떻게 탄생하고, 개선되고, 개발되어 왔는지 알아봅시다.&lt;br&gt;
&lt;img src="https://semonan.com/images/book/technology-history/elec/led/img1.png" alt="" height="200"&gt;&lt;/p&gt;
&lt;h2 id="1907년-어-반짝였는데-뭐지"&gt;1907년, &amp;ldquo;어? 반짝였는데&amp;hellip; 뭐지?&amp;rdquo;&lt;a class="anchor" href="#1907%eb%85%84-%ec%96%b4-%eb%b0%98%ec%a7%9d%ec%98%80%eb%8a%94%eb%8d%b0-%eb%ad%90%ec%a7%80"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;1907년, 영국의 한 실험실.&lt;br&gt;
Radio communication 엔지니어인 헨리 라운드(Henry Joseph Round)는 탄화규소(SiC) 결정에 전류를 흘렸을 때 신기한 현상을 발견했습니다.&lt;br&gt;
&amp;ldquo;우와! 접촉면에서 빛이 나잖아?&amp;rdquo;&lt;br&gt;
헨리 라운드는 Electrical World 저널에 이 현상을 알렸습니다.&lt;br&gt;
하지만, 그때는 아무도 이 현상이 미래의 조명을 대체할 것이라는 것을 상상하지 못했습니다.&lt;br&gt;
왜냐하면, 빛이 너무 약해서 쓸모 없어 보였거든요.&lt;br&gt;
이렇게 LED의 씨앗은 조용히 묻혀버렸습니다.&lt;br&gt;
&lt;img src="https://semonan.com/images/book/technology-history/elec/led/img2.jpg" alt="" height="250"&gt;&lt;/p&gt;</description></item><item><title>노력을 타고 나야해</title><link>https://semonan.com/kr/book/thoughts/quotes/born-with-effort/</link><pubDate>Thu, 03 Jul 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/thoughts/quotes/born-with-effort/</guid><description>&lt;h1 id="재능이-아니고-노력을-타고-나야해"&gt;&amp;ldquo;재능이 아니고, 노력을 타고 나야해&amp;rdquo;&lt;a class="anchor" href="#%ec%9e%ac%eb%8a%a5%ec%9d%b4-%ec%95%84%eb%8b%88%ea%b3%a0-%eb%85%b8%eb%a0%a5%ec%9d%84-%ed%83%80%ea%b3%a0-%eb%82%98%ec%95%bc%ed%95%b4"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;노력하는 사람들은 지금은 조금 늦을지 몰라도 결국에는 성공해&lt;/p&gt;
&lt;p&gt;나는 자부할 수 있는것이 한 가지 있어&lt;/p&gt;
&lt;p&gt;어떤 운동을 했었어도 1등을 했을거야&lt;/p&gt;
&lt;p&gt;왜냐하면, 타고난 것이 노력이기 때문이야&lt;/p&gt;
&lt;p&gt;내가 유도를 하면서 몇번 졌을 것 같아?&lt;/p&gt;
&lt;p&gt;셀 수 없이 많이 졌어&lt;/p&gt;
&lt;p&gt;그러고 나서 내가 만들어 졌어&lt;/p&gt;
&lt;p&gt;지면 어떻고, 이기면 어때?&lt;/p&gt;
&lt;p&gt;지는 것도 연습이야&lt;/p&gt;
&lt;p&gt;처음에 유도 배울때 무엇을 배웠어?&lt;/p&gt;
&lt;p&gt;잘 넘어지는 방법(낙법) 부터 배웠어&lt;/p&gt;
&lt;p&gt;넘어지면 다시 일어나&lt;/p&gt;
&lt;p&gt;그리고, 다시 일어나서 또 도전하면 되는거야&lt;/p&gt;</description></item><item><title>삼양 AF 35mm F1.4 FE</title><link>https://semonan.com/kr/book/product-reviews/electronics/samyang-af-35mm-f1.4/</link><pubDate>Thu, 03 Jul 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/product-reviews/electronics/samyang-af-35mm-f1.4/</guid><description>&lt;h1 id="samyang-af-35mm-f14-fe-단렌즈-사용기"&gt;SAMYANG AF 35mm F1.4 FE 단렌즈 사용기&lt;a class="anchor" href="#samyang-af-35mm-f14-fe-%eb%8b%a8%eb%a0%8c%ec%a6%88-%ec%82%ac%ec%9a%a9%ea%b8%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;(동영상 촬영을 위한 사용기이며, Camera body는 Sony A7C 입니다.)&lt;/p&gt;
&lt;img src="https://semonan.com/images/book/product-reviews/electronics/samyang-af-35mm-f1.4/samyang35mm_1.webp" alt="SAMYANG AF 35mm F1.4 FE 렌즈" width="500"&gt;
&lt;h2 id="무엇을-촬영하나"&gt;무엇을 촬영하나?&lt;a class="anchor" href="#%eb%ac%b4%ec%97%87%ec%9d%84-%ec%b4%ac%ec%98%81%ed%95%98%eb%82%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;작은 전자부품을 조립하거나 납땜하는 모습을 가까운 거리에서 촬영을 해야 했습니다.&lt;br&gt;
카메라는 삼각대에 고정된 상태에서 손으로 작업하는 모습을 촬영하는 것이죠.&lt;br&gt;
즉, 카메라와 피사체와의 거리는 거의 일정한 환경입니다.&lt;/p&gt;
&lt;h2 id="왜-samyang-af-35mm-f14-fe-를-선택했나"&gt;왜 SAMYANG AF 35mm F1.4 FE 를 선택했나?&lt;a class="anchor" href="#%ec%99%9c-samyang-af-35mm-f14-fe-%eb%a5%bc-%ec%84%a0%ed%83%9d%ed%96%88%eb%82%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;가격이 저렴한 편이어야 하고, 아웃포커싱 등의 효과로 예쁘게 촬영하고 싶었습니다.&lt;br&gt;
그리고 실내 촬영이기 때문에 조리개가 많이 열리는 것도 중요했습니다.&lt;br&gt;
충분한 광량이 아닐지라도 노이즈가 최대한 없는 것을 원했습니다.&lt;/p&gt;</description></item><item><title>수동 에스프레소 추출기 입문</title><link>https://semonan.com/kr/book/food/coffee/manual-espresso-maker/</link><pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/food/coffee/manual-espresso-maker/</guid><description>&lt;h2 id="수동-에스프레소-추출기를-구입하게-된-배경"&gt;수동 에스프레소 추출기를 구입하게 된 배경&lt;a class="anchor" href="#%ec%88%98%eb%8f%99-%ec%97%90%ec%8a%a4%ed%94%84%eb%a0%88%ec%86%8c-%ec%b6%94%ec%b6%9c%ea%b8%b0%eb%a5%bc-%ea%b5%ac%ec%9e%85%ed%95%98%ea%b2%8c-%eb%90%9c-%eb%b0%b0%ea%b2%bd"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;(작성일: 2025년 5월 6일)&lt;/p&gt;
&lt;p&gt;저는 캡슐 커피 머신을 하나 가지고 있습니다.&lt;br&gt;
3년전쯤 구입했었죠.&lt;br&gt;
그 당시 가격이 13만원 정도였던 것으로 기억하는데, 많이 비싸지 않았기 때문에 가성비로 만족하며 사용해왔습니다.&lt;/p&gt;
&lt;p&gt;그러나, 언제 부턴가 캡슐 커피 머신이 이상해졌습니다.&lt;br&gt;
커피를 내리면 3초정도 내리다가 동작을 멈춥니다.&lt;br&gt;
고장이 났나봅니다.&lt;br&gt;
구입후 현재까지 대략 500캡슐 이상은 내렸을 것 같은데, 고장날 때가 되었나 봅니다.&lt;/p&gt;
&lt;p&gt;AS를 받을까 새로 살까 고민 했습니다.&lt;br&gt;
AS를 받는 것이 저렴하겠지만 한가지 마음에 걸리는 것은..&lt;br&gt;
바로 위생입니다.&lt;br&gt;
커피 내리기 전/후로 물을 흘려서 세척을 하고 사용해왔지만,&lt;br&gt;
물통에서 커피가 내려오는 곳까지 연결 통로에 물때가 끼여 있을 것입니다.&lt;br&gt;
머신을 완전히 분해하여 액체가 흐르는 통로를 솔로 깨끗히 세척한 적은 없으니까요..&lt;br&gt;
그래서 A/S는 별로 내키지 않았습니다.&lt;/p&gt;</description></item><item><title>조명 제어</title><link>https://semonan.com/kr/book/embedded/smart-home/light-control/</link><pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/embedded/smart-home/light-control/</guid><description>&lt;h1 id="smart-home-개발---조명-제어"&gt;Smart home 개발 - 조명 제어&lt;a class="anchor" href="#smart-home-%ea%b0%9c%eb%b0%9c---%ec%a1%b0%eb%aa%85-%ec%a0%9c%ec%96%b4"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Phone으로 불을 켜고 끌수 있는 스마트홈 시스템을 직접 만들기로 했습니다.&lt;br&gt;
이것이 된다면 여러가지 편리한 기능을 사용할 수 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;침대에 누운채로 Phone으로 불을 켜고 끄기&lt;/li&gt;
&lt;li&gt;깜빡 잊고 불을 켜고 외출했을때 집 밖에서 불 끄기&lt;/li&gt;
&lt;li&gt;밤 12시가 되면 모든 불을 자동으로 끄기&lt;/li&gt;
&lt;li&gt;아침 7시가 되면 자동으로 불 켜기&lt;/li&gt;
&lt;li&gt;외출했다가 집에 들어왔을때 자동으로 불 켜기&lt;/li&gt;
&lt;li&gt;집에 아무도 없다면 자동으로 불 끄기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;상상만해도 너무 편리할 것 같습니다.&lt;br&gt;
&lt;img src="https://semonan.com/images/book/embedded/smart-home/light-control/smarthome_light_on_phone.png" alt="" /&gt;&lt;/p&gt;</description></item><item><title>청소기 정전기 방지</title><link>https://semonan.com/kr/book/life-engineering/appliance/vacuum-cleaner-static-prevention/</link><pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/life-engineering/appliance/vacuum-cleaner-static-prevention/</guid><description>&lt;h1 id="건조한-겨울에-청소기-사용-시-정전기-발생-방지-방법"&gt;건조한 겨울에 청소기 사용 시 정전기 발생 방지 방법&lt;a class="anchor" href="#%ea%b1%b4%ec%a1%b0%ed%95%9c-%ea%b2%a8%ec%9a%b8%ec%97%90-%ec%b2%ad%ec%86%8c%ea%b8%b0-%ec%82%ac%ec%9a%a9-%ec%8b%9c-%ec%a0%95%ec%a0%84%ea%b8%b0-%eb%b0%9c%ec%83%9d-%eb%b0%a9%ec%a7%80-%eb%b0%a9%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;건조한 겨울에 청소기를 사용할 때 정전기 방지 방법을 설명합니다.&lt;/p&gt;
&lt;h2 id="문제-정전기-때문에-겨울에-청소기를-사용하는-것이-두렵다"&gt;문제: 정전기 때문에 겨울에 청소기를 사용하는 것이 두렵다&lt;a class="anchor" href="#%eb%ac%b8%ec%a0%9c-%ec%a0%95%ec%a0%84%ea%b8%b0-%eb%95%8c%eb%ac%b8%ec%97%90-%ea%b2%a8%ec%9a%b8%ec%97%90-%ec%b2%ad%ec%86%8c%ea%b8%b0%eb%a5%bc-%ec%82%ac%ec%9a%a9%ed%95%98%eb%8a%94-%ea%b2%83%ec%9d%b4-%eb%91%90%eb%a0%b5%eb%8b%a4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;지금 한국은 건조하고 추운 2월의 겨울입니다.&lt;br&gt;
이전에 사용하던 청소기가 고장나서 무선 청소기를 새로 구매했습니다.&lt;br&gt;
언제부턴가 이 청소기를 사용하다 보면 손잡이에서 순간적으로 전기가 따끔하게 느껴지는 경우가 있습니다.&lt;br&gt;
두꺼운 장갑을 끼고 청소를 해도 전기로부터 따끔거리는 증상은 지속되었습니다.&lt;br&gt;
이런 현상이 지속되다 보니 청소기 사용하는것이 두려워질 정도입니다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://semonan.com/images/book/life-engineering/appliance/vacuum-cleaner-static-prevention/vaccum_elec.png" alt="" /&gt;&lt;/p&gt;</description></item><item><title>0과1로 숫자/문자 저장</title><link>https://semonan.com/kr/book/life-engineering/computer/binary-storage-of-numbers-characters/</link><pubDate>Sun, 02 Feb 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/life-engineering/computer/binary-storage-of-numbers-characters/</guid><description>&lt;h1 id="컴퓨터가-0과-1을-사용하여-숫자문자를-저장하는-원리"&gt;컴퓨터가 0과 1을 사용하여 숫자/문자를 저장하는 원리&lt;a class="anchor" href="#%ec%bb%b4%ed%93%a8%ed%84%b0%ea%b0%80-0%ea%b3%bc-1%ec%9d%84-%ec%82%ac%ec%9a%a9%ed%95%98%ec%97%ac-%ec%88%ab%ec%9e%90%eb%ac%b8%ec%9e%90%eb%a5%bc-%ec%a0%80%ec%9e%a5%ed%95%98%eb%8a%94-%ec%9b%90%eb%a6%ac"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&amp;lsquo;컴퓨터는 0과 1로 동작한다&amp;rsquo;라는 말을 들어보셨을 것입니다.&lt;br&gt;
우리는 컴퓨터를 사용하여 문자와 숫자를 저장할 수 있고, 심지어 음악, 사진, 동영상도 저장할 수 있습니다.&lt;br&gt;
이런 것들을 저장할 때 정말로 0과 1만 사용합니다.&lt;br&gt;
어떻게 0과 1만 사용하여 데이터를 저장할 수 있는지 궁금증을 풀어봅시다.&lt;/p&gt;
&lt;img src="https://semonan.com/images/book/life-engineering/computer/binary-storage-of-numbers-characters/computerby01.png" alt="" width="400"&gt;
&lt;h2 id="0과-1은-무엇인가"&gt;0과 1은 무엇인가?&lt;a class="anchor" href="#0%ea%b3%bc-1%ec%9d%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;컴퓨터는 전기로 동작하는 장치 입니다.&lt;br&gt;
따라서, 0과 1을 표현하기 위하여 전압(Voltage)을 사용합니다.&lt;br&gt;
0은 상대적으로 낮은 전압을 의미하고 일반적으로 0 Volt 입니다.&lt;br&gt;
1은 상대적으로 높은 전압을 의미하고 일반적으로 1~5 Volt 입니다.&lt;/p&gt;</description></item><item><title>딥러닝 기반 얼굴 분석/인식</title><link>https://semonan.com/kr/book/ai/face-processing/face-analysis-deep-learning/</link><pubDate>Wed, 16 Oct 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/ai/face-processing/face-analysis-deep-learning/</guid><description>&lt;h1 id="딥러닝-기반-얼굴-분석인식"&gt;딥러닝 기반 얼굴 분석/인식&lt;a class="anchor" href="#%eb%94%a5%eb%9f%ac%eb%8b%9d-%ea%b8%b0%eb%b0%98-%ec%96%bc%ea%b5%b4-%eb%b6%84%ec%84%9d%ec%9d%b8%ec%8b%9d"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Deep learning 기술이 발전하면서 Face analysis 성능도 향상 되었습니다.&lt;br&gt;
성능이 좋은 Open source기반 Face analysis library를 소개하고 사용법을 설명하겠습니다.&lt;/p&gt;
&lt;h2 id="insightface-2d-and-3d-face-analysis-project"&gt;InsightFace: 2D and 3D Face Analysis Project&lt;a class="anchor" href="#insightface-2d-and-3d-face-analysis-project"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/deepinsight/insightface" rel="noopener noreferrer" target="_blank"&gt;&lt;code&gt;https://github.com/deepinsight/insightface&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;※ License : 위 사이트에서 참조하세요 !&lt;/p&gt;
&lt;p&gt;이 곳에서 여러가지 Model을 공유하고 있으며, 그 중 &lt;code&gt;buffalo_l&lt;/code&gt; 이라는 Model pack을 소개하고자 합니다.&lt;br&gt;
&lt;code&gt;buffalo_l&lt;/code&gt;은 blob box, key points, detection score, landmark 2d/3d, gender, age, embedding, pose 정보를 제공합니다.&lt;br&gt;
 &lt;br&gt;
Python을 활용하여 Face analysis 하는 과정을 보여드리겠습니다.&lt;/p&gt;</description></item><item><title>Install and Hello world</title><link>https://semonan.com/kr/book/programming/rust/install-hello-world/</link><pubDate>Sun, 29 Sep 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/install-hello-world/</guid><description>&lt;h1 id="rust-설치하고-hello-world-출력"&gt;Rust 설치하고 Hello world 출력&lt;a class="anchor" href="#rust-%ec%84%a4%ec%b9%98%ed%95%98%ea%b3%a0-hello-world-%ec%b6%9c%eb%a0%a5"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="rust-설치"&gt;Rust 설치&lt;a class="anchor" href="#rust-%ec%84%a4%ec%b9%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust 공식 사이트에서 설치 프로그램을 다운로드 후 실행하세요.&lt;br&gt;
설치는 간단하게 진행됩니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rust download : &lt;a href="https://www.rust-lang.org/tools/install" rel="noopener noreferrer" target="_blank"&gt;&lt;code&gt;https://www.rust-lang.org/tools/install&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="hello-world"&gt;Hello world&lt;a class="anchor" href="#hello-world"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;간단한 메시지를 출력하는 프로그램을 만들어 봅시다.&lt;br&gt;
저는 &lt;code&gt;D:\works\rust\practice1&lt;/code&gt; 경로에 &lt;code&gt;code1.rs&lt;/code&gt;라는 파일을 생성하고, 다음과 같이 코드를 작성했습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello, semonan.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Rust는 &lt;code&gt;main()&lt;/code&gt;로부터 시작됩니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fn&lt;/code&gt;이라는 키워드를 통하여 함수를 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;println!(&amp;quot;~~~&amp;quot;);&lt;/code&gt; 를 통하여 메시지를 출력할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;println!()&lt;/code&gt; 에서 &lt;code&gt;!&lt;/code&gt;는 Rust의 Macro를 호출한다는 의미입니다.&lt;/li&gt;
&lt;li&gt;Rust는 Tab대신 Space 4칸을 사용하므로, &lt;code&gt;println!()&lt;/code&gt; 앞에 Space 4칸을 사용했습니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;println!(&amp;quot;~~~&amp;quot;);&lt;/code&gt; 처럼 코드 한 줄이 끝날때 &lt;code&gt;;&lt;/code&gt; 로 끝납니다. (문법적으로 &lt;code&gt;;&lt;/code&gt;으로 끝나지 않는 경우가 있으므로 상황에 맞게 사용해야 합니다.)&lt;br&gt;
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;다음은 소스코드를 컴파일 해 봅시다. &lt;br&gt;
rust의 컴파일러는 &lt;code&gt;rustc&lt;/code&gt; 입니다.&lt;br&gt;
소스코드 파일이 있는 경로에서 &lt;code&gt;rustc code1.rs&lt;/code&gt; 명령을 입력하면 컴파일 됩니다.&lt;br&gt;
&lt;img src="https://semonan.com/images/book/programming/rust/install-hello-world/compile.png" alt="" width="450"&gt;&lt;/p&gt;</description></item><item><title>Let's Encrypt renewal</title><link>https://semonan.com/kr/book/network/security/letsencrypt-renewal/</link><pubDate>Sat, 14 Sep 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/network/security/letsencrypt-renewal/</guid><description>&lt;h1 id="lets-encrypt-renewal-방법"&gt;Let&amp;rsquo;s Encrypt renewal 방법&lt;a class="anchor" href="#lets-encrypt-renewal-%eb%b0%a9%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Let&amp;rsquo;s Encrypt에서 무료 HTTPS 인증서를 제공받아 사용하는 경우가 많습니다.&lt;br&gt;
Let&amp;rsquo;s Encrypt 인증서의 유효기간은 90일이며 유효기간이 만료되기 전에 갱신하면 90일 연장됩니다.&lt;br&gt;
인증서 갱신은 무제한 할 수 있습니다.&lt;/p&gt;
&lt;h2 id="certbot으로-갱신하는-방법"&gt;Certbot으로 갱신하는 방법&lt;a class="anchor" href="#certbot%ec%9c%bc%eb%a1%9c-%ea%b0%b1%ec%8b%a0%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Certbot은 Let&amp;rsquo;s Encrypt 인증서를 관리하는 Tool입니다.&lt;br&gt;
Certbot을 통하여 인증서를 설치/갱신 등 관리하는 경우가 많습니다.&lt;br&gt;
다음과 같은 순서를 통하여 갱신할 수 있습니다.&lt;/p&gt;
&lt;h3 id="step1-https-인증서를-사용하는-서버-중지"&gt;Step1. HTTPS 인증서를 사용하는 서버 중지&lt;a class="anchor" href="#step1-https-%ec%9d%b8%ec%a6%9d%ec%84%9c%eb%a5%bc-%ec%82%ac%ec%9a%a9%ed%95%98%eb%8a%94-%ec%84%9c%eb%b2%84-%ec%a4%91%ec%a7%80"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;다음은 httpd를 사용하는 경우의 예시 입니다.&lt;br&gt;
&lt;code&gt;sudo service httpd stop&lt;/code&gt; 명령을 수행하여 httpd를 중지합니다.&lt;/p&gt;</description></item><item><title>Fast string to integer</title><link>https://semonan.com/kr/book/programming/cpp/fast-string-to-integer/</link><pubDate>Thu, 29 Aug 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/cpp/fast-string-to-integer/</guid><description>&lt;h1 id="fast-string-to-integer"&gt;Fast string to integer&lt;a class="anchor" href="#fast-string-to-integer"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="문제"&gt;문제&lt;a class="anchor" href="#%eb%ac%b8%ec%a0%9c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;보통의 경우 10진수 또는 16진수의 string을 integer로 변환하기 위하여 strtoul( ) 를 사용합니다.&lt;br&gt;
하지만, strtoul( )를 매우 많이 반복하는 경우 처리 속도가 느립니다.&lt;br&gt;
다음 코드는 strtoul( )을 300,000,000회 반복하였으며, &lt;code&gt;약 5초&lt;/code&gt;가 소요되었습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;chrono&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;hexString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;19AF&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 0x19AF = 6575
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;chrono&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;high_resolution_clock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;300000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;strtoul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hexString&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;chrono&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;high_resolution_clock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;chrono&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;duration&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;milli&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;time: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;elapsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34; ms&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="개선"&gt;개선&lt;a class="anchor" href="#%ea%b0%9c%ec%84%a0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;LUT(LookUp Table)를 사용하면 strtoul( ) 보다 빠르게 처리할 수 있습니다.&lt;br&gt;
10진수, 16진수의 string에 포함되는 문자는 다음과 같습니다.&lt;/p&gt;</description></item><item><title>네트워크 기초</title><link>https://semonan.com/kr/book/network/basic/network-basics/</link><pubDate>Tue, 20 Aug 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/network/basic/network-basics/</guid><description>&lt;h1 id="통신-communicationn"&gt;통신 (Communicationn)&lt;a class="anchor" href="#%ed%86%b5%ec%8b%a0-communicationn"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;통신을 간단히 설명하면 정보를 전달하는 것입니다.&lt;br&gt;
정보를 전달한다는 것은 범위가 넓어 다소 추상적일 수 있습니다.&lt;br&gt;
다음 사례들을 통하여 통신이 어떤 것인지 직감적으로 쉽게 알아봅시다.&lt;/p&gt;
&lt;h2 id="통신이란"&gt;통신이란?&lt;a class="anchor" href="#%ed%86%b5%ec%8b%a0%ec%9d%b4%eb%9e%80"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="case-1-인간의-통신"&gt;Case 1: 인간의 통신&lt;a class="anchor" href="#case-1-%ec%9d%b8%ea%b0%84%ec%9d%98-%ed%86%b5%ec%8b%a0"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;인간은 입으로 소리를 내고 귀로 그 소리를 들어서 소통할 수 있는데,&lt;br&gt;
이것은 정보를 전달하는 것이므로 통신이라 할 수 있습니다.&lt;br&gt;
그리고 손짓, 몸짓, 표정 등의 시각적으로 표현하여 정보를 전달하기도 합니다.&lt;br&gt;
인간의 여러 가지 의사소통 방식들이 대부분 통신이라고 표현할 수 있습니다.&lt;/p&gt;</description></item><item><title>User/Kernel mode</title><link>https://semonan.com/kr/book/os/windows/user-kernel-mode/</link><pubDate>Sat, 20 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/os/windows/user-kernel-mode/</guid><description>&lt;h1 id="windows의-user-mode와-kernel-mode에서-memory-접근-권한"&gt;Windows의 User mode와 Kernel mode에서 Memory 접근 권한&lt;a class="anchor" href="#windows%ec%9d%98-user-mode%ec%99%80-kernel-mode%ec%97%90%ec%84%9c-memory-%ec%a0%91%ea%b7%bc-%ea%b6%8c%ed%95%9c"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="배경"&gt;배경&lt;a class="anchor" href="#%eb%b0%b0%ea%b2%bd"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2024년 7월 19일 Windows를 사용하는 전 세계의 수많은 컴퓨터에서 블루스크린 문제가 발생했습니다.&lt;br&gt;
Windows에서 블루스크린은 컴퓨터를 재부팅 시켜야 할 정도로 치명적인 오류가 발생했다는 의미입니다.&lt;br&gt;
이로인해 기업, 공기관, 공항 등 주요 시스템들이 다운되어 업무가 마비되는 상황을 겪었다고 합니다.&lt;br&gt;
원인은 널리 사용되는 보안 소프트웨어의 결함으로 알려졌습니다.&lt;br&gt;
일반적인 소프트웨어는 블루스크린 문제를 발생시킬 여지가 거의 없습니다만,&lt;br&gt;
그 보안 소프트웨어는 무엇이 다르길래 블루스크린 문제를 발생시켰을까요?&lt;br&gt;
궁금증을 풀어봅시다.&lt;/p&gt;</description></item><item><title>ChatGPT 사용한 만큼만 요금 내기</title><link>https://semonan.com/kr/book/ai/usage-tips/chatgpt-pay-as-you-go/</link><pubDate>Sun, 14 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/ai/usage-tips/chatgpt-pay-as-you-go/</guid><description>&lt;h1 id="api기반-chat-gpt-유료버전을-저렴하게-사용하기"&gt;API기반 Chat GPT 유료버전을 저렴하게 사용하기&lt;a class="anchor" href="#api%ea%b8%b0%eb%b0%98-chat-gpt-%ec%9c%a0%eb%a3%8c%eb%b2%84%ec%a0%84%ec%9d%84-%ec%a0%80%eb%a0%b4%ed%95%98%ea%b2%8c-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="배경문제"&gt;배경/문제&lt;a class="anchor" href="#%eb%b0%b0%ea%b2%bd%eb%ac%b8%ec%a0%9c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;OpenAI에서 제공하는 Chat GPT는 유료 버전을 사용하기 위해 매달 20달러의 구독료를 지불해야 합니다.&lt;br&gt;
(2024년 6월 기준, 한국의 경우 환율을 적용하면 약 3만원의 구독료가 지불됩니다.)&lt;br&gt;
사용량이 적은데 매달 20달러를 지불하는 것은 비싸게 느껴집니다.&lt;/p&gt;
&lt;h2 id="개선"&gt;개선&lt;a class="anchor" href="#%ea%b0%9c%ec%84%a0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;이런 문제를 개선하기 위하여, 다음과 같이 간단하게 코딩하여 사용한 만큼만 지불하는 방법을 설명하겠습니다.&lt;br&gt;
OpenAI는 Chat Bot의 API를 제공하며, 사용한 만큼만 사용료를 지불하는 방식입니다.&lt;br&gt;
따라서, 매달 사용량이 적다면 구독하는 것 보다 API를 사용하는 것이 이득이 될 수 있습니다.&lt;/p&gt;</description></item><item><title>VI Editor 색상 설정</title><link>https://semonan.com/kr/book/os/macos/vi-editor-color-scheme/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/os/macos/vi-editor-color-scheme/</guid><description>&lt;h1 id="mac-os에서-vi-editor에-색상-적용하기"&gt;Mac OS에서 VI Editor에 색상 적용하기&lt;a class="anchor" href="#mac-os%ec%97%90%ec%84%9c-vi-editor%ec%97%90-%ec%83%89%ec%83%81-%ec%a0%81%ec%9a%a9%ed%95%98%ea%b8%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="문제"&gt;문제&lt;a class="anchor" href="#%eb%ac%b8%ec%a0%9c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Mac os에서 vim의 기본 color scheme은 설정되어 있지 않기 때문에, 다음과 같이 가독성이 좋지 못합니다.&lt;/p&gt;
&lt;img src="https://semonan.com/images/book/os/macos/vi-editor-color-scheme/vimcolor1.png" alt="" width="350"&gt;
&lt;p&gt;다음과 같이 가독성을 개선하기 위하여 vim color scheme을 설정해봅시다.&lt;/p&gt;
&lt;img src="https://semonan.com/images/book/os/macos/vi-editor-color-scheme/vimcolor2.png" alt="" width="350"&gt;
&lt;h2 id="설정-방법"&gt;설정 방법&lt;a class="anchor" href="#%ec%84%a4%ec%a0%95-%eb%b0%a9%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;다음과 같이 &lt;code&gt;.vimrc&lt;/code&gt; 파일을 생성하세요.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-shellscript" data-lang="shellscript"&gt;% cd ~/
% mkdir .vim
% cd .vim
% git clone https://github.com/rafi/awesome-vim-colorschemes
% cd awesome-vim-colorschemes
% mv colors ../
% cd ~/
% vim .vimrc&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;.vimrc&lt;/code&gt; 파일에 다음 내용을 추가하세요.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-shellscript" data-lang="shellscript"&gt;&amp;#34; Syntax Highlighting
if has(&amp;#34;syntax&amp;#34;)
 syntax on
endif
set autoindent
set cindent
set nu
colo jellybeans
set laststatus=2
set statusline=\ %&amp;lt;%l:%v\ [%P]%=%a\ %h%m%r\ %F\&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;~/.vim/colors/*.vim&lt;/code&gt; 의 파일 이름을 위 코드 Line 8의 colo 뒤에 입력하여 여러가지 color scheme를 이용할 수 있습니다.&lt;/p&gt;</description></item><item><title>LoRA</title><link>https://semonan.com/kr/book/ai/fine-tuning/lora/</link><pubDate>Sun, 07 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/ai/fine-tuning/lora/</guid><description>&lt;link rel="stylesheet" href="https://semonan.com/katex/katex.min.css" /&gt;&lt;script defer src="https://semonan.com/katex/katex.min.js"&gt;&lt;/script&gt;&lt;script defer src="https://semonan.com/katex/auto-render.min.js" onload="renderMathInElement(document.body, {&amp;#34;delimiters&amp;#34;:[{&amp;#34;left&amp;#34;:&amp;#34;$$&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;$$&amp;#34;,&amp;#34;display&amp;#34;:true},{&amp;#34;left&amp;#34;:&amp;#34;$&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;$&amp;#34;,&amp;#34;display&amp;#34;:false},{&amp;#34;left&amp;#34;:&amp;#34;\\[&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;\\]&amp;#34;,&amp;#34;display&amp;#34;:true},{&amp;#34;left&amp;#34;:&amp;#34;\\(&amp;#34;,&amp;#34;right&amp;#34;:&amp;#34;\\)&amp;#34;,&amp;#34;display&amp;#34;:false}]});"&gt;&lt;/script&gt;
&lt;h1 id="lora-low-rank-adaptation"&gt;LoRA (Low-Rank Adaptation)&lt;a class="anchor" href="#lora-low-rank-adaptation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;LoRA는 PEFT(Parameter-Efficient Fine-Tuning) 기술 중 하나입니다.&lt;br&gt;
이 기술은 대형 사전 학습 모델을 특정 작업에 맞게 효율적으로 Fine tuning 하는 방법입니다.&lt;/p&gt;
&lt;p&gt;(다음 내용은 논문 &amp;ldquo;LoRA: Low-Rank Adaptation of Large Language Models&amp;rdquo; 를 참고하였습니다.)&lt;/p&gt;
&lt;h2 id="배경문제"&gt;배경/문제&lt;a class="anchor" href="#%eb%b0%b0%ea%b2%bd%eb%ac%b8%ec%a0%9c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;LLM(Large Language Model) 같은 Model은 파라미터 수가 매우 많습니다.&lt;br&gt;
예로, 24년 4월 출시된 llama3 model의 Parameter 수는 약 700억개이며 File 크기가 40GB가 넘으며, 이보다 더 큰 Model도 많습니다.&lt;br&gt;
이런 Large model을 Full fine tuning 하려면 고성능 GPU가 필요하며 학습 시간도 긴 편입니다.&lt;br&gt;
또한, Base model을 Full fine tuning 하는 것은 Pretraining에서 학습된 기본 성능을 저하 시킬 여지가 있습니다.&lt;/p&gt;</description></item><item><title>Feature</title><link>https://semonan.com/kr/book/programming/python/feature/</link><pubDate>Fri, 05 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/python/feature/</guid><description>&lt;h1 id="python의-기본적인-특징"&gt;Python의 기본적인 특징&lt;a class="anchor" href="#python%ec%9d%98-%ea%b8%b0%eb%b3%b8%ec%a0%81%ec%9d%b8-%ed%8a%b9%ec%a7%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Python은 다목적 프로그래밍 언어로 그 특징은 다음과 같습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;읽기 쉬운 문법&lt;br&gt;
Python의 문법은 직관적이고 명확하여 코드의 가독성이 뛰어납니다.&lt;br&gt;
이는 유지보수성과 생산성을 높여줍니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;동적 타이핑&lt;br&gt;
Python은 동적 타이핑(dynamic typing)을 지원하여 변수의 타입을 명시적으로 선언하지 않아도 됩니다.&lt;br&gt;
실행 시간에 변수의 타입이 결정됩니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;인터프리터 언어&lt;br&gt;
Python은 인터프리터 언어로, 코드를 한 줄씩 실행합니다.&lt;br&gt;
이는 디버깅과 개발 속도를 향상시키지만, 컴파일 언어에 비해 실행 속도가 느릴 수 있습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;대화형 개발 환경&lt;br&gt;
Python은 대화형 쉘을 제공하여 즉각적인 코드 실행과 실험이 가능합니다.&lt;br&gt;
이는 빠른 프로토타이핑과 학습에 유리합니다.&lt;/p&gt;</description></item><item><title>LED 밝기 조절의 원리</title><link>https://semonan.com/kr/book/life-engineering/appliance/led-dimming-principle/</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/life-engineering/appliance/led-dimming-principle/</guid><description>&lt;h2 id="led는-밝기를-어떻게-조절-할까"&gt;LED는 밝기를 어떻게 조절 할까?&lt;a class="anchor" href="#led%eb%8a%94-%eb%b0%9d%ea%b8%b0%eb%a5%bc-%ec%96%b4%eb%96%bb%ea%b2%8c-%ec%a1%b0%ec%a0%88-%ed%95%a0%ea%b9%8c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;크리스마스 트리 조명을 자세히 관찰해보세요.&lt;br&gt;
조명이 단순히 켜졌다 꺼지는 것이 아니라 점점 밝아졌다가 점점 어두워지고 있습니다.&lt;br&gt;
다시 말하면, 밝기가 조절되고 있습니다.&lt;/p&gt;
&lt;img src="https://semonan.com/images/book/life-engineering/appliance/led-dimming-principle/img1.webp" alt="" width="350"&gt;
&lt;p&gt;정말 LED의 밝기가 조절되는 것일까요?&lt;br&gt;
아닙니다!&lt;br&gt;
사실은 LED의 밝기가 조절되는 것처럼 보이도록 우리 눈을 속이고 있는 것입니다.&lt;br&gt;
그 원리를 설명하겠습니다.&lt;/p&gt;
&lt;h2 id="간단한-led-회로"&gt;간단한 LED 회로&lt;a class="anchor" href="#%ea%b0%84%eb%8b%a8%ed%95%9c-led-%ed%9a%8c%eb%a1%9c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;img src="https://semonan.com/images/book/life-engineering/appliance/led-dimming-principle/img2.webp" alt="" width="600"&gt;
&lt;p&gt;Battery, LED, Switch를 준비했습니다.&lt;br&gt;
이것들을 직렬로 연결하여 간단한 전기회로를 구성했습니다.&lt;br&gt;
우측 그림과 같이 Switch를 닫으면 전류가 흐르면서 LED에 불이 켜집니다.&lt;br&gt;
반대로 좌측 그림과 같이 Switch를 열어서 전류를 끊으면 LED에 불이 꺼집니다.&lt;/p&gt;</description></item><item><title>DRAM 수요 폭증</title><link>https://semonan.com/kr/book/life-engineering/computer/surging-dram-demand/</link><pubDate>Wed, 03 Dec 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/life-engineering/computer/surging-dram-demand/</guid><description>&lt;h1 id="메모리-제조-회사는-돈을-쓸어담고-있다"&gt;메모리 제조 회사는 돈을 쓸어담고 있다&lt;a class="anchor" href="#%eb%a9%94%eb%aa%a8%eb%a6%ac-%ec%a0%9c%ec%a1%b0-%ed%9a%8c%ec%82%ac%eb%8a%94-%eb%8f%88%ec%9d%84-%ec%93%b8%ec%96%b4%eb%8b%b4%ea%b3%a0-%ec%9e%88%eb%8b%a4"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;삼성전자, SK하이닉스, 마이크론은 세계 3대 메모리 제조회사입니다.&lt;br&gt;
DRAM을 제조 및 판매하여 큰 영업이익을 얻고있죠.&lt;br&gt;
25년 12월 기준 DRAM 수요가 폭증하여 없어서 못 파는 상황이라고 합니다.&lt;br&gt;
즉, DRAM 제조사는 돈을 쓸어 담고 있으며 이 추세는 당분간 지속 될 것으로 전망하고 있습니다.&lt;br&gt;
도대체 DRAM이 무엇이길래 갑자기 수요가 폭증했을까요?&lt;br&gt;
그 이유를 알려드리겠습니다.&lt;/p&gt;
&lt;img src="https://semonan.com/images/book/life-engineering/computer/surging-dram-demand/img1.webp" alt="" width="600"&gt;
&lt;h2 id="dram-간단히-알아보기"&gt;DRAM 간단히 알아보기&lt;a class="anchor" href="#dram-%ea%b0%84%eb%8b%a8%ed%9e%88-%ec%95%8c%ec%95%84%eb%b3%b4%ea%b8%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;컴퓨터가 동작하기 위해서 연산장치(CPU)와 저장장치가 꼭 필요합니다.&lt;br&gt;
저장장치에는 대표적으로 SSD같은 비휘발성 저장장치(Storage)와 DRAM같은 휘발성 저장장치가 있습니다.&lt;br&gt;
둘 다 데이터를 저장하려는 목적으로 사용되지만 컴퓨터 내부에서의 쓰임새는 꽤 다릅니다.&lt;/p&gt;</description></item><item><title>이미지 편집</title><link>https://semonan.com/kr/book/ai/usage-tips/image-editing/</link><pubDate>Sun, 23 Nov 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/ai/usage-tips/image-editing/</guid><description>&lt;h1 id="ai에게-이미지-편집-시켜보기"&gt;AI에게 이미지 편집 시켜보기&lt;a class="anchor" href="#ai%ec%97%90%ea%b2%8c-%ec%9d%b4%eb%af%b8%ec%a7%80-%ed%8e%b8%ec%a7%91-%ec%8b%9c%ec%bc%9c%eb%b3%b4%ea%b8%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="ai는-이미지-편집을-잘-할까"&gt;AI는 이미지 편집을 잘 할까?&lt;a class="anchor" href="#ai%eb%8a%94-%ec%9d%b4%eb%af%b8%ec%a7%80-%ed%8e%b8%ec%a7%91%ec%9d%84-%ec%9e%98-%ed%95%a0%ea%b9%8c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;이미지속 특정 사물을 지우거나 색을 변경하는 등의 이미지 편집은 AI가 잘하는 영역이 되었습니다.&lt;br&gt;
얼마나 잘 하는지 한번 살펴 볼까요?&lt;br&gt;
왼쪽 이미지는 원본이고, 오른쪽은 AI가 이미지를 수정한 것입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sample 1&lt;br&gt;
Prompt : &amp;ldquo;사진에서 사과를 지워주세요&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI가 다음처럼 사과를 자연스럽게 삭제했습니다.&lt;br&gt;
&lt;img src="https://semonan.com/images/book/ai/usage-tips/image-editing/sample1.webp" alt="AI image editing sample 1 - removing an apple" width="370"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sample 2&lt;br&gt;
Prompt : &amp;ldquo;사진에서 사과를 바나나로 바꿔주세요.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI가 다음처럼 사과를 바나나로 자연스럽게 바꿨습니다.&lt;br&gt;
&lt;img src="https://semonan.com/images/book/ai/usage-tips/image-editing/sample2.webp" alt="AI image editing sample 2 - replacing an apple with a banana" width="370"&gt;&lt;/p&gt;</description></item><item><title>의지/유지 보다는 유희다</title><link>https://semonan.com/kr/book/thoughts/quotes/enjoyment-is-more-important/</link><pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/thoughts/quotes/enjoyment-is-more-important/</guid><description>&lt;h1 id="의지보다는-유지고-유지보다는-유희다"&gt;&amp;ldquo;의지보다는 유지고, 유지보다는 유희다&amp;rdquo;&lt;a class="anchor" href="#%ec%9d%98%ec%a7%80%eb%b3%b4%eb%8b%a4%eb%8a%94-%ec%9c%a0%ec%a7%80%ea%b3%a0-%ec%9c%a0%ec%a7%80%eb%b3%b4%eb%8b%a4%eb%8a%94-%ec%9c%a0%ed%9d%ac%eb%8b%a4"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;책을 열심히 읽으면 10분을 못 읽지만, 즐겁게 읽으면 30분이 금방간다.&lt;/p&gt;
&lt;p&gt;뭔가를 이루려면 의지가 있어야 하는데, 그 의지를 유지하기 위해서는 즐거워야 한다.&lt;/p&gt;
&lt;p&gt;그래서 의지보다는 유지고, 유지보다는 유희다.&lt;/p&gt;
&lt;p&gt;― &amp;lsquo;나는 나의 스무 살을 가장 존중한다&amp;rsquo; 저자 이하영&lt;/p&gt;</description></item><item><title>iPhone 16 Pro</title><link>https://semonan.com/kr/book/product-reviews/electronics/iphone16pro/</link><pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/product-reviews/electronics/iphone16pro/</guid><description>&lt;h2 id="iphone-16-pro를-판매한-이유"&gt;iPhone 16 Pro를 판매한 이유&lt;a class="anchor" href="#iphone-16-pro%eb%a5%bc-%ed%8c%90%eb%a7%a4%ed%95%9c-%ec%9d%b4%ec%9c%a0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2024년 9월 iPhone 16 Pro를 사전예약으로 구매하여 25년 1월까지 약 4개월가량 사용했습니다.&lt;br&gt;
구매당시 가격이 무려 170만원으로 매우 비싸게 느껴졌습니다.&lt;br&gt;
저에게는 첫 아이폰이었고 비싼만큼 기대도 컸습니다.&lt;/p&gt;
&lt;img src="https://semonan.com/images/book/product-reviews/electronics/iphone16pro/iphone16pro_2.webp" alt="iPhone 16 Pro 본체" width="500"&gt;
&lt;p&gt;갤럭시만 사용하다가 아이폰을 적응하는데 별다른 문제는 없었으나, 단 한 가지 이유 때문에 아이폰을 팔게 되었습니다.&lt;br&gt;
그 이유는 바로 삼성페이 입니다.&lt;br&gt;
아이폰은 삼성페이가 되지 않아 결제용 카드를 따로 들고 다녀야 했습니다.&lt;br&gt;
저는 지역화폐 카드, 체크 카드, 신용카드, 주유카드를 사용합니다.&lt;br&gt;
갤럭시는 삼성페이 덕분에 실물 카드를 들고 다닐 필요가 없었는데,&lt;br&gt;
아이폰을 사용하면서 카드지갑을 항상 들고 다녀야 했습니다.&lt;br&gt;
깜빡 잊고 카드 지갑을 안 가지고 가면 결제를 못해서 난처한 경우를 여러번 겪었습니다.&lt;br&gt;
대중교통 탈 때도 갤럭시는 폰으로 결제 가능하지만 아이폰은 불가능합니다.&lt;/p&gt;</description></item><item><title>변수의 가변성</title><link>https://semonan.com/kr/book/programming/rust/variability-of-variables/</link><pubDate>Tue, 08 Oct 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/variability-of-variables/</guid><description>&lt;h1 id="변수의-가변성"&gt;변수의 가변성&lt;a class="anchor" href="#%eb%b3%80%ec%88%98%ec%9d%98-%ea%b0%80%eb%b3%80%ec%84%b1"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="let"&gt;let&lt;a class="anchor" href="#let"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust에서 변수를 선언할 때 다음과 같이 &lt;code&gt;let&lt;/code&gt; 키워드를 사용합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;하지만, let 은 기본적으로 불변(immutable)이기 때문에, 다음처럼 &lt;code&gt;apple&lt;/code&gt;의 값을 변경하려고 하면 에러가 발생합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;E0384&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;: &lt;span class="nc"&gt;cannot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assign&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;twice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;immutable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;variable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="let-mut"&gt;let mut&lt;a class="anchor" href="#let-mut"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;값을 수정하기 위하여 다음과 같이 &lt;code&gt;let mut&lt;/code&gt; 키워드를 사용해야 합니다.&lt;br&gt;
여기서, &lt;code&gt;mut&lt;/code&gt;는 mutable을 의미합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;apple&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;변수를 사용할 때 가변(mutable)과 불변(immutable)을 명확히 구분하는 이유는 Human error를 줄이고, 가독성 개선, 디버깅 효율성 개선, SW 품질 보장 등의 장점을 가질 수 있습니다.&lt;/p&gt;</description></item><item><title>Data type</title><link>https://semonan.com/kr/book/programming/python/data-type/</link><pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/python/data-type/</guid><description>&lt;h1 id="python의-data-type"&gt;Python의 Data type&lt;a class="anchor" href="#python%ec%9d%98-data-type"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Python에는 여러 가지 Data type이 있으며, 각 Type은 고유한 특성과 용도를 가지고 있습니다.&lt;br&gt;
주요 Data type을 설명드리겠습니다.&lt;/p&gt;
&lt;h2 id="1-숫자형-numeric-types"&gt;1. 숫자형 (Numeric Types)&lt;a class="anchor" href="#1-%ec%88%ab%ec%9e%90%ed%98%95-numeric-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;정수 (Integer, &lt;code&gt;int&lt;/code&gt;): 정수형 데이터 타입입니다. 양수와 음수를 모두 포함하며 크기에 제한이 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;실수 (Floating Point, &lt;code&gt;float&lt;/code&gt;): 소수점을 포함한 실수형 데이터 타입입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.14&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;복소수 (Complex Numbers, &lt;code&gt;complex&lt;/code&gt;): 실수부와 허수부를 가지는 복소수형 데이터 타입입니다.&lt;br&gt;
j를 사용하여 허수부를 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-시퀀스형-sequence-types"&gt;2. 시퀀스형 (Sequence Types)&lt;a class="anchor" href="#2-%ec%8b%9c%ed%80%80%ec%8a%a4%ed%98%95-sequence-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;문자열 (String, &lt;code&gt;str&lt;/code&gt;): 문자들의 집합입니다. 작은따옴표(&amp;rsquo;) 또는 큰따옴표(&amp;quot;)로 둘러싸여 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Hello, World!&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;리스트 (List, &lt;code&gt;list&lt;/code&gt;): 여러 개의 값을 순서대로 저장하는 가변적인 시퀀스형입니다.&lt;br&gt;
대괄호([ ])로 정의하며 서로 다른 데이터 타입을 포함할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;튜플 (Tuple, &lt;code&gt;tuple&lt;/code&gt;): 리스트와 유사하지만 불변(immutable)입니다.&lt;br&gt;
소괄호(( ))로 정의합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-집합형-set-types"&gt;3. 집합형 (Set Types)&lt;a class="anchor" href="#3-%ec%a7%91%ed%95%a9%ed%98%95-set-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;집합 (Set, &lt;code&gt;set&lt;/code&gt;): 중복되지 않는 요소들의 모임입니다.&lt;br&gt;
순서가 없으며 중괄호({ })로 정의합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;frozenset: 불변 집합입니다.&lt;br&gt;
frozenset() 함수를 사용하여 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;frozenset&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="4-매핑형-mapping-types"&gt;4. 매핑형 (Mapping Types)&lt;a class="anchor" href="#4-%eb%a7%a4%ed%95%91%ed%98%95-mapping-types"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;사전 (Dictionary, &lt;code&gt;dict&lt;/code&gt;): 키-값 쌍의 집합입니다.&lt;br&gt;
중괄호({ })로 정의하며 키는 고유해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Alice&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;age&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="5-기타-유형"&gt;5. 기타 유형&lt;a class="anchor" href="#5-%ea%b8%b0%ed%83%80-%ec%9c%a0%ed%98%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Boolean (&lt;code&gt;bool&lt;/code&gt;): 참(True)과 거짓(False)을 나타내는 타입입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;l&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;None&lt;/code&gt;: 값이 없음을 나타내는 타입입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>WSL 설치 방법</title><link>https://semonan.com/kr/book/os/windows/wsl-install/</link><pubDate>Sun, 12 May 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/os/windows/wsl-install/</guid><description>&lt;h1 id="wsl-windows-subsystem-for-linux-설치-방법"&gt;WSL (Windows Subsystem for Linux) 설치 방법&lt;a class="anchor" href="#wsl-windows-subsystem-for-linux-%ec%84%a4%ec%b9%98-%eb%b0%a9%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Windows에서 리눅스 설치하는 방법을 설명합니다.&lt;br&gt;
WSL(Windows Subsystem for Linux) 라는 기능이 Windows10부터는 내장되었습니다.&lt;br&gt;
설치 방법도 간단하고, Windows를 사용하면서 가상환경으로 Linux를 동시에 사용하므로 편리합니다.&lt;/p&gt;
&lt;p&gt;설치 방법은 Windows 11 Home (24H2) 버전 기준으로 설명합니다.&lt;br&gt;
Linux는 Ubuntu로 설치해보겠습니다.&lt;/p&gt;
&lt;h2 id="1-제어판---프로그램---windows-기능-켜기끄기-를-실행하세요"&gt;1. [제어판] -&amp;gt; [프로그램] -&amp;gt; [Windows 기능 켜기/끄기] 를 실행하세요.&lt;a class="anchor" href="#1-%ec%a0%9c%ec%96%b4%ed%8c%90---%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8---windows-%ea%b8%b0%eb%8a%a5-%ec%bc%9c%ea%b8%b0%eb%81%84%ea%b8%b0-%eb%a5%bc-%ec%8b%a4%ed%96%89%ed%95%98%ec%84%b8%ec%9a%94"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;img src="https://semonan.com/images/book/os/windows/wsl-install/wsl-1.png" alt="제어판에서 프로그램 메뉴 진입" /&gt;
&lt;img src="https://semonan.com/images/book/os/windows/wsl-install/wsl-2.png" alt="Windows 기능 켜기/끄기 메뉴 위치" /&gt; 
&lt;h2 id="2-linux용-windows-하위-시스템-virtual-machine-platform-을-checked---확인---재부팅-하세요"&gt;2. &amp;ldquo;Linux용 Windows 하위 시스템&amp;rdquo;, &amp;ldquo;Virtual Machine Platform&amp;rdquo; 을 Checked -&amp;gt; 확인 -&amp;gt; 재부팅 하세요.&lt;a class="anchor" href="#2-linux%ec%9a%a9-windows-%ed%95%98%ec%9c%84-%ec%8b%9c%ec%8a%a4%ed%85%9c-virtual-machine-platform-%ec%9d%84-checked---%ed%99%95%ec%9d%b8---%ec%9e%ac%eb%b6%80%ed%8c%85-%ed%95%98%ec%84%b8%ec%9a%94"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;img src="https://semonan.com/images/book/os/windows/wsl-install/wsl-3.png" alt="Linux용 Windows 하위 시스템 및 Virtual Machine Platform 체크" /&gt;
&lt;p&gt;※ 컴퓨터 환경에 따라 다음 항목을 Checked 해야하는 경우도 있습니다.&lt;br&gt;
   &amp;ldquo;Hyper-V&amp;rdquo;, &amp;ldquo;Linux용 Windows 하위 시스템&amp;rdquo;, &amp;ldquo;Windows 하이퍼바이저 플랫폼&amp;rdquo;&lt;/p&gt;</description></item><item><title>데이터 타입</title><link>https://semonan.com/kr/book/programming/rust/data-type/</link><pubDate>Thu, 07 Nov 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/data-type/</guid><description>&lt;h1 id="데이터-타입"&gt;데이터 타입&lt;a class="anchor" href="#%eb%8d%b0%ec%9d%b4%ed%84%b0-%ed%83%80%ec%9e%85"&gt;#&lt;/a&gt;&lt;/h1&gt;

&lt;p&gt;Rust의 모든 값은 Data type을 가집니다.&lt;br&gt;
Rust는 정적 타입 언어이기 때문에 컴파일 시점에 Data type이 정해져 있어야 합니다.&lt;/p&gt;
&lt;h2 id="1-scalar-type"&gt;1. Scalar type&lt;a class="anchor" href="#1-scalar-type"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Scalar type은 값 하나를 표현하며 다음 4종류의 Scalar type이 있습니다.&lt;/p&gt;
&lt;h3 id="11-integer"&gt;1.1 integer&lt;a class="anchor" href="#11-integer"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;integer는 정수를 사용하는 type이며 소수점은 사용할 수 없습니다.&lt;br&gt;
integer type의 종류는 다음 표와 같습니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Size&lt;/th&gt;
 &lt;th&gt;Signed&lt;/th&gt;
 &lt;th&gt;Unsigned&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;8-bit&lt;/td&gt;
 &lt;td&gt;i8&lt;/td&gt;
 &lt;td&gt;u8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;16-bit&lt;/td&gt;
 &lt;td&gt;i16&lt;/td&gt;
 &lt;td&gt;u16&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;32-bit&lt;/td&gt;
 &lt;td&gt;i32&lt;/td&gt;
 &lt;td&gt;u32&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;64-bit&lt;/td&gt;
 &lt;td&gt;i64&lt;/td&gt;
 &lt;td&gt;u64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;128-bit&lt;/td&gt;
 &lt;td&gt;i128&lt;/td&gt;
 &lt;td&gt;u128&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;arch&lt;/td&gt;
 &lt;td&gt;isize&lt;/td&gt;
 &lt;td&gt;usize&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;여기서, &lt;code&gt;i&lt;/code&gt;는 부호 있는(Signed) 정수로 양수와 음수를 사용할 수 있습니다.&lt;br&gt;
&lt;code&gt;u&lt;/code&gt;는 부호 없는(Unsigned) 정수로 양수만 사용할 수 있습니다.&lt;br&gt;
Signed는 1-Bit를 부호로 사용하기 때문에 값의 표현 범위가 Unsigned보다 작습니다.&lt;br&gt;
값의 표현 범위는 다음 수식처럼 계산할 수 있으며, $n$은 사용 비트 수를 의미합니다.&lt;/p&gt;</description></item><item><title>Casting</title><link>https://semonan.com/kr/book/programming/python/casting/</link><pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/python/casting/</guid><description>&lt;h1 id="python의-casting-타입-변환"&gt;Python의 Casting (타입 변환)&lt;a class="anchor" href="#python%ec%9d%98-casting-%ed%83%80%ec%9e%85-%eb%b3%80%ed%99%98"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Python에서 &amp;ldquo;형 변환&amp;quot;은 데이터 유형을 다른 데이터 유형으로 변환하는 것을 의미합니다.&lt;br&gt;
Python은 동적 타입 언어이기 때문에 변수의 데이터 유형을 명시적으로 변환하는 것이 필요할 때가 있습니다.&lt;/p&gt;
&lt;h2 id="1-int---float"&gt;1. int -&amp;gt; float&lt;a class="anchor" href="#1-int---float"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;다음 코드에서 변수 &lt;code&gt;a&lt;/code&gt; 는 int type 입니다.&lt;br&gt;
&lt;code&gt;b=float(a)&lt;/code&gt; 처럼 변수 &lt;code&gt;a&lt;/code&gt;를 float type으로 casting 했기 때문에, &lt;code&gt;b&lt;/code&gt;는 float type 이며 값은 실수 10.0 입니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-float---int"&gt;2. float -&amp;gt; int&lt;a class="anchor" href="#2-float---int"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;다음 코드는 float type &lt;code&gt;c&lt;/code&gt;를 int type으로 Casting하여 변수 &lt;code&gt;d&lt;/code&gt;에 저장하는 코드 입니다.&lt;br&gt;
&lt;code&gt;d&lt;/code&gt;는 int type이며 값은 정수 20 입니다.&lt;/p&gt;</description></item><item><title>함수</title><link>https://semonan.com/kr/book/programming/rust/function/</link><pubDate>Mon, 02 Dec 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/function/</guid><description>&lt;h1 id="함수-function"&gt;함수 (Function)&lt;a class="anchor" href="#%ed%95%a8%ec%88%98-function"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="함수-정의"&gt;함수 정의&lt;a class="anchor" href="#%ed%95%a8%ec%88%98-%ec%a0%95%ec%9d%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;함수는 다음과 같이 &lt;code&gt;fn&lt;/code&gt; 키워드를 통하여 생성합니다.&lt;br&gt;
함수를 정의하는 순서를 고려할 필요가 없으므로 Scope 어딘가에 정의되어 있으면 됩니다.&lt;br&gt;
따라서 다음 예제 코드는 main() 함수 뒤에 hello() 함수가 위치하고 있으며 컴파일 및 실행이 정상적으로 수행됩니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="매개변수-parameter"&gt;매개변수 (Parameter)&lt;a class="anchor" href="#%eb%a7%a4%ea%b0%9c%eb%b3%80%ec%88%98-parameter"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;다음 예제 코드와 같이 함수를 호출 할 때 Parameter를 넘길 수 있습니다.&lt;br&gt;
add 함수는 i64 타입의 &lt;code&gt;a&lt;/code&gt; 와 &lt;code&gt;b&lt;/code&gt; 두 개의 Parameter를 받을 수 있습니다.&lt;br&gt;
&lt;code&gt;i64&lt;/code&gt;처럼 함수에서 Parameter를 받을 때 타입을 반드시 선언해야 합니다.&lt;br&gt;
Parameter를 여러 개 전달 할 수 있습니다.&lt;/p&gt;</description></item><item><title>List</title><link>https://semonan.com/kr/book/programming/python/list/</link><pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/python/list/</guid><description>&lt;h1 id="python의-list"&gt;Python의 List&lt;a class="anchor" href="#python%ec%9d%98-list"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Python에서 List는 순서가 있는 가변적인 데이터의 집합입니다.&lt;br&gt;
List는 다양한 데이터 타입의 항목을 포함할 수 있으며, 항목들은 변경, 추가, 삭제가 가능합니다.&lt;/p&gt;
&lt;p&gt;10,000개의 값을 다루어야 한다고 가정해봅시다.&lt;br&gt;
변수를 10,000개 만든다는 것은 아주 비효율적입니다.&lt;br&gt;
따라서, 복수개의 값을 효율적으로 다루기 위하여 Python은 List를 제공합니다.&lt;/p&gt;
&lt;h2 id="1-list-생성"&gt;1. List 생성&lt;a class="anchor" href="#1-list-%ec%83%9d%ec%84%b1"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;List는 다음과 같이 &lt;code&gt;[ ]&lt;/code&gt; 를 사용하여 생성할 수 있습니다.&lt;br&gt;
&lt;code&gt;[ ]&lt;/code&gt; 안에 여러 개 값을 넣어서 하나의 List로 다룰 수 있습니다.&lt;br&gt;
다음 예제를 잘 보면, 정수, 실수, 문자열이 하나의 List에 포함됩니다.&lt;br&gt;
하나의 List에 여러가지 Data type을 담을 수 있다는 것도 중요한 특징입니다.&lt;br&gt;
List에 포함되어 있는 각 값을 원소(Element)라고 합니다.&lt;/p&gt;</description></item><item><title>Read/Write a file</title><link>https://semonan.com/kr/book/programming/python/file-io/</link><pubDate>Mon, 26 Aug 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/python/file-io/</guid><description>&lt;h1 id="python의-파일-읽고-쓰는-방법"&gt;Python의 파일 읽고 쓰는 방법&lt;a class="anchor" href="#python%ec%9d%98-%ed%8c%8c%ec%9d%bc-%ec%9d%bd%ea%b3%a0-%ec%93%b0%eb%8a%94-%eb%b0%a9%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Python으로 file을 읽고 쓰는 방법을 설명합니다.&lt;br&gt;
가장 많이 사용되는 예제코드 위주로 정리하였습니다.&lt;/p&gt;
&lt;h2 id="1-text-파일-읽기---파일-전체를-읽기"&gt;1. Text 파일 읽기 - 파일 전체를 읽기&lt;a class="anchor" href="#1-text-%ed%8c%8c%ec%9d%bc-%ec%9d%bd%ea%b8%b0---%ed%8c%8c%ec%9d%bc-%ec%a0%84%ec%b2%b4%eb%a5%bc-%ec%9d%bd%ea%b8%b0"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;다음과 같이 &lt;code&gt;open(&amp;quot;abcd.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;/code&gt;를 이용하여 file stream을 생성하고, &lt;code&gt;.read( )&lt;/code&gt;를 통하여 파일 전체를 한번에 읽을 수 있습니다.&lt;br&gt;
(file stream을 생성한다는 것은 파일에 접근할 수 있는 연결고리를 만든다는 의미입니다.)&lt;br&gt;
여기서 &lt;code&gt;&amp;quot;abcd.txt&amp;quot;&lt;/code&gt;는 읽을 파일 이름을 포함한 전체 경로를 의미하며 절대경로 및 상대경로를 사용할 수 있습니다.&lt;br&gt;
&lt;code&gt;&amp;quot;r&amp;quot;&lt;/code&gt;은 read mode 를 의미합니다.&lt;/p&gt;</description></item><item><title>문자열 자르기</title><link>https://semonan.com/kr/book/programming/rust/slices-of-collections/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/slices-of-collections/</guid><description>&lt;h1 id="문자열-자르기"&gt;문자열 자르기&lt;a class="anchor" href="#%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%9e%90%eb%a5%b4%ea%b8%b0"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="문자열-자르기-문법"&gt;문자열 자르기 문법&lt;a class="anchor" href="#%eb%ac%b8%ec%9e%90%ec%97%b4-%ec%9e%90%eb%a5%b4%ea%b8%b0-%eb%ac%b8%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust는 문자열을 자르기 자르기 위한 편리한 문법을 제공합니다.&lt;br&gt;
다음 코드를 통해서 알아봅시다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;&amp;amp;s[0..5]&lt;/code&gt; 처럼 코딩하면 &lt;code&gt;&amp;quot;hello&amp;quot;&lt;/code&gt;를 잘라낼 수 있습니다.&lt;br&gt;
여기서 0은 Start index를 의미하고, 5는 End index +1 를 의미합니다.&lt;br&gt;
(End index에 +1 하여 사용한다는 것을 유의하세요.)&lt;br&gt;
&lt;code&gt;&amp;amp;s[6..11]&lt;/code&gt; 처럼 코딩하면 &lt;code&gt;&amp;quot;world&amp;quot;&lt;/code&gt;를 잘라낼 수 있습니다.&lt;/p&gt;</description></item><item><title>struct</title><link>https://semonan.com/kr/book/programming/rust/struct/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/struct/</guid><description>&lt;h1 id="struct"&gt;struct&lt;a class="anchor" href="#struct"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="struct-기본적인-사용법"&gt;struct 기본적인 사용법&lt;a class="anchor" href="#struct-%ea%b8%b0%eb%b3%b8%ec%a0%81%ec%9d%b8-%ec%82%ac%ec%9a%a9%eb%b2%95"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rust의 Struct 사용법을 알아 봅시다.&lt;br&gt;
다음 예제의 &lt;code&gt;struct Person { ~~~ }&lt;/code&gt; 부분은 구조체를 정의하고 있습니다.&lt;br&gt;
&lt;code&gt;Person&lt;/code&gt; 구조체는 &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;age&lt;/code&gt;, &lt;code&gt;is_student&lt;/code&gt;의 Field를 가지고 있으며, 각 Field 마다 type이 정의 되었습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;: &lt;span class="kt"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_student&lt;/span&gt;: &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Person&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;semonan.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;: &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is_student&lt;/span&gt;: &lt;span class="nc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_student&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_student&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;let mut person = Person { ~~~ }&lt;/code&gt;과 같이, 구조체는 Instance로 생성되어야 사용할 수 있습니다.&lt;br&gt;
위 예제에서는 각 Field의 값을 변경할 수 있도록 mutable로 Instance를 생성했습니다.&lt;br&gt;
&lt;code&gt;person.name&lt;/code&gt;, &lt;code&gt;person.age&lt;/code&gt;, &lt;code&gt;person.is_student&lt;/code&gt; 처럼 코딩하면 구조체의 값을 읽을 수 있습니다.&lt;br&gt;
&lt;code&gt;person.age = 13;&lt;/code&gt; 처럼 코딩하면 값을 변경할 수 있습니다.&lt;/p&gt;</description></item><item><title>struct method</title><link>https://semonan.com/kr/book/programming/rust/struct-method/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://semonan.com/kr/book/programming/rust/struct-method/</guid><description>&lt;h1 id="struct-method"&gt;struct method&lt;a class="anchor" href="#struct-method"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="method-란"&gt;Method 란?&lt;a class="anchor" href="#method-%eb%9e%80"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Method는 Struct 안에 포함되어 있는 것이 다를 뿐, Function과 같다고 볼 수 있습니다.&lt;br&gt;
Method를 정의 하는 방법을 알아 봅시다.&lt;br&gt;
다음 예제의 &lt;code&gt;struct Person { ~~~ }&lt;/code&gt; 처럼 Person Struct를 정의 했습니다.&lt;br&gt;
&lt;code&gt;impl Person&lt;/code&gt; 에서 &lt;code&gt;impl&lt;/code&gt;은 implementation의 약어입니다.&lt;br&gt;
&lt;code&gt;impl { ~~~ }&lt;/code&gt; 안에 만들어지는 Function이 Method입니다.&lt;br&gt;
&lt;code&gt;fn speak(self) { ~~~ }&lt;/code&gt;처럼 Method를 만들었고, 첫번째 Parameter로 self를 전달 받았습니다.&lt;br&gt;
&lt;code&gt;self&lt;/code&gt;는 자기 자신인 &lt;code&gt;struct Person&lt;/code&gt;을 가르킵니다.&lt;br&gt;
반드시 Method의 첫번째 Parameter로 &lt;code&gt;self&lt;/code&gt;를 받아야 합니다. 그렇지 않으면 Compile error가 발생합니다.&lt;br&gt;
&lt;code&gt;println!(&amp;quot;hi, {}&amp;quot;, self.name);&lt;/code&gt; 은 &lt;code&gt;self.name&lt;/code&gt;을 print하고 있습니다.&lt;br&gt;
여기서 &lt;code&gt;self.name&lt;/code&gt;은 &lt;code&gt;struct Person { name: String, }&lt;/code&gt; 안의 &lt;code&gt;name: String&lt;/code&gt;을 가리키는 것입니다.&lt;br&gt;
&lt;code&gt;let person = Person{ ~~~ };&lt;/code&gt; 처럼 Instance를 생성 후, &lt;code&gt;person.speak()&lt;/code&gt; 처럼 Method를 호출 할 수 있습니다.&lt;/p&gt;</description></item></channel></rss>