C# 메인 메소드에 대해서 설명해주는 html 강의 자료 만들기

소개

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/>
    &nbsp;&nbsp;&nbsp;&nbsp;<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>

결과와 배운 점

내가 만들고자 하는 강의 자료를 먼저 정리하고, 그 다음에 만들어 달라고 했을 때 퀄리티가 확실이 좀 더 좋은 듯 합니다. 실습인 경우에는 시뮬레이션이나 퀴즈 같은 것을 넣으면 훨씬 더 이해하기가 편합니다.

밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.