<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>upgrade and develop</title>
    <link>https://rungch.tistory.com/</link>
    <description>https://github.com/undcore</description>
    <language>ko</language>
    <pubDate>Wed, 24 Jun 2026 08:10:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>렁치</managingEditor>
    <image>
      <title>upgrade and develop</title>
      <url>https://tistory1.daumcdn.net/tistory/8871148/attach/139171449ca342d8a517a3016912e2ce</url>
      <link>https://rungch.tistory.com</link>
    </image>
    <item>
      <title>[데이터베이스] 01_데이터베이스 기본 개념</title>
      <link>https://rungch.tistory.com/5</link>
      <description>&lt;p&gt;데이터베이스를 흔히 &amp;quot;데이터의 집합&amp;quot;이라고 정의한다. 그런데 이 정의를 처음 만나면 자연스럽게 궁금해진다. 그럼 엑셀 파일이나 메모장에 적은 전화번호 목록도 데이터베이스라고 부를 수 있을까?&lt;/p&gt;
&lt;p&gt;이 글에서는 &amp;quot;그냥 데이터를 모아둔 것&amp;quot;과 &amp;quot;데이터베이스&amp;quot;를 가르는 기준이 무엇인지, 그리고 왜 굳이 파일 대신 데이터베이스라는 별도의 체계를 만들게 되었는지를 차근차근 짚어본다.&lt;/p&gt;
&lt;p&gt;이 출발점을 제대로 잡아두면, 데이터베이스가 갖춰야 할 여러 성질이 결국 &amp;quot;이 기준을 지키기 위한 장치&amp;quot;로 자연스럽게 이해된다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;1. 데이터와 정보&lt;/h2&gt;
&lt;div style=&quot;border-left:4px solid #4f8cff; background:#f4f8ff; padding:12px 16px; border-radius:6px; margin:16px 0;&quot;&gt;
&lt;strong&gt;데이터(data)&lt;/strong&gt; : 현실 세계에서 관찰·측정으로 수집한 &lt;strong&gt;사실이나 값&lt;/strong&gt; 그 자체.&lt;br&gt;
&lt;strong&gt;정보(information)&lt;/strong&gt; : 의사결정에 유용하도록 &lt;strong&gt;데이터를 처리·가공한 결과물&lt;/strong&gt;.
&lt;/div&gt;

&lt;p&gt;둘의 차이는 &amp;quot;가공 여부&amp;quot;다. &amp;quot;오늘 기온 30도&amp;quot;, &amp;quot;손님 A가 라면을 구매&amp;quot; 같은 것은 데이터다. 여기서 &amp;quot;최근 일주일 기온이 오르자 차가운 면류 판매가 40% 늘었다 → 비빔면 발주를 늘리자&amp;quot;라는 판단을 끌어내면 그게 정보다. 즉 데이터는 재료, 정보는 그 재료로 의사결정을 도울 수 있게 요리한 결과다.&lt;/p&gt;
&lt;p&gt;이 관계가 중요한 이유는, &lt;strong&gt;데이터베이스의 존재 목적이 바로 &amp;quot;데이터를 잘 저장해뒀다가 필요할 때 정보로 만들어내는 것&amp;quot;&lt;/strong&gt;이기 때문이다.&lt;/p&gt;
&lt;p&gt;데이터를 수집·저장하고 가공해 정보를 제공하는 전체를 정보 시스템이라 하고, 그 한가운데서 데이터를 저장·공급하는 핵심 부품이 데이터베이스다. 결국 데이터베이스를 공부한다는 것은 &amp;quot;데이터를 정보로 바꾸는 일을 어떻게 빠르고 정확하고 안전하게 할 것인가&amp;quot;를 배우는 일이다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;2. 데이터베이스의 정의: 네 가지 성격&lt;/h2&gt;
&lt;div style=&quot;border-left:4px solid #4f8cff; background:#f4f8ff; padding:12px 16px; border-radius:6px; margin:16px 0;&quot;&gt;
&lt;strong&gt;데이터베이스 = 공유(Shared)·통합(Integrated)·저장(Stored)·운영(Operational) 데이터의 집합&lt;/strong&gt;&lt;br&gt;
특정 조직의 여러 사용자가 &lt;strong&gt;공유&lt;/strong&gt;하기 위해, 중복을 통제해 &lt;strong&gt;통합&lt;/strong&gt;하고, 컴퓨터 매체에 &lt;strong&gt;저장&lt;/strong&gt;한, 조직 운영에 꼭 필요한(&lt;strong&gt;운영&lt;/strong&gt;) 데이터의 모음이다.
&lt;/div&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;성격&lt;/th&gt;
&lt;th&gt;의미&lt;/th&gt;
&lt;th&gt;왜 중요한가&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;공유 데이터&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;여러 사용자·응용이 함께 소유·이용&lt;/td&gt;
&lt;td&gt;개인 파일과 달리 &amp;quot;여럿이 동시에&amp;quot; 쓴다는 전제가 모든 설계를 좌우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;통합 데이터&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;중복을 최소화(통제 가능한 중복만 허용)&lt;/td&gt;
&lt;td&gt;중복이 곧 불일치의 씨앗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;저장 데이터&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;컴퓨터가 접근 가능한 매체에 저장&lt;/td&gt;
&lt;td&gt;사람의 기억·종이가 아닌 기계가 다룰 형태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;운영 데이터&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;조직 운영에 지속적으로 필요한 데이터&lt;/td&gt;
&lt;td&gt;일회성 임시 데이터가 아닌 &amp;quot;살아 있는&amp;quot; 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;네 성격 중 가장 곱씹어볼 것은 &lt;strong&gt;통합 데이터&lt;/strong&gt;다. 왜 중복을 &amp;quot;0&amp;quot;이 아니라 &amp;quot;최소&amp;quot;라고 할까? 그리고 왜 중복이 문제일까?&lt;/p&gt;
&lt;p&gt;같은 데이터(예: 고객 주소)가 여러 곳에 중복 저장되면, 한 곳만 갱신하고 다른 곳을 놓쳤을 때 값이 서로 어긋나는 &lt;strong&gt;데이터 불일치(inconsistency)&lt;/strong&gt;가 발생한다. 그래서 데이터베이스는 중복을 최소화하려 하지만, 한편으로는 성능을 위해 의도적으로 일부 중복을 허용하기도 한다(그래서 &amp;quot;통제 가능한 최소의 중복&amp;quot;이라 표현한다).&lt;/p&gt;
&lt;p&gt;중복 제거를 통한 일관성과 조회 성능은 서로 상충하며, 이 둘 사이의 trade-off는 데이터베이스 설계 전반에서 끊임없이 마주치는 핵심 문제다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;3. 데이터베이스의 특징&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;특징&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;실시간 접근(real-time access)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;사용자 질의에 즉시 응답한다. 나중에 모아 처리하는 게 아니다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;계속 변화(continuous evolution)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;삽입·삭제·수정이 끊임없이 일어나며 항상 최신 상태를 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;동시 공유(concurrent sharing)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;여러 사용자가 같은 데이터를 동시에 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;내용 기반 참조(content-based reference)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;위치·주소가 아니라 &lt;strong&gt;데이터의 내용(값)&lt;/strong&gt;으로 참조&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;이 네 특징은 &amp;quot;파일과 무엇이 다른가&amp;quot;로 읽으면 선명해진다. 특히 &lt;strong&gt;내용 기반 참조&lt;/strong&gt;가 결정적이다.&lt;/p&gt;
&lt;p&gt;일반 파일에서 데이터를 찾으려면 &amp;quot;몇 번째 줄, 몇 번째 바이트&amp;quot;라는 위치를 알아야 한다. 반면 데이터베이스에는 &amp;quot;나이가 20살인 사람을 모두 찾아라&amp;quot;처럼 &lt;strong&gt;값으로&lt;/strong&gt; 묻는다. 그 데이터가 디스크 어디에 있는지는 몰라도 된다.&lt;/p&gt;
&lt;p&gt;이게 가능하려면 시스템이 내용으로 위치를 찾아주는 색인(인덱스) 구조를 갖추고 있어야 하는데, 데이터베이스는 이 색인을 자동으로 관리해 사용자가 위치를 신경 쓰지 않게 해준다.&lt;/p&gt;
&lt;p&gt;또 &lt;strong&gt;동시 공유&lt;/strong&gt;는 그냥 &amp;quot;같이 본다&amp;quot;가 아니라 까다로운 문제를 품고 있다. 두 사람이 같은 계좌 잔액을 동시에 읽어 각자 수정하면, 한쪽의 변경이 다른쪽에 덮여 사라질 수 있다. 데이터베이스는 이런 동시 접근 충돌을 트랜잭션과 병행 제어라는 장치로 막아, 여러 사용자가 동시에 써도 데이터가 어긋나지 않도록 보장한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3&gt;한 걸음 더&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;데이터베이스가 등장하기 전에는 응용 프로그램마다 각자 파일을 두고 데이터를 관리했다(파일 시스템 방식). 이때 같은 데이터가 프로그램마다 중복 저장돼 불일치가 잦았고, 데이터 구조가 바뀌면 그걸 쓰는 모든 프로그램을 고쳐야 했다(데이터 종속성). 데이터베이스는 데이터를 한곳에 통합하고 프로그램과 분리(데이터 독립성)함으로써 이 두 고질병을 풀려고 나온 것이다. 이 분리를 실제로 실현해주는 소프트웨어가 바로 DBMS다.&lt;/li&gt;
&lt;li&gt;데이터와 정보의 위에는 흔히 &lt;strong&gt;지식(knowledge)&lt;/strong&gt;과 &lt;strong&gt;지혜(wisdom)&lt;/strong&gt;를 더한 DIKW 피라미드를 얹기도 한다. &amp;quot;30도(데이터) → 더우면 면류가 잘 팔린다(정보) → 그래서 여름엔 면류 재고 전략을 이렇게 짠다(지식)&amp;quot;처럼 추상도가 올라가는 계층인데, 최근의 데이터 분석·머신러닝이 노리는 지점이 바로 이 위쪽 단계다.&lt;/li&gt;
&lt;li&gt;이 글의 정의는 관계형 데이터베이스를 전제로 한 고전적 정의다. 오늘날에는 정형화된 표 대신 문서·키-값·그래프 형태로 다루는 &lt;strong&gt;NoSQL&lt;/strong&gt;이나, 대용량 분석에 특화된 데이터 웨어하우스도 널리 쓰인다. 다만 &amp;quot;공유·통합·저장·운영&amp;quot;이라는 본질적 성격은 형태가 바뀌어도 거의 그대로 유지된다. 그래서 이 기본기를 먼저 다지는 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;</description>
      <category>data/database</category>
      <category>CS지식</category>
      <category>db</category>
      <category>DBMS</category>
      <category>NoSQL</category>
      <category>데이터베이스</category>
      <category>데이터베이스특징</category>
      <category>데이터와정보</category>
      <category>전산기초</category>
      <category>정보시스템</category>
      <author>렁치</author>
      <guid isPermaLink="true">https://rungch.tistory.com/5</guid>
      <comments>https://rungch.tistory.com/5#entry5comment</comments>
      <pubDate>Wed, 24 Jun 2026 06:06:25 +0900</pubDate>
    </item>
    <item>
      <title>[윈도우즈프로그래밍] Visual Basic 숫자 야구 게임 - 과제 리뷰</title>
      <link>https://rungch.tistory.com/1</link>
      <description>&lt;p data-path-to-node=&quot;1&quot; data-ke-size=&quot;size16&quot;&gt;윈도우즈 프로그래밍 수업 과제로 제출한 숫자 야구 게임 코드 분석 및 리뷰. 문제 해결을 위한 논리 구조와 코딩 원칙을 기준으로 각 모듈의 역할을 분리하여 정리함.&lt;/p&gt;
&lt;p data-path-to-node=&quot;1&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;2&quot;&gt;문제 접근 방식 및 논리 구조 설계&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;2&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;코드를 작성할 때 핵심으로 삼은 것은 '사람이 손으로 직접 야구 게임을 계산하는 절차를 왜곡 없이 코드로 옮기는 것'이다. 무리하게 수학적으로 로직을 압축하거나 복잡한 추상화를 도입하는 것을 지양하고, 디버깅 시 계산 과정을 직관적으로 추적할 수 있도록 논리를 구성했다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,0,0&quot;&gt;데이터 구조화:&lt;/b&gt; 컴퓨터 정답과 사용자 입력을 길이 3의 1차원 정수 배열로 정의하여, 인덱스(0~2)를 기준으로 위치와 값을 동시에 비교할 수 있는 기반을 마련한다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,1,0&quot;&gt;제어 흐름의 표준화:&lt;/b&gt; 배열 순회 및 난수 생성 반복문은 반드시 초기값을 0으로 설정하고, 조건식은 &amp;lt;= 대신 &amp;lt; 3을 고수하여 경계값 오류(Off-by-one error)를 원천 차단한다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,2,0&quot;&gt;단계적 모듈화:&lt;/b&gt; 코드의 흐름을 [전역/지역 변수 선언부] &amp;rarr; [초기화 및 검증] &amp;rarr; [핵심 연산부] &amp;rarr; [결과 출력부]로 철저히 분리한다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,3,0&quot;&gt;명시적 변수 사용:&lt;/b&gt; 한 줄 계산으로 끝내기보다 중간 변수(num, val, strike, ball)를 두어 상태 변화를 명시적으로 추적한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6&quot;&gt;1. 변수 선언부 (상태 관리)&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;프로그램 전체에서 유지되어야 하는 상태 변수들은 클래스 최상단에 몰아서 선언한다. 변수 선언부를 기능과 섞지 않고 상단에 배치해야 전체적인 데이터 구조를 파악하기 용이하다.&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwiFhsD4t5yVAxUAAAAAHQAAAAAQpQo&quot; data-hveid=&quot;0&quot;&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;' 게임 상태 변수
Dim answer(2) As Integer   ' 컴퓨터가 선택한 정답 숫자 3개 (인덱스 0~2)
Dim tryCount As Integer    ' 시도 횟수 카운터
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9&quot;&gt;2. 초기화 및 난수 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;정답 배열을 세팅하는 로직이다. 루프 변수 i는 0부터 시작해 &amp;lt; 3 조건으로 통제한다.&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwiFhsD4t5yVAxUAAAAAHQAAAAAQpgo&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;Dim rnd As New Random()
Dim used As New List(Of Integer)
Dim i As Integer = 0

Do While i &amp;lt; 3
    Dim num As Integer = rnd.Next(1, 10)  ' 1 이상 10 미만 &amp;rarr; 1~9
    If Not used.Contains(num) Then
        answer(i) = num
        used.Add(num)
        i += 1
    End If
Loop
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;뽑아낸 난수를 곧바로 배열에 넣지 않고 num이라는 중간 변수에 담은 뒤 중복 여부를 확인한다. 문제가 생겼을 때 어떤 숫자가 중복으로 뽑혔는지 변수값을 찍어보며 확인하기 가장 좋은 직관적인 구조다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;13&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13&quot;&gt;3. 지역 변수 선언 및 데이터 유효성 검증&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;14&quot; data-ke-size=&quot;size16&quot;&gt;연산부에 진입하기 전, 사용자의 입력값이 연산 가능한 정상적인 데이터인지 필터링하는 단계다. 연산 중 쓰일 지역 변수들도 상단에 미리 선언해 둔다.&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwiFhsD4t5yVAxUAAAAAHQAAAAAQpwo&quot; data-hveid=&quot;0&quot;&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;Dim input(2) As Integer
Dim txtBoxes() As TextBox = {txtNum1, txtNum2, txtNum3}
Dim parseOK As Boolean = True

For idx As Integer = 0 To 2
    Dim val As Integer
    If Not Integer.TryParse(txtBoxes(idx).Text.Trim(), val) OrElse val &amp;lt; 1 OrElse val &amp;gt; 9 Then
        parseOK = False
        Exit For
    End If
    input(idx) = val
Next
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;Integer.TryParse와 OrElse(단축 평가 연산자)를 조합하여 문자가 입력되거나 1~9 범위를 벗어난 값이 들어올 때의 예외를 차단한다. 검증을 완벽히 통과한 값만 val 변수를 거쳐 input 배열에 담긴다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17&quot;&gt;4. 핵심 연산부 (판정 알고리즘)&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;18&quot; data-ke-size=&quot;size16&quot;&gt;프로그램의 핵심 판정 논리다. 내장 함수로 코드를 줄이기보다는 문제 해결의 흐름이 눈에 보이도록 작성했다.&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwiFhsD4t5yVAxUAAAAAHQAAAAAQqAo&quot; data-hveid=&quot;0&quot;&gt;
&lt;pre class=&quot;vbnet&quot;&gt;&lt;code&gt;Dim strike As Integer = 0
Dim ball As Integer = 0

For i As Integer = 0 To 2
    If input(i) = answer(i) Then
        strike += 1
    ElseIf answer.Contains(input(i)) Then
        ball += 1
    End If
Next
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-path-to-node=&quot;20&quot; data-ke-size=&quot;size16&quot;&gt;인덱스 0부터 2까지 순회하면서, 값과 위치가 모두 같으면 스트라이크, 위치는 다르지만 배열 안에 값이 존재하면 볼을 누적한다. 인간의 사고방식을 분기문(If ~ ElseIf)으로 완벽하게 나누어 구현했다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;20&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;21&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21&quot;&gt;5. 화면 출력부 (결과 반영)&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;22&quot; data-ke-size=&quot;size16&quot;&gt;연산이 끝난 후, 도출된 strike와 ball 데이터를 바탕으로 UI를 업데이트한다. 출력부는 철저히 연산 결과를 화면에 뿌려주는 역할만 담당하도록 분리했다.&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwiFhsD4t5yVAxUAAAAAHQAAAAAQqQo&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;tryCount += 1
Dim resultMsg As String = $&quot;{tryCount}번째 시도 │ 입력: {input(0)} {input(1)} {input(2)}&quot;
Dim judgeMsg As String

If strike = 3 Then
    judgeMsg = &quot;  3 Strike &amp;rarr; 정답!&quot;
    lblResult.ForeColor = Color.DarkGreen
ElseIf strike = 0 AndAlso ball = 0 Then
    judgeMsg = &quot;아웃(Out) - 숫자가 하나도 없습니다.&quot;
    lblResult.ForeColor = Color.Crimson
Else
    judgeMsg = $&quot;{strike} Strike  {ball} Ball&quot;
    lblResult.ForeColor = Color.DarkOrange
End If

lstHistory.Items.Add($&quot;{resultMsg}  &amp;rarr;  {judgeMsg}&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-path-to-node=&quot;24&quot; data-ke-size=&quot;size16&quot;&gt;문자열 보간($&quot;&quot;)을 사용해 메시지를 조합하고, 결과 상태에 따라 라벨 색상을 변경했다. AndAlso를 사용해 아웃 판정 조건도 명확하게 걸러냈다.&lt;/p&gt;</description>
      <category>language/visual_basic</category>
      <category>vb</category>
      <category>VisualBasic</category>
      <author>렁치</author>
      <guid isPermaLink="true">https://rungch.tistory.com/1</guid>
      <comments>https://rungch.tistory.com/1#entry1comment</comments>
      <pubDate>Tue, 23 Jun 2026 20:17:30 +0900</pubDate>
    </item>
  </channel>
</rss>