소개
21기 스터디로 교육앱 만들기를 했는데요.
수업 때 유용하게 잘 사용하고 있습니다.
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
claude를 이용해서 만들었습니다.
Tip: 사용한 프롬프트 전문을 꼭 포함하고, 내용을 짧게 소개해 주세요.
책에 이런 설명이 있어서 설명을 주고 만들어 달라고 했습니다.
static: static 키워드가 붙느냐(정적인 메서드) 붙지 않느냐(인스턴스 메서드)에 따라 그 의미가 다름 일단 지금까지는 모든 메서드에 static을 붙이고 있음 뒤에서 클래스 만들기를 배우고 나서 static이 빠지는 형태의 함수를 다룰 것 void: 메서드의 반환 형식이 오는 자리이며, void 키워드는 반환값이 없다는 것을 나타냄 이는 메서드 수행 결과 어떤 값을 반환하고자 할 때 반환하려는 데이터 형식을 의미 Main: 메서드 이름을 나타내며 영문 대문자로 시작함 string[ ] args: 매개변수 영역으로, 메서드에 어떤 값을 넘겨줄 때 또는 넘겨받을 때 이를 잠시 보관해 놓는 그릇 역할을 하는 매개체가 되는 변수(배열)를 나타냄 매개변수는 콤마 기호를 구분으로 0개 이상 둘 수 있음 Main() 메서드에서는 다른 메서드와 달리 string[] args를 사용하는데, 이는 다른 말로 명령줄 인수(command line arguments)라고 함 예전 운영 체제인 도스(DOS) 시절에 주로 사용하던 방식으로, 어떤 실행 파일(EXE 파일)에 인수(argument) 값을 넘겨줄 때 넘어온 인수 값을 가리켜 명령줄 인수라고 함 이를 C#에서는 Main() 메서드의 매개변수로 받아 사용함 블록({ }): 메서드 실행 범위를 나타내며, 메서드 블록 내에서 선언된 변수는 해당 메서드가 종료되면 소멸함 -> 이 내용을 설명하는 html 단일 파일 좀 만들어줘.
Tip: 활용 이미지나 캡처 화면을 꼭 남겨주세요.
한국어 문자 메시지 스크린샷
한국어 텍스트가 있는 웹사이트
Tip: 코드 전문은 코드 블록에 감싸서 작성해주세요. ( / 을 눌러 '코드 블록'을 선택)
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>C# Main 메서드 구조 이해</title>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700;900&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet"/>
<style>
:root {
--bg: #f7f8fc;
--surface: #ffffff;
--surface2: #eef0f8;
--border: #dde0f0;
--text: #1a1c2e;
--muted: #8890b0;
--static-c: #e67e22;
--static-bg: rgba(230,126,34,0.08);
--static-bd: rgba(230,126,34,0.28);
--void-c: #8e44ad;
--void-bg: rgba(142,68,173,0.08);
--void-bd: rgba(142,68,173,0.28);
--main-c: #2563eb;
--main-bg: rgba(37,99,235,0.08);
--main-bd: rgba(37,99,235,0.28);
--param-c: #16a34a;
--param-bg: rgba(22,163,74,0.08);
--param-bd: rgba(22,163,74,0.28);
--block-c: #dc2626;
--block-bg: rgba(220,38,38,0.08);
--block-bd: rgba(220,38,38,0.28);
--code-bg: #1a1d2e;
--shadow: 0 2px 14px rgba(0,0,0,0.07);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
background: var(--bg);
color: var(--text);
font-family: 'Noto Sans KR', sans-serif;
line-height: 1.7;
}
/* ── 히어로 ── */
.hero {
background: var(--code-bg);
padding: 60px 24px 48px;
text-align: center;
position: relative; overflow: hidden;
}
.hero::after {
content: 'static void Main';
position: absolute; bottom: -16px; left: 50%;
transform: translateX(-50%);
font-family: 'JetBrains Mono', monospace;
font-size: 5rem; font-weight: 700;
color: rgba(255,255,255,0.025);
white-space: nowrap; pointer-events: none;
}
.hero-tag {
font-family: 'JetBrains Mono', monospace;
font-size: 11px; letter-spacing: .22em;
text-transform: uppercase; color: #585b7a;
margin-bottom: 16px;
}
.hero h1 {
font-size: clamp(1.8rem,4vw,3rem);
font-weight: 900; letter-spacing: -.03em;
line-height: 1.1; color: #cdd6f4;
margin-bottom: 14px;
}
.hero h1 .hl { color: #89b4fa; }
.hero-sub {
font-size: 15px; color: #585b7a;
max-width: 480px; margin: 0 auto 28px;
line-height: 1.85;
}
/* 히어로 코드 미리보기 */
.hero-code {
display: inline-block;
background: rgba(255,255,255,0.05);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 12px;
padding: 18px 28px;
font-family: 'JetBrains Mono', monospace;
font-size: 15px;
text-align: left;
line-height: 2.2;
}
.hc-static { color: #fab387; }
.hc-void { color: #cba6f7; }
.hc-main { color: #89b4fa; }
.hc-param { color: #a6e3a1; }
.hc-block { color: #f38ba8; }
.hc-gray { color: #585b7a; }
/* 빠른 이동 */
.quick-nav {
display: flex; justify-content: center;
gap: 8px; flex-wrap: wrap; margin-top: 24px;
}
.qn-btn {
padding: 6px 16px; border-radius: 20px;
border: 1px solid; background: transparent;
font-family: 'JetBrains Mono', monospace;
font-size: 12px; cursor: pointer;
text-decoration: none; transition: all .2s;
}
.qn-st { border-color: var(--static-bd); color: var(--static-c); }
.qn-vo { border-color: var(--void-bd); color: var(--void-c); }
.qn-ma { border-color: var(--main-bd); color: var(--main-c); }
.qn-pa { border-color: var(--param-bd); color: var(--param-c); }
.qn-bl { border-color: var(--block-bd); color: var(--block-c); }
.qn-btn:hover { filter: brightness(1.4); transform: translateY(-2px); }
/* ── 래퍼 ── */
.wrapper {
max-width: 880px; margin: 0 auto;
padding: 0 24px 100px;
}
/* ── 전체 구조 분해 박스 ── */
.structure-box {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 16px;
padding: 28px 32px;
margin-top: 48px;
box-shadow: var(--shadow);
}
.sb-title {
font-family: 'JetBrains Mono', monospace;
font-size: 10px; letter-spacing: .18em;
text-transform: uppercase; color: var(--muted);
margin-bottom: 24px;
}
/* 코드 분해 다이어그램 */
.code-diagram {
background: var(--code-bg);
border-radius: 12px;
padding: 28px 24px;
font-family: 'JetBrains Mono', monospace;
font-size: 17px;
line-height: 1;
overflow-x: auto;
margin-bottom: 24px;
}
.cd-row {
display: flex; align-items: center;
gap: 4px; flex-wrap: wrap;
margin-bottom: 4px;
}
.cd-token {
padding: 8px 12px; border-radius: 6px;
font-weight: 700; cursor: pointer;
border: 2px solid transparent;
transition: all .15s;
white-space: nowrap;
}
.cd-token:hover { filter: brightness(1.3); transform: translateY(-2px); }
.ct-static { background:var(--static-bg); border-color:var(--static-bd); color:var(--static-c); }
.ct-void { background:var(--void-bg); border-color:var(--void-bd); color:var(--void-c); }
.ct-main { background:var(--main-bg); border-color:var(--main-bd); color:var(--main-c); }
.ct-param { background:var(--param-bg); border-color:var(--param-bd); color:var(--param-c); }
.ct-block { background:var(--block-bg); border-color:var(--block-bd); color:var(--block-c); }
.ct-gray { color: #585b7a; padding: 8px 4px; }
/* 클릭 힌트 */
.click-hint {
font-size: 12px; color: var(--muted);
font-family: 'JetBrains Mono', monospace;
letter-spacing: .06em;
margin-top: 8px;
}
/* ── 섹션 ── */
.section {
margin-top: 56px;
animation: fadeUp .5s ease both;
}
.section:nth-child(1){animation-delay:.05s}
.section:nth-child(2){animation-delay:.10s}
.section:nth-child(3){animation-delay:.15s}
.section:nth-child(4){animation-delay:.20s}
.section:nth-child(5){animation-delay:.25s}
.sec-header {
display: flex; align-items: center;
gap: 14px; margin-bottom: 20px;
padding-bottom: 16px;
border-bottom: 1px solid var(--border);
}
.badge {
font-family: 'JetBrains Mono', monospace;
font-size: 13px; font-weight: 700;
padding: 6px 18px; border-radius: 8px;
border: 1.5px solid; white-space: nowrap;
}
.badge-st { background:var(--static-bg); border-color:var(--static-bd); color:var(--static-c); }
.badge-vo { background:var(--void-bg); border-color:var(--void-bd); color:var(--void-c); }
.badge-ma { background:var(--main-bg); border-color:var(--main-bd); color:var(--main-c); }
.badge-pa { background:var(--param-bg); border-color:var(--param-bd); color:var(--param-c); }
.badge-bl { background:var(--block-bg); border-color:var(--block-bd); color:var(--block-c); }
.sh-title h2 { font-size: 1.35rem; font-weight: 800; letter-spacing: -.02em; margin-bottom: 2px; }
.sh-title p { font-size: 13px; color: var(--muted); }
/* ── 설명 카드 ── */
.desc-card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 14px;
padding: 22px 28px;
margin-bottom: 14px;
font-size: 15px; line-height: 2;
color: #3a3a50; box-shadow: var(--shadow);
}
.desc-card strong { color: var(--text); }
.key-point {
display: inline-flex; align-items: center;
gap: 8px; margin-top: 12px;
padding: 9px 15px; border-radius: 8px;
font-size: 13.5px; font-weight: 600;
}
.kp-st { background:var(--static-bg); border:1px solid var(--static-bd); color:var(--static-c); }
.kp-vo { background:var(--void-bg); border:1px solid var(--void-bd); color:var(--void-c); }
.kp-ma { background:var(--main-bg); border:1px solid var(--main-bd); color:var(--main-c); }
.kp-pa { background:var(--param-bg); border:1px solid var(--param-bd); color:var(--param-c); }
.kp-bl { background:var(--block-bg); border:1px solid var(--block-bd); color:var(--block-c); }
/* ── 비유 박스 ── */
.analogy {
background: #fffbeb;
border: 1px solid #fde68a;
border-left: 4px solid #f59e0b;
border-radius: 10px;
padding: 16px 20px;
margin-bottom: 14px;
font-size: 14px; color: #78350f; line-height: 1.85;
}
.analogy .an-title {
font-weight: 700; font-size: 13px;
color: #92400e; margin-bottom: 6px;
}
/* ── 코드 블록 ── */
.code-block {
background: var(--code-bg);
border: 1px solid #252840;
border-radius: 12px; overflow: hidden;
margin-bottom: 14px;
}
.cb-bar {
display: flex; align-items: center; gap: 7px;
padding: 10px 16px;
background: rgba(255,255,255,0.03);
border-bottom: 1px solid #252840;
}
.dot { width:10px;height:10px;border-radius:50%; }
.dr{background:#f38ba8;} .dy{background:#f9e2af;} .dg{background:#a6e3a1;}
.cb-lang { font-family:'JetBrains Mono',monospace; font-size:11px; color:#44475a; margin-left:auto; }
pre {
padding: 18px 22px;
font-family: 'JetBrains Mono', monospace;
font-size: 13.5px; line-height: 2.1;
overflow-x: auto; color: #cdd6f4;
}
.kw { color: #cba6f7; }
.cl { color: #89b4fa; }
.fn { color: #89dceb; }
.str { color: #a6e3a1; }
.num { color: #fab387; }
.cm { color: #44475a; font-style: italic; }
.hl-st{ color: var(--static-c); font-weight:700; }
.hl-vo{ color: var(--void-c); font-weight:700; }
.hl-ma{ color: var(--main-c); font-weight:700; }
.hl-pa{ color: var(--param-c); font-weight:700; }
.hl-bl{ color: var(--block-c); font-weight:700; }
/* ── static 비교 표 ── */
.cmp-table {
width:100%; border-collapse:collapse;
font-size:14px;
background:var(--surface);
border:1px solid var(--border);
border-radius:14px; overflow:hidden;
box-shadow:var(--shadow);
margin-bottom:14px;
}
.cmp-table th {
padding:12px 18px; text-align:left;
font-family:'JetBrains Mono',monospace;
font-size:10px; letter-spacing:.12em;
text-transform:uppercase; color:var(--muted);
background:var(--surface2);
border-bottom:1px solid var(--border);
}
.cmp-table td {
padding:13px 18px;
border-bottom:1px solid rgba(0,0,0,0.04);
color:#555; vertical-align:middle;
}
.cmp-table tr:last-child td { border-bottom:none; }
.cmp-table tr:hover td { background:var(--surface2); }
.cmp-table td:first-child {
font-family:'JetBrains Mono',monospace;
font-size:13px; font-weight:700;
}
.cmp-table .row-st td:first-child { color:var(--static-c); }
.cmp-table .row-in td:first-child { color:var(--main-c); }
/* ── void 반환타입 카드 ── */
.return-grid {
display:grid; grid-template-columns:1fr 1fr;
gap:14px; margin-bottom:14px;
}
@media(max-width:540px){ .return-grid{grid-template-columns:1fr;} }
.ret-card {
border-radius:12px; overflow:hidden;
border:1.5px solid; box-shadow:var(--shadow);
}
.ret-head {
padding:11px 16px;
font-family:'JetBrains Mono',monospace;
font-size:13px; font-weight:700;
border-bottom:1px solid rgba(0,0,0,0.06);
}
.ret-card.void .ret-head { background:var(--void-bg); color:var(--void-c); border-color:var(--void-bd); }
.ret-card.int .ret-head { background:var(--main-bg); color:var(--main-c); border-color:var(--main-bd); }
.ret-body { background:var(--code-bg); }
.ret-body pre { padding:14px 16px; font-size:12.5px; }
/* ── 블록 변수 소멸 시각화 ── */
.block-visual {
background:var(--surface);
border:1px solid var(--border);
border-radius:14px; overflow:hidden;
box-shadow:var(--shadow); margin-bottom:14px;
}
.bv-header {
padding:11px 18px;
background:var(--surface2);
border-bottom:1px solid var(--border);
font-family:'JetBrains Mono',monospace;
font-size:10px; color:var(--muted);
letter-spacing:.12em; text-transform:uppercase;
}
.bv-body { padding:20px; }
.bv-row {
display:flex; align-items:center;
gap:14px; margin-bottom:10px;
}
.bv-step {
width:28px; height:28px; border-radius:50%;
display:flex; align-items:center; justify-content:center;
font-family:'JetBrains Mono',monospace;
font-size:12px; font-weight:700; flex-shrink:0;
}
.bs-1 { background:var(--block-bg); border:1px solid var(--block-bd); color:var(--block-c); }
.bs-2 { background:var(--param-bg); border:1px solid var(--param-bd); color:var(--param-c); }
.bs-3 { background:var(--static-bg); border:1px solid var(--static-bd); color:var(--static-c); }
.bv-content { flex:1; }
.bv-title { font-size:14px; font-weight:700; margin-bottom:3px; }
.bv-desc { font-size:13px; color:var(--muted); line-height:1.6; }
code {
font-family:'JetBrains Mono',monospace;
background:rgba(0,0,0,0.06);
padding:1px 7px; border-radius:4px;
font-size:12.5px;
}
/* ── 핵심 정리 ── */
.summary-grid {
display:grid;
grid-template-columns:repeat(auto-fit,minmax(155px,1fr));
gap:12px; margin-top:56px;
}
.sum-card {
background:var(--surface);
border:1px solid var(--border);
border-radius:14px; padding:20px;
box-shadow:var(--shadow); transition:transform .2s;
}
.sum-card:hover { transform:translateY(-4px); }
.sc-dot { width:10px;height:10px;border-radius:50%;margin-bottom:12px; }
.sc-kw { font-family:'JetBrains Mono',monospace; font-size:15px; font-weight:700; margin-bottom:6px; }
.sc-desc{ font-size:13px; color:var(--muted); line-height:1.65; }
@keyframes fadeUp { from{opacity:0;transform:translateY(18px);}to{opacity:1;transform:translateY(0);} }
</style>
</head>
<body>
<!-- 히어로 -->
<div class="hero">
<div class="hero-tag">C# · Method · 구조 분석</div>
<h1>Main 메서드<br/><span class="hl">구조 완전 이해</span></h1>
<p class="hero-sub">
static · void · Main · 매개변수 · 블록<br/>
각 키워드가 무슨 역할을 하는지 하나씩 알아봐요!
</p>
<div class="hero-code">
<span class="hc-static">static</span> <span class="hc-void">void</span> <span class="hc-main">Main</span><span class="hc-gray">(</span><span class="hc-param">string[] args</span><span class="hc-gray">)</span><br/>
<span class="hc-block">{</span><br/>
<span class="hc-gray">// 여기에 코드 작성</span><br/>
<span class="hc-block">}</span>
</div>
<div class="quick-nav">
<a href="#sec-st" class="qn-btn qn-st">static</a>
<a href="#sec-vo" class="qn-btn qn-vo">void</a>
<a href="#sec-ma" class="qn-btn qn-ma">Main</a>
<a href="#sec-pa" class="qn-btn qn-pa">매개변수</a>
<a href="#sec-bl" class="qn-btn qn-bl">블록 { }</a>
</div>
</div>
<div class="wrapper">
<!-- 전체 구조 분해 -->
<div class="structure-box">
<div class="sb-title">🔍 전체 구조 한눈에 보기</div>
<div class="code-diagram">
<div class="cd-row">
<span class="cd-token ct-static">static</span>
<span class="cd-token ct-void">void</span>
<span class="cd-token ct-main">Main</span>
<span class="ct-gray">(</span>
<span class="cd-token ct-param">string[] args</span>
<span class="ct-gray">)</span>
</div>
<div class="cd-row" style="margin-top:8px;">
<span class="cd-token ct-block">{</span>
</div>
<div class="cd-row" style="margin-left:32px;margin-top:4px;">
<span style="font-family:'JetBrains Mono',monospace;color:#44475a;font-size:14px;">// 실행할 코드</span>
</div>
<div class="cd-row" style="margin-top:4px;">
<span class="cd-token ct-block">}</span>
</div>
</div>
<div class="click-hint">↑ 각 키워드를 클릭하면 해당 섹션으로 이동해요!</div>
</div>
<!-- ── 01 static ── -->
<div class="section" id="sec-st">
<div class="sec-header">
<div class="badge badge-st">static</div>
<div class="sh-title">
<h2>정적 메서드 키워드</h2>
<p>객체를 만들지 않아도 바로 사용할 수 있는 메서드</p>
</div>
</div>
<div class="desc-card">
<strong>static</strong> 키워드가 붙느냐 붙지 않느냐에 따라 메서드의 의미가 달라져요.<br/><br/>
<strong>static이 붙은 경우</strong> → <strong>정적 메서드</strong> : 객체를 만들지 않고 바로 호출 가능<br/>
<strong>static이 없는 경우</strong> → <strong>인스턴스 메서드</strong> : 클래스로 객체를 만들어야 호출 가능<br/><br/>
지금은 모든 메서드에 <code>static</code>을 붙이고 있어요.<br/>
나중에 클래스를 배우고 나면 static이 빠진 형태도 다루게 돼요!
<br/>
<div class="key-point kp-st">📌 지금은 static = "그냥 바로 쓸 수 있는 메서드" 라고 기억하세요!</div>
</div>
<div class="analogy">
<div class="an-title">🍕 쉬운 비유</div>
<strong>static 메서드</strong>는 식당에 미리 차려진 뷔페 음식 같아요.<br/>
예약(객체 생성) 없이 바로 가져다 먹을(호출) 수 있어요!<br/>
반면 <strong>인스턴스 메서드</strong>는 주문(객체 생성) 후에만 받을 수 있는 음식이에요.
</div>
<div style="overflow-x:auto;">
<table class="cmp-table">
<thead>
<tr>
<th>구분</th>
<th>static 여부</th>
<th>호출 방법</th>
<th>배우는 시점</th>
</tr>
</thead>
<tbody>
<tr class="row-st">
<td>정적 메서드</td>
<td>static <strong>있음</strong></td>
<td>객체 없이 바로 호출</td>
<td>지금 ← 여기</td>
</tr>
<tr class="row-in">
<td>인스턴스 메서드</td>
<td>static <strong>없음</strong></td>
<td>객체 생성 후 호출</td>
<td>클래스 배운 후</td>
</tr>
</tbody>
</table>
</div>
<div class="code-block">
<div class="cb-bar"><div class="dot dr"></div><div class="dot dy"></div><div class="dot dg"></div><div class="cb-lang">C#</div></div>
<pre><span class="cm">// ✅ static 메서드 — 바로 호출 가능</span>
<span class="hl-st">static</span> <span class="kw">void</span> <span class="fn">SayHello</span>()
{
Console.<span class="fn">WriteLine</span>(<span class="str">"안녕하세요!"</span>);
}
<span class="cm">// 호출 — 객체 없이 바로!</span>
<span class="fn">SayHello</span>(); <span class="cm">// 안녕하세요!</span></pre>
</div>
</div>
<!-- ── 02 void ── -->
<div class="section" id="sec-vo">
<div class="sec-header">
<div class="badge badge-vo">void</div>
<div class="sh-title">
<h2>반환 형식</h2>
<p>메서드가 실행 후 돌려주는 값의 타입</p>
</div>
</div>
<div class="desc-card">
<strong>void</strong>는 메서드의 <strong>반환 형식이 오는 자리</strong>에 써요.<br/>
<code>void</code> 키워드는 <strong>"반환값이 없다"</strong>는 것을 나타내요.<br/><br/>
메서드가 수행 결과 어떤 값을 돌려주고 싶다면, <code>void</code> 대신<br/>
반환하려는 <strong>데이터 형식(int, string 등)을 써요.</strong>
<br/>
<div class="key-point kp-vo">📌 void = "이 메서드는 결과값을 돌려주지 않아요"</div>
</div>
<div class="return-grid">
<div class="ret-card void">
<div class="ret-head">void — 반환값 없음</div>
<div class="ret-body">
<pre><span class="hl-vo">void</span> <span class="fn">PrintHello</span>()
{
Console.<span class="fn">WriteLine</span>(<span class="str">"안녕!"</span>);
<span class="cm">// return 없음</span>
}</pre>
</div>
</div>
<div class="ret-card int">
<div class="ret-head">int — 정수 반환</div>
<div class="ret-body">
<pre><span class="hl-ma">int</span> <span class="fn">Add</span>(<span class="kw">int</span> a, <span class="kw">int</span> b)
{
<span class="kw">return</span> a + b;
<span class="cm">// 값을 돌려줌!</span>
}</pre>
</div>
</div>
</div>
<div class="code-block">
<div class="cb-bar"><div class="dot dr"></div><div class="dot dy"></div><div class="dot dg"></div><div class="cb-lang">C# — 반환 형식 종류</div></div>
<pre><span class="hl-vo">void</span> <span class="fn">PrintMessage</span>() { ... } <span class="cm">// 반환값 없음</span>
<span class="kw">int</span> <span class="fn">GetAge</span>() { ... } <span class="cm">// 정수 반환</span>
<span class="kw">string</span> <span class="fn">GetName</span>() { ... } <span class="cm">// 문자열 반환</span>
<span class="kw">double</span> <span class="fn">GetPrice</span>() { ... } <span class="cm">// 실수 반환</span>
<span class="kw">bool</span> <span class="fn">IsAdult</span>() { ... } <span class="cm">// 참/거짓 반환</span></pre>
</div>
</div>
<!-- ── 03 Main ── -->
<div class="section" id="sec-ma">
<div class="sec-header">
<div class="badge badge-ma">Main</div>
<div class="sh-title">
<h2>메서드 이름</h2>
<p>프로그램의 시작점 — 영문 대문자로 시작</p>
</div>
</div>
<div class="desc-card">
<strong>Main</strong>은 메서드의 이름을 나타내요.<br/>
C#에서 <code>Main()</code>은 특별한 메서드로, <strong>프로그램이 시작되면 가장 먼저 실행</strong>돼요.<br/><br/>
메서드 이름은 <strong>영문 대문자로 시작</strong>하는 것이 C# 관례예요.<br/>
(예: <code>Main</code>, <code>PrintHello</code>, <code>CalculateScore</code>)
<br/>
<div class="key-point kp-ma">📌 Main() = 프로그램의 출발점! 여기서부터 코드가 실행돼요.</div>
</div>
<div class="analogy">
<div class="an-title">🚪 쉬운 비유</div>
<code>Main()</code> 메서드는 건물의 <strong>정문(입구)</strong>과 같아요.<br/>
어떤 건물이든 정문으로 들어가야 하듯, C# 프로그램은 항상 <code>Main()</code>에서 시작해요!
</div>
<div class="code-block">
<div class="cb-bar"><div class="dot dr"></div><div class="dot dy"></div><div class="dot dg"></div><div class="cb-lang">C#</div></div>
<pre><span class="kw">class</span> <span class="cl">Program</span>
{
<span class="cm">// 프로그램 시작점 — 가장 먼저 실행!</span>
<span class="hl-st">static</span> <span class="hl-vo">void</span> <span class="hl-ma">Main</span>(<span class="hl-pa">string[] args</span>)
<span class="hl-bl">{</span>
Console.<span class="fn">WriteLine</span>(<span class="str">"프로그 램 시작!"</span>);
<span class="cm">// 여기 코드들이 순서대로 실행돼요</span>
<span class="hl-bl">}</span>
}</pre>
</div>
</div>
<!-- ── 04 매개변수 ── -->
<div class="section" id="sec-pa">
<div class="sec-header">
<div class="badge badge-pa">string[] args</div>
<div class="sh-title">
<h2>매개변수 (Parameter)</h2>
<p>메서드에 값을 넘겨줄 때 잠시 보관하는 그릇</p>
</div>
</div>
<div class="desc-card">
<strong>매개변수</strong>는 메서드에 어떤 값을 <strong>넘겨줄 때 또는 넘겨받을 때</strong><br/>
이를 잠시 보관해 놓는 <strong>그릇 역할</strong>을 하는 변수예요.<br/><br/>
매개변수는 <code>,</code> 콤마로 구분해서 <strong>0개 이상</strong> 둘 수 있어요.<br/><br/>
<code>Main()</code> 메서드에서는 특별히 <code>string[] args</code>를 사용하는데,<br/>
이를 <strong>명령줄 인수(Command Line Arguments)</strong>라고 해요.<br/>
예전 DOS 시절에 실행 파일(EXE)에 인수를 넘겨주던 방식에서 비롯됐어요.
<br/>
<div class="key-point kp-pa">📌 매개변수 = 메서드에 값을 전달하는 그릇 · 0개 이상 사용 가능</div>
</div>
<div class="analogy">
<div class="an-title">📦 쉬운 비유</div>
매개변수는 <strong>택배 상자</strong>와 같아요.<br/>
물건(값)을 상자(매개변수)에 담아서 메서드에 전달해요.<br/>
상자가 없어도 되고(0개), 여러 개 보내도 돼요!
</div>
<div class="code-block">
<div class="cb-bar"><div class="dot dr"></div><div class="dot dy"></div><div class="dot dg"></div><div class="cb-lang">C# — 매개변수 예시</div></div>
<pre><span class="cm">// 매개변수 0개</span>
<span class="hl-st">static</span> <span class="hl-vo">void</span> <span class="fn">Hello</span>() { ... }
<span class="cm">// 매개변수 1개</span>
<span class="hl-st">static</span> <span class="hl-vo">void</span> <span class="fn">Hello</span>(<span class="hl-pa">string name</span>) { ... }
<span class="cm">// 매개변수 2개 — 콤마로 구분</span>
<span class="hl-st">static</span> <span class="kw">int</span> <span class="fn">Add</span>(<span class="hl-pa">int a, int b</span>) { ... }
<span class="cm">// Main의 특별한 매개변수</span>
<span class="hl-st">static</span> <span class="hl-vo">void</span> <span class="hl-ma">Main</span>(<span class="hl-pa">string[] args</span>)
{
<span class="cm">// args[0], args[1]... 으로 접근 가능</span>
<span class="cm">// 예: dotnet run 홍길동 → args[0] = "홍길동"</span>
}</pre>
</div>
</div>
<!-- ── 05 블록 ── -->
<div class="section" id="sec-bl">
<div class="sec-header">
<div class="badge badge-bl">{ } 블록</div>
<div class="sh-title">
<h2>메서드 실행 범위</h2>
<p>중 괄호 안 변수는 메서드 종료 시 사라져요</p>
</div>
</div>
<div class="desc-card">
<strong>블록({ })</strong>은 메서드의 <strong>실행 범위</strong>를 나타내요.<br/>
중괄호 <code>{</code>로 시작해서 <code>}</code>로 끝나요.<br/><br/>
중요한 점! <strong>블록 내에서 선언된 변수는 해당 메서드가 종료되면 소멸</strong>해요.<br/>
즉, 변수는 선언된 블록 안에서만 살아있어요.
<br/>
<div class="key-point kp-bl">📌 { } 안의 변수는 } 를 만나는 순간 사라져요!</div>
</div>
<div class="block-visual">
<div class="bv-header">🔍 블록과 변수 생존 범위</div>
<div class="bv-body">
<div class="bv-row">
<div class="bv-step bs-1">1</div>
<div class="bv-content">
<div class="bv-title"><code>{</code> — 블록 시작</div>
<div class="bv-desc">메서드가 실행되기 시작해요. 이 안에서 선언된 변수가 생겨나요.</div>
</div>
</div>
<div class="bv-row">
<div class="bv-step bs-2">2</div>
<div class="bv-content">
<div class="bv-title">변수 선언 → 메모리에 생성</div>
<div class="bv-desc"><code>int age = 20;</code> 같은 변수가 블록 안에서 살아있어요.</div>
</div>
</div>
<div class="bv-row">
<div class="bv-step bs-3">3</div>
<div class="bv-content">
<div class="bv-title"><code>}</code> — 블록 종료 → 변수 소멸!</div>
<div class="bv-desc">블록이 끝나면 안에서 선언된 모든 변수가 메모리에서 사라져요.</div>
</div>
</div>
</div>
</div>
<div class="code-block">
<div class="cb-bar"><div class="dot dr"></div><div class="dot dy"></div><div class="dot dg"></div><div class="cb-lang">C# — 변수 범위(Scope)</div></div>
<pre><span class="hl-st">static</span> <span class="hl-vo">void</span> <span class="hl-ma">Main</span>(<span class="hl-pa">string[] args</span>)
<span class="hl-bl">{</span>
<span class="cm">// ← 블록 시작! 여기서부터 변수 생존</span>
<span class="kw">int</span> age = <span class="num">20</span>;
<span class="kw">string</span> name = <span class="str">"홍길동"</span>;
Console.<span class="fn">WriteLine</span>(<span class="str">$"{name}은 {age}살"</span>);
<span class="hl-bl">}</span>
<span class="cm">// ← 블록 끝! age, name 변수 소멸!</span>
<span class="cm">// Console.WriteLine(age); → ❌ 오류! 변수가 없어요.</span></pre>
</div>
<div class="analogy">
<div class="an-title">🏠 쉬운 비유</div>
블록은 <strong>방</strong>과 같아요.<br/>
방 안에서 만든 물건(변수)은 방 안에서만 사용할 수 있어요.<br/>
방문을 닫는 순간(<code>}</code>) 물건은 사라져요!
</div>
</div>
<!-- 핵심 정리 -->
<div class="summary-grid">
<div class="sum-card">
<div class="sc-dot" style="background:var(--static-c);"></div>
<div class="sc-kw" style="color:var(--static-c);">static</div>
<div class="sc-desc">객체 없이 바로 호출 가능한 정적 메서드. 지금은 모든 메서드에 붙임.</div>
</div>
<div class="sum-card">
<div class="sc-dot" style="background:var(--void-c);"></div>
<div class="sc-kw" style="color:var(--void-c);">void</div>
<div class="sc-desc">반환값 없음. 결과를 돌려줄 때는 int·string 등 타입을 씀.</div>
</div>
<div class="sum-card">
<div class="sc-dot" style="background:var(--main-c);"></div>
<div class="sc-kw" style="color:var(--main-c);">Main</div>
<div class="sc-desc">프로그램의 시작점. 항상 대문자로 시작하는 메서드 이름.</div>
</div>
<div class="sum-card">
<div class="sc-dot" style="background:var(--param-c);"></div>
<div class="sc-kw" style="color:var(--param-c);">string[] args</div>
<div class="sc-desc">명령줄 인수. 매개변수는 0개 이상, 콤마로 구분.</div>
</div>
<div class="sum-card">
<div class="sc-dot" style="background:var(--block-c);"></div>
<div class="sc-kw" style="color:var(--block-c);">{ } 블록</div>
<div class="sc-desc">메서드 실행 범위. 블록 안 변수는 } 에서 소멸.</div>
</div>
</div>
</div>
</body>
</html>
결과와 배운 점
내가 만들고자 하는 강의 자료를 먼저 정리하고, 그 다음에 만들어 달라고 했을 때 퀄리티가 확실이 좀 더 좋은 듯 합니다. 실습인 경우에는 시뮬레이션이나 퀴즈 같은 것을 넣으면 훨씬 더 이해하기가 편합니다.