2024. 6. 5. 18:37ใDevelopment๐ฉ๐ป๐ฆณ/C#
InitializeComponent ๋ฉ์๋
private void InitializeComponent()
{
// ์ปจํธ๋กค ์ด๊ธฐํ
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.comboBox2 = new System.Windows.Forms.ComboBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
// label1 ์ค์
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("๊ถ์", 22F);
this.label1.Location = new System.Drawing.Point(13, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(85, 30);
this.label1.TabIndex = 0;
this.label1.Text = "์ด๋ฆ:";
// label2 ์ค์
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("๊ถ์", 22F);
this.label2.Location = new System.Drawing.Point(13, 53);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(85, 30);
this.label2.TabIndex = 1;
this.label2.Text = "ํธ์นญ:";
// label3 ์ค์
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("๊ถ์", 22F);
this.label3.Location = new System.Drawing.Point(13, 93);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(125, 30);
this.label3.TabIndex = 2;
this.label3.Text = "๊ฑฐ์ฃผ์ง:";
// textBox1 ์ค์
this.textBox1.Font = new System.Drawing.Font("๊ถ์", 22F);
this.textBox1.Location = new System.Drawing.Point(150, 10);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(200, 40);
this.textBox1.TabIndex = 3;
// comboBox1 ์ค์
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.Font = new System.Drawing.Font("๊ถ์", 24F);
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Items.AddRange(new object[] {
"Mr.",
"Miss"});
this.comboBox1.Location = new System.Drawing.Point(150, 50);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(200, 40);
this.comboBox1.TabIndex = 4;
// comboBox2 ์ค์
this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox2.Font = new System.Drawing.Font("๊ถ์", 24F);
this.comboBox2.FormattingEnabled = true;
this.comboBox2.Location = new System.Drawing.Point(150, 90);
this.comboBox2.Name = "comboBox2";
this.comboBox2.Size = new System.Drawing.Size(200, 40);
this.comboBox2.TabIndex = 5;
// button1 ์ค์
this.button1.Font = new System.Drawing.Font("๊ถ์", 22F);
this.button1.Location = new System.Drawing.Point(150, 140);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(100, 40);
this.button1.TabIndex = 6;
this.button1.Text = "ํ์ธ";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
// Form2 ์ค์
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(384, 211);
this.Controls.Add(this.button1);
this.Controls.Add(this.comboBox2);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "Form2";
this.Text = "Form2";
this.Load += new System.EventHandler(this.Form2_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
InitializeComponent ๋ฉ์๋ ๋ถ์
๋ชฉํ: InitializeComponent ๋ฉ์๋๊ฐ ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด์ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง, ๊ทธ ๋ฉ์๋๊ฐ ์ ํน์ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์๋์ง, ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ๊ณผ ํด๊ฒฐ ๋ฐฉ์์ ์ ์ํฉ๋๋ค.
์๊ตฌ์ฌํญ
- C# ์ฝ๋์ ์์คํ
์ ์ํธ์์ฉ ์ค๋ช
:
- ์ปดํจํฐ ์์คํ ์ํคํ ์ฒ: CPU, ๋ฉ๋ชจ๋ฆฌ, ์ ์ถ๋ ฅ ์ฅ์น, ์ด์ ์ฒด์ ๋ฑ ๊ธฐ๋ณธ ๊ฐ๋ ์ดํด.
- C# ์ปดํ์ผ ๋ฐ ์คํ ๊ณผ์ : ์์ค ์ฝ๋ ์์ฑ, ์ปดํ์ผ, ์ด์ ๋ธ๋ฆฌ ์์ฑ, JIT ์ปดํ์ผ, ์คํ ๋จ๊ณ ์ค๋ช .
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ์คํ๊ณผ ํ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์ ๋ฐฉ์.
- ์์ ์ฝ๋ ๋ถ์:
- ํผ ์ด๊ธฐํ ๋ฉ์๋:
- ์ปจํธ๋กค ์ด๊ธฐํ, ํผ ๊ตฌ์ฑ ์์ ์ค์ ๋ฐ ๋ฐฐ์น.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ค์ ๋ฐ ํผ ๋ก๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ.
- ์ฝ๋์ ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด์ ๊ทผ๋ณธ ์ดํด:
- ์ ์ถ๋ ฅ ์ฒ๋ฆฌ: ์ฌ์ฉ์๊ฐ ํผ์ ์ ๋ ฅํ ๋ฐ์ดํฐ๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๊ณ ํ์๋๋์ง.
- CPU์ ๋ฉ๋ชจ๋ฆฌ:
- ํผ๊ณผ ์ปจํธ๋กค์ ๋ฐฐ์น ๋ฐ ์์ฑ ์ค์ ์ด CPU์ ์ํด ์ฒ๋ฆฌ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ด ์ค์๊ฐ์ผ๋ก ๋ฐ์.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ:
- ํผ๊ณผ ์ปจํธ๋กค ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ณ , ํผ์ด ์ข ๋ฃ๋๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ๋ฉ๋ชจ๋ฆฌ์์ ํด์ .
- ํผ ์ด๊ธฐํ ๋ฉ์๋:
- ์ค๊ณ ์ด์ ๋ฐ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ์:
- ํจ์๋ณ ์ค๊ณ ์ด์ :
- InitializeComponent: ํผ์ ๋ชจ๋ ์ปจํธ๋กค๊ณผ ์์ฑ์ ์ด๊ธฐํ.
- ๊ฐ ์ปจํธ๋กค์ ์์ฑ ์ค์ ๋ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฐ๊ฒฐ.
- ๋ฌธ์ ๋ฐ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ์:
- ์๋ชป๋ ์ปจํธ๋กค ๋ฐฐ์น ๋ฐ ์์ฑ ์ค์ ์ผ๋ก ์ธํ UI ๋ฌธ์ ๋ฐฉ์ง.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ค์ ์ค๋ฅ ๋ฐฉ์ง.
- ํจ์๋ณ ์ค๊ณ ์ด์ :
- ๋ฐ๋ณต ์ค๋ช
์ต์ํ:
- ์ค๋ณต๋๋ ๊ธฐ๋ณธ ํจ์ ์ค๋ช ์ ํผํ๊ณ , ์๋ก์ด ์ฝ๋ ๋ฒ ์ด์ค์ ํ์ํ ์ค๋ช ๋ง ํฌํจ.
- ์ฝ๋ ์ํธ์์ฉ ์์ฝ:
- ์ฃผ์ ํจ์์ ์ํธ์์ฉ ํ๋ฆ:
- InitializeComponent ๋ฉ์๋์ ์ ์ฒด ํ๋ฆ.
- ๊ฐ ์ปจํธ๋กค์ ์ค์ ๋ฐ ๋ฐฐ์น์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฐ๊ฒฐ.
- ํจ์ ๊ฐ์ ์ํธ์์ฉ์ ํตํด ์ ์ฒด ํ๋ก๊ทธ๋จ์ ํ๋ฆ๊ณผ ์์ ์ฑ์ ์ ์งํ๋ ๋ฐฉ์ ์ค๋ช .
- ์ฃผ์ ํจ์์ ์ํธ์์ฉ ํ๋ฆ:
์์ ์ฝ๋
private void InitializeComponent()
{
// ์ปจํธ๋กค ์ด๊ธฐํ
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.comboBox2 = new System.Windows.Forms.ComboBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
// label1 ์ค์
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("๊ถ์", 22F);
this.label1.Location = new System.Drawing.Point(13, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(85, 30);
this.label1.TabIndex = 0;
this.label1.Text = "์ด๋ฆ:";
// label2 ์ค์
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("๊ถ์", 22F);
this.label2.Location = new System.Drawing.Point(13, 53);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(85, 30);
this.label2.TabIndex = 1;
this.label2.Text = "ํธ์นญ:";
// label3 ์ค์
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("๊ถ์", 22F);
this.label3.Location = new System.Drawing.Point(13, 93);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(125, 30);
this.label3.TabIndex = 2;
this.label3.Text = "๊ฑฐ์ฃผ์ง:";
// textBox1 ์ค์
this.textBox1.Font = new System.Drawing.Font("๊ถ์", 22F);
this.textBox1.Location = new System.Drawing.Point(150, 10);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(200, 40);
this.textBox1.TabIndex = 3;
// comboBox1 ์ค์
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.Font = new System.Drawing.Font("๊ถ์", 24F);
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Items.AddRange(new object[] {
"Mr.",
"Miss"});
this.comboBox1.Location = new System.Drawing.Point(150, 50);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(200, 40);
this.comboBox1.TabIndex = 4;
// comboBox2 ์ค์
this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox2.Font = new System.Drawing.Font("๊ถ์", 24F);
this.comboBox2.FormattingEnabled = true;
this.comboBox2.Location = new System.Drawing.Point(150, 90);
this.comboBox2.Name = "comboBox2";
this.comboBox2.Size = new System.Drawing.Size(200, 40);
this.comboBox2.TabIndex = 5;
// button1 ์ค์
this.button1.Font = new System.Drawing.Font("๊ถ์", 22F);
this.button1.Location = new System.Drawing.Point(150, 140);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(100, 40);
this.button1.TabIndex = 6;
this.button1.Text = "ํ์ธ";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
// Form2 ์ค์
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(384, 211);
this.Controls.Add(this.button1);
this.Controls.Add(this.comboBox2);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Name = "Form2";
this.Text = "Form2";
this.Load += new System.EventHandler(this.Form2_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด์ ์ํธ์์ฉ ์์ฝ
- ์
์ถ๋ ฅ ์ฒ๋ฆฌ:
- ์ ๋ ฅ ์ฅ์น: ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ ์ปจํธ๋กค์ ๋ฐ์.
- ์ถ๋ ฅ ์ฅ์น: ํผ๊ณผ ์ปจํธ๋กค์ด ๋ชจ๋ํฐ์ ํ์.
- CPU์ ๋ฉ๋ชจ๋ฆฌ:
- CPU ์ฒ๋ฆฌ:
- ๋ช ๋ น์ด ์ฒ๋ฆฌ: ๊ฐ ์ปจํธ๋กค์ ์ด๊ธฐํ ๋ฐ ์ค์ ์ด CPU์ ์ํด ์ฒ๋ฆฌ.
- ์ด๋ฒคํธ ์ฒ๋ฆฌ: ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ ์ค์๊ฐ ๋ฐ์.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ:
- ์คํ: ๋ฉ์๋ ํธ์ถ๊ณผ ์ง์ญ ๋ณ์ ์ ์ฅ.
- ํ: ๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด(ํผ๊ณผ ์ปจํธ๋กค) ์ ์ฅ.
- ๊ฐ๋น์ง ์ปฌ๋ ์ : ํผ์ด ์ข ๋ฃ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ฒด ํด์ .
- CPU ์ฒ๋ฆฌ:
- ๋ฌธ์ ๋ฐ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ์:
- ์๋ชป๋ ์ปจํธ๋กค ๋ฐฐ์น ๋ฐ ์์ฑ ์ค์ ์ผ๋ก ์ธํ UI ๋ฌธ์ ๋ฐฉ์ง.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ค์ ์ค๋ฅ ๋ฐฉ์ง.
-
- ์ฝ๋ ์ํธ์์ฉ ์์ฝ:
- ์ฃผ์ ํจ์์ ์ํธ์์ฉ ํ๋ฆ:
- InitializeComponent ๋ฉ์๋์ ์ ์ฒด ํ๋ฆ.
- ๊ฐ ์ปจํธ๋กค์ ์ค์ ๋ฐ ๋ฐฐ์น์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฐ๊ฒฐ.
- ํจ์ ๊ฐ์ ์ํธ์์ฉ์ ํตํด ์ ์ฒด ํ๋ก๊ทธ๋จ์ ํ๋ฆ๊ณผ ์์ ์ฑ์ ์ ์งํ๋ ๋ฐฉ์ ์ค๋ช
.
- ์ฝ๋ ์ํธ์์ฉ ์์ฝ:
- ์ฃผ์ ํจ์์ ์ํธ์์ฉ ํ๋ฆ:
- InitializeComponent ๋ฉ์๋์ ์ ์ฒด ํ๋ฆ.
- ๊ฐ ์ปจํธ๋กค์ ์ค์ ๋ฐ ๋ฐฐ์น์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ฐ๊ฒฐ.
- ํจ์ ๊ฐ์ ์ํธ์์ฉ์ ํตํด ์ ์ฒด ํ๋ก๊ทธ๋จ์ ํ๋ฆ๊ณผ ์์ ์ฑ์ ์ ์งํ๋ ๋ฐฉ์ ์ค๋ช .
- ์ฃผ์ ํจ์์ ์ํธ์์ฉ ํ๋ฆ:
- ์ฝ๋ ์ํธ์์ฉ ์์ฝ:
- ์ฃผ์ ํจ์์ ์ํธ์์ฉ ํ๋ฆ:
- ์ฝ๋ ์ํธ์์ฉ ์์ฝ:
ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด์ ์ํธ์์ฉ ์์ฝ
- ์
์ถ๋ ฅ ์ฒ๋ฆฌ:
- ์ ๋ ฅ ์ฅ์น: ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ ์ปจํธ๋กค์ ๋ฐ์.
- ์ถ๋ ฅ ์ฅ์น: ํผ๊ณผ ์ปจํธ๋กค์ด ๋ชจ๋ํฐ์ ํ์.
- CPU์ ๋ฉ๋ชจ๋ฆฌ:
- CPU ์ฒ๋ฆฌ:
- ๋ช ๋ น์ด ์ฒ๋ฆฌ: ๊ฐ ์ปจํธ๋กค์ ์ด๊ธฐํ ๋ฐ ์ค์ ์ด CPU์ ์ํด ์ฒ๋ฆฌ.
- ์ด๋ฒคํธ ์ฒ๋ฆฌ: ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ ์ค์๊ฐ ๋ฐ์.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ:
- ์คํ: ๋ฉ์๋ ํธ์ถ๊ณผ ์ง์ญ ๋ณ์ ์ ์ฅ.
- ํ: ๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด(ํผ๊ณผ ์ปจํธ๋กค) ์ ์ฅ.
- ๊ฐ๋น์ง ์ปฌ๋ ์ : ํผ์ด ์ข ๋ฃ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ฒด ํด์ .
- CPU ์ฒ๋ฆฌ:
- ๋ฌธ์ ๋ฐ์ ๋ฐ ํด๊ฒฐ ๋ฐฉ์:
- ์๋ชป๋ ์ปจํธ๋กค ๋ฐฐ์น ๋ฐ ์์ฑ ์ค์ ์ผ๋ก ์ธํ UI ๋ฌธ์ ๋ฐฉ์ง.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ์ค์ ์ค๋ฅ ๋ฐฉ์ง.
- ์ฝ๋ ์ํธ์์ฉ:
- ์ฃผ์ ํจ์(InitializeComponent, ์ด๋ฒคํธ ํธ๋ค๋ฌ)๊ฐ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋ฉฐ ์ ์ฒด ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ ์งํ๋์ง ์ค๋ช .
C#์์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ์คํ๊ณผ ํ, ๊ฐ๋น์ง ์ปฌ๋ ์
C#์์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์ดํดํ๊ธฐ ์ํด ๋ค์์ InitializeComponent ๋ฉ์๋๋ฅผ ์์ ๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
1. ์คํ(Stack)๊ณผ ํ(Heap) ๊ฐ์
- ์คํ:
- ํน์ง: Last In, First Out (LIFO) ๊ตฌ์กฐ.
- ์ ์ฅ๋๋ ๋ฐ์ดํฐ: ์ง์ญ ๋ณ์, ๋งค๊ฐ๋ณ์, ๊ฐ ํ์ ๋ณ์.
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ : ๋งค์ฐ ๋น ๋ฅด๋ฉฐ, ํจ์๊ฐ ํธ์ถ๋ ๋ ํ ๋น๋๊ณ ํจ์๊ฐ ์ข ๋ฃ๋ ๋ ํด์ .
- ์ฉ๋: ์ฃผ๋ก ํจ์ ํธ์ถ๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ ์ ์ฅ.
- ํ:
- ํน์ง: ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น.
- ์ ์ฅ๋๋ ๋ฐ์ดํฐ: ์ฐธ์กฐ ํ์ ๊ฐ์ฒด, ๋ฐฐ์ด.
- ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ : ๋น๊ต์ ๋๋ฆฌ๋ฉฐ, ์๋์ผ๋ก ํ ๋นํ๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํด ํด์ .
- ์ฉ๋: ๋์ ๋ฐ์ดํฐ ์ ์ฅ, ํ๋ก๊ทธ๋จ ์ ๋ฐ์ ๊ฑธ์ณ ์ฌ์ฉ๋๋ ํฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ.
2. ์คํ(Stack)๊ณผ ํ(Heap)์์์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์
- ๊ฐ ํ์
(Value Type): ์คํ์ ์ ์ฅ.
- ์: int, double, struct ๋ฑ.
- ์คํ์ ์ ์ฅ๋ ๋ณ์๋ ํจ์ ํธ์ถ ์ ์๋์ผ๋ก ํ ๋น๋๊ณ ํด์ ๋จ.
- ์ฐธ์กฐ ํ์
(Reference Type): ํ์ ์ ์ฅ, ์คํ์๋ ํ์ ์ฃผ์๊ฐ ์ ์ฅ.
- ์: ํด๋์ค ๊ฐ์ฒด, ๋ฐฐ์ด, ๋ฌธ์์ด ๋ฑ.
- ํ์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋ช ์์ ์ผ๋ก ํด์ ํ์ง ์์ผ๋ฉฐ, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ด๋ฅผ ๊ด๋ฆฌ.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ธ๋ถ ์ค๋ช
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค. C#๊ณผ .NET ํ๋ ์์ํฌ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ์ง๋ง, ๊ทธ ๋์ ๋ฐฉ์์ ์ดํดํ๋ฉด ๋ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์คํ (Stack)
- ์ญํ : ๋ฉ์๋ ํธ์ถ, ์ง์ญ ๋ณ์, ๋งค๊ฐ ๋ณ์ ๋ฑ์ ์ ์ฅํ๋ ๊ณต๊ฐ์ ๋๋ค.
- ๊ตฌ์กฐ: LIFO(Last In, First Out) ๊ตฌ์กฐ๋ก ์๋ํ์ฌ, ๊ฐ์ฅ ๋์ค์ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋ฉ๋๋ค.
- ์๋: ์คํ ๋ฉ๋ชจ๋ฆฌ๋ ๋งค์ฐ ๋น ๋ฅธ ์ ๊ทผ ์๋๋ฅผ ๊ฐ์ง๋๋ค.
- ์ฌ์ฉ ์:
- ๋ฉ์๋ ํธ์ถ: ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง๋ค ํธ์ถ ์คํ์ ์ถ๊ฐ๋๋ฉฐ, ๋ฉ์๋๊ฐ ๋ฐํ๋ ๋ ์คํ์์ ์ ๊ฑฐ๋ฉ๋๋ค.
- ์ง์ญ ๋ณ์: ๋ฉ์๋ ๋ด์์ ์ ์ธ๋ ๋ณ์๋ ์คํ์ ์ ์ฅ๋ฉ๋๋ค.
- ๋งค๊ฐ ๋ณ์: ๋ฉ์๋ ํธ์ถ ์ ์ ๋ฌ๋ ์ธ์๋ ์คํ์ ์ ์ฅ๋ฉ๋๋ค.
- ์ ํ ์ฌํญ: ํฌ๊ธฐ๊ฐ ์ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
void ExampleMethod()
{
int x = 10; // ์ง์ญ ๋ณ์, ์คํ์ ์ ์ฅ
int y = 20; // ์ง์ญ ๋ณ์, ์คํ์ ์ ์ฅ
Console.WriteLine(x + y);
}
ํ (Heap)
- ์ญํ : ๋์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ ๋๋ค.
- ๊ตฌ์กฐ: ๋น์ ํ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก, ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ๊ณ ํด์ ํ ์ ์์ต๋๋ค.
- ์๋: ์คํ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ์๋๊ฐ ๋๋ฆฌ์ง๋ง, ๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ ์:
- ๊ฐ์ฒด ์์ฑ: new ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๊ฐ์ฒด๋ ํ์ ์ ์ฅ๋ฉ๋๋ค.
- ํผ๊ณผ ์ปจํธ๋กค: Windows Forms๋ WPF ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฑ๋๋ ํผ๊ณผ ์ปจํธ๋กค ๊ฐ์ฒด๋ ํ์ ์ ์ฅ๋ฉ๋๋ค.
- ๊ด๋ฆฌ: ํ ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection)์ ํตํด ๊ด๋ฆฌ๋ฉ๋๋ค.
void CreateObject()
{
MyClass obj = new MyClass(); // ๊ฐ์ฒด, ํ์ ์ ์ฅ
}
3. ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection)
- ๊ฐ์:
- ์ญํ : ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์ง.
- ์๋ ๋ฐฉ์: ์ฐธ์กฐ ๊ทธ๋ํ๋ฅผ ํตํด ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ํ์.
- ์ธ๋(Generation) ๊ด๋ฆฌ:
- Gen 0: ์๋ก ํ ๋น๋ ๊ฐ์ฒด. ๊ฐ์ฅ ๋น๋ฒํ๊ฒ ์์ง.
- Gen 1: ์ผ์์ ์ผ๋ก ํ ๋น๋ ๊ฐ์ฒด.
- Gen 2: ์ฅ๊ธฐ๊ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฒด. ๊ฐ์ฅ ๋ ๋น๋ฒํ๊ฒ ์์ง.
- ํจ์จ์ฑ: ์ธ๋๋ณ๋ก ๊ฐ์ฒด๋ฅผ ๋๋์ด ๊ด๋ฆฌํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํจ์จ์ฑ์ ๋์.
- ๊ฐ๋น์ง ์ปฌ๋ ์
๊ณผ์ :
- ๋งํฌ(Mark): ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ์ฌ ํ์.
- ์ค์(Sweep): ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ.
- ์ปดํฉ์ (Compaction): ๋จ์์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ์ชฝ์ผ๋ก ์ด๋์์ผ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ฅผ ๋ฐฉ์ง.
https://en.wikipedia.org/wiki/Mark%E2%80%93compact_algorithm
๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) ์์ธ ๋ถ์
1. ๋งํฌ(Mark): ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ์ฌ ํ์
- ๋ฃจํธ ์งํฉ(Root Set): ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ฃจํธ ์งํฉ(root set)์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ์์ ์ง์ ์์ ์์๋ฉ๋๋ค. ๋ฃจํธ ์งํฉ์๋ ์ ์ญ ๋ณ์, ์คํ ๋ณ์, CPU ๋ ์ง์คํฐ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ค ๋ฃจํธ์์ ์์ํ์ฌ ์ฐธ์กฐ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ํ์ํฉ๋๋ค.
- ํธ๋ฆฌ ๊ตฌ์กฐ ํ์: ๋ฃจํธ ์งํฉ์์ ์์ํ์ฌ ๊ฐ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ ๋ชจ๋ ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ํ์ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๊ฐ์ฒด์ ์ฐธ์กฐ ๊ทธ๋ํ๊ฐ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํ์ฑ๋ฉ๋๋ค.
- ๊ฐ์ฒด ๋งํน: ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ ๊ฐ์ฒด๋ "๋งํฌ"๋ฉ๋๋ค. ์ด๋ ํด๋น ๊ฐ์ฒด๊ฐ ์์ง ์ฌ์ฉ ์ค์์ ๋ํ๋ด๊ธฐ ์ํด ํน์ ํ๋๊ทธ๋ฅผ ์ค์ ํ๊ฑฐ๋ ๋นํธ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ๋นํจ์จ์ ์ธ ๊ฐ์ฒด ์๋ณ: ๋งํฌ ๋จ๊ณ์์๋ ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ์ง ์์ต๋๋ค. ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ ๋ค์ ๋จ๊ณ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
2. ์ค์(Sweep): ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ
- ๋ฉ๋ชจ๋ฆฌ ํด์ : ๋งํฌ ๋จ๊ณ์์ ๋งํน๋์ง ์์ ๊ฐ์ฒด๋ค์ ๋๋ฌํ ์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ฉ๋๋ค. ์ค์ ๋จ๊ณ์์๋ ์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ , ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํฉ๋๋ค.
- ํ๋ฆฌ ๋ฆฌ์คํธ(Free List): ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ฆฌ ๋ฆฌ์คํธ(free list)์ ์ถ๊ฐ๋ฉ๋๋ค. ํ๋ฆฌ ๋ฆฌ์คํธ๋ ๋์ค์ ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ ์ฌ์ฉ๋ ์ ์๋ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๋ค์ ๋ชฉ๋ก์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๋ฌธ์ : ์ค์ ๋จ๊ณ์์๋ ๊ฐ์ฒด๊ฐ ํด์ ๋์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ ์ฒด์ ํฉ์ด์ ธ ์์ ๋ ๋ฐ์ํฉ๋๋ค. ๋จํธํ๊ฐ ์ฌํด์ง๋ฉด ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
3. ์ปดํฉ์ (Compaction): ๋จ์์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ์ชฝ์ผ๋ก ์ด๋์์ผ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ฅผ ๋ฐฉ์ง
- ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ: ์ปดํฉ์ ๋จ๊ณ์์๋ ๋จ์์๋ ๊ฐ์ฒด๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ํ์ชฝ์ผ๋ก ์ด๋์ํต๋๋ค. ์ด๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๋ค์ด ์ฐ์์ ์ผ๋ก ๋ฐฐ์ด๋์ด, ๋จํธํ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด ์ด๋: ๊ฐ์ฒด๋ค์ด ์ด๋๋จ์ ๋ฐ๋ผ, ์ด๋ค์ ์ฐธ์กฐํ๋ ํฌ์ธํฐ๋ค๋ ์ ๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ๋ชจ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
- ํ๋ฆฌ ๋ธ๋ก ํฉ๋ณ: ๊ฐ์ฒด๋ค์ด ์ด๋๋ ํ, ๋จ์์๋ ๋น ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๋ค์ด ํ๋์ ํฐ ์ฐ์๋ ๋ธ๋ก์ผ๋ก ํฉ์ณ์ง๋๋ค. ์ด๋ ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ ์ ์ฉํฉ๋๋ค.
์ ์ฒด ๊ณผ์ ์์ฝ
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ ์ฒด ๊ณผ์ ์ ํฌ๊ฒ ์ธ ๋จ๊ณ๋ก ๋๋ฉ๋๋ค: ๋งํฌ, ์ค์, ์ปดํฉ์ . ์ด ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฝํ ์ ์์ต๋๋ค:
- ๋งํฌ(Mark):
- ๋ฃจํธ ์งํฉ์์ ์์ํ์ฌ ๋ชจ๋ ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ํ์ํ๊ณ ๋งํน.
- ๋งํน๋ ๊ฐ์ฒด๋ ์ฌ์ฉ ์ค์์ ํ์.
- ์ค์(Sweep):
- ๋งํน๋์ง ์์, ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ.
- ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ฆฌ ๋ฆฌ์คํธ์ ์ถ๊ฐ.
- ์ปดํฉ์
(Compaction):
- ๋จ์์๋ ๊ฐ์ฒด๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ํ์ชฝ์ผ๋ก ์ด๋.
- ์ฐธ์กฐ ํฌ์ธํฐ๋ฅผ ์ ๋ฐ์ดํธ.
- ๋จ์ ๋น ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๋ค์ ํฉ๋ณํ์ฌ ์ฐ์๋ ํฐ ๋ธ๋ก์ผ๋ก ๋ง๋ฆ.
์ด ์ธ ๋จ๊ณ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํจ์จ์ฑ์ ๋์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๋ฅผ ์ค์ด๋ฉฐ,
ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ ์งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/
๊ตฌํ ์์ ์์ฝ
1. N ๊ฐ์ ๋ฐ๋ฅธ ๊ตฌ๊ตฌ๋จ ์ถ๋ ฅ
using System;
using System.Windows.Forms;
namespace GugudanApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); // ์ด๊ธฐํ
}
private void buttonCalculate_Click(object sender, EventArgs e)
{
// ์
๋ ฅ ๊ฐ์ด ์ ํจํ ์ซ์์ธ์ง ํ์ธ
if (int.TryParse(textBoxInput.Text, out int number))
{
DisplayGugudan(number); // ์ ํจํ ์ซ์์ผ ๊ฒฝ์ฐ ๊ตฌ๊ตฌ๋จ ์ถ๋ ฅ
}
else
{
// ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง ํ์
MessageBox.Show("์ ํจํ ์ซ์๋ฅผ ์
๋ ฅํ์ธ์.", "์
๋ ฅ ์ค๋ฅ", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBoxInput.Clear(); // ์
๋ ฅ ํ๋ ๋น์ฐ๊ธฐ
}
}
private void DisplayGugudan(int number)
{
textBoxResult.Clear(); // ๊ฒฐ๊ณผ ์ฐฝ ๋น์ฐ๊ธฐ
for (int i = 1; i <= number; i++)
{
for (int j = 1; j <= 9; j++)
{
// ๊ตฌ๊ตฌ๋จ ๊ฒฐ๊ณผ ์ถ๋ ฅ
textBoxResult.AppendText($"{i} X {j} = {i * j}{Environment.NewLine}");
}
textBoxResult.AppendText(Environment.NewLine); // ๋จ ๊ตฌ๋ถ
}
}
private void textBoxInput_KeyPress(object sender, KeyPressEventArgs e)
{
// ์ํฐํค๋ฅผ ๋๋ฅด๋ฉด ๊ณ์ฐ ์คํ
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
buttonCalculate_Click(sender, e); // ๊ณ์ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ์ถ
}
}
}
}
2. 9๋จ ์ด์ ์ ๋ ฅ ์ ์์ธ ์ฒ๋ฆฌ
using System;
using System.Windows.Forms;
namespace GugudanApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); // ์ด๊ธฐํ
}
private void buttonCalculate_Click(object sender, EventArgs e)
{
// ์
๋ ฅ ๊ฐ์ด 1์์ 9 ์ฌ์ด์ ์ ํจํ ์ซ์์ธ์ง ํ์ธ
if (int.TryParse(textBoxInput.Text, out int number) && number <= 9)
{
DisplayGugudan(number); // ์ ํจํ ์ซ์์ผ ๊ฒฝ์ฐ ๊ตฌ๊ตฌ๋จ ์ถ๋ ฅ
}
else
{
// ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง ํ์
MessageBox.Show("1์์ 9 ์ฌ์ด์ ์ซ์๋ฅผ ์
๋ ฅํ์ธ์.", "์
๋ ฅ ์ค๋ฅ", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBoxInput.Clear(); // ์
๋ ฅ ํ๋ ๋น์ฐ๊ธฐ
}
}
private void DisplayGugudan(int number)
{
textBoxResult.Clear(); // ๊ฒฐ๊ณผ ์ฐฝ ๋น์ฐ๊ธฐ
for (int i = 1; i <= 9; i++)
{
// ๊ตฌ๊ตฌ๋จ ๊ฒฐ๊ณผ ์ถ๋ ฅ
textBoxResult.AppendText($"{number} X {i} = {number * i}{Environment.NewLine}");
}
}
private void textBoxInput_KeyPress(object sender, KeyPressEventArgs e)
{
// ์ํฐํค๋ฅผ ๋๋ฅด๋ฉด ๊ณ์ฐ ์คํ
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
buttonCalculate_Click(sender, e); // ๊ณ์ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ์ถ
}
}
}
}
3. ๋ฌธ์ ์ ๋ ฅ ์์ธ ์ฒ๋ฆฌ
using System;
using System.Windows.Forms;
namespace GugudanApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); // ์ด๊ธฐํ
}
private void buttonCalculate_Click(object sender, EventArgs e)
{
// ์
๋ ฅ ๊ฐ์ด ์ ํจํ ์ซ์์ธ์ง ํ์ธ
if (int.TryParse(textBoxInput.Text, out int number))
{
DisplayGugudan(number); // ์ ํจํ ์ซ์์ผ ๊ฒฝ์ฐ ๊ตฌ๊ตฌ๋จ ์ถ๋ ฅ
}
else
{
// ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง ํ์
MessageBox.Show("์ ํจํ ์ซ์๋ฅผ ์
๋ ฅํ์ธ์.", "์
๋ ฅ ์ค๋ฅ", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBoxInput.Clear(); // ์
๋ ฅ ํ๋ ๋น์ฐ๊ธฐ
}
}
private void DisplayGugudan(int number)
{
textBoxResult.Clear(); // ๊ฒฐ๊ณผ ์ฐฝ ๋น์ฐ๊ธฐ
for (int i = 1; i <= 9; i++)
{
// ๊ตฌ๊ตฌ๋จ ๊ฒฐ๊ณผ ์ถ๋ ฅ
textBoxResult.AppendText($"{number} X {i} = {number * i}{Environment.NewLine}");
}
}
private void textBoxInput_KeyPress(object sender, KeyPressEventArgs e)
{
// ์ํฐํค๋ฅผ ๋๋ฅด๋ฉด ๊ณ์ฐ ์คํ
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
buttonCalculate_Click(sender, e); // ๊ณ์ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ์ถ
}
}
}
}
4. ๊ตฌ๊ตฌ๋จ์ 3์ด๋ก ์ถ๋ ฅ
using System;
using System.Windows.Forms;
namespace GugudanApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); // ์ด๊ธฐํ
}
private void buttonCalculate_Click(object sender, EventArgs e)
{
// ์
๋ ฅ ๊ฐ์ด ์ ํจํ ์ซ์์ธ์ง ํ์ธ
if (int.TryParse(textBoxInput.Text, out int number))
{
DisplayGugudan(number); // ์ ํจํ ์ซ์์ผ ๊ฒฝ์ฐ ๊ตฌ๊ตฌ๋จ ์ถ๋ ฅ
}
else
{
// ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง ํ์
MessageBox.Show("์ ํจํ ์ซ์๋ฅผ ์
๋ ฅํ์ธ์.", "์
๋ ฅ ์ค๋ฅ", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBoxInput.Clear(); // ์
๋ ฅ ํ๋ ๋น์ฐ๊ธฐ
}
}
private void DisplayGugudan(int maxMultiplier)
{
textBoxResult.Clear(); // ๊ฒฐ๊ณผ ์ฐฝ ๋น์ฐ๊ธฐ
for (int i = 1; i <= 9; i++)
{
for (int j = 0; j < 3; j++)
{
int currentDan = i + j * maxMultiplier; // ํ์ฌ ๋จ ๊ณ์ฐ
string result = $"{currentDan} X {i} = {currentDan * i}";
textBoxResult.AppendText(result.PadRight(20)); // ์ค๋ฅธ์ชฝ ํจ๋ฉ์ผ๋ก ์ ๋ ฌ
}
textBoxResult.AppendText(Environment.NewLine); // ๋จ ๊ตฌ๋ถ
}
}
private void textBoxInput_KeyPress(object sender, KeyPressEventArgs e)
{
// ์ํฐํค๋ฅผ ๋๋ฅด๋ฉด ๊ณ์ฐ ์คํ
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
buttonCalculate_Click(sender, e); // ๊ณ์ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ์ถ
}
}
}
}
5. ์ถ๊ฐ ๊ธฐ๋ฅ - N๊ฐ์ ๊ณฑ์ ๊ณ์ฐ
using System;
using System.Windows.Forms;
namespace GugudanApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); // ์ด๊ธฐํ
}
private void buttonCalculate_Click(object sender, EventArgs e)
{
// ์
๋ ฅ ๊ฐ์ด ์ ํจํ ์ซ์์ธ์ง ํ์ธ
if (int.TryParse(textBoxInput.Text, out int number))
{
DisplayMultiplication(number); // ์ ํจํ ์ซ์์ผ ๊ฒฝ์ฐ ๊ณฑ์
๊ณ์ฐ ์ถ๋ ฅ
}
else
{
// ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง ํ์
MessageBox.Show("์ ํจํ ์ซ์๋ฅผ ์
๋ ฅํ์ธ์.", "์
๋ ฅ ์ค๋ฅ", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBoxInput.Clear(); // ์
๋ ฅ ํ๋ ๋น์ฐ๊ธฐ
}
}
private void DisplayMultiplication(int number)
{
textBoxResult.Clear(); // ๊ฒฐ๊ณผ ์ฐฝ ๋น์ฐ๊ธฐ
for (int i = 1; i <= number; i++)
{
for (int j = 1; j <= number; j++)
{
// ๊ณฑ์
๊ฒฐ๊ณผ ์ถ๋ ฅ
textBoxResult.AppendText($"{i} X {j} = {i * j}{Environment.NewLine}");
}
textBoxResult.AppendText(Environment.NewLine); // ์ค๋ฐ๊ฟ์ผ๋ก ๊ตฌ๋ถ
}
}
private void textBoxInput_KeyPress(object sender, KeyPressEventArgs e)
{
// ์ํฐํค๋ฅผ ๋๋ฅด๋ฉด ๊ณ์ฐ ์คํ
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
buttonCalculate_Click(sender, e); // ๊ณ์ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ์ถ
}
}
}
}
6. ๊ตฌ๊ตฌ๋จ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๊ณ ๊ฐ๊ฒฉ ์กฐ์
using System;
using System.Windows.Forms;
namespace GugudanApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); // ์ด๊ธฐํ
}
private void buttonCalculate_Click(object sender, EventArgs e)
{
// ์
๋ ฅ ๊ฐ์ด ์ ํจํ ์ซ์์ธ์ง ํ์ธ
if (int.TryParse(textBoxInput.Text, out int number))
{
DisplayGugudan(number); // ์ ํจํ ์ซ์์ผ ๊ฒฝ์ฐ ๊ตฌ๊ตฌ๋จ ์ถ๋ ฅ
}
else
{
// ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง ํ์
MessageBox.Show("์ ํจํ ์ซ์๋ฅผ ์
๋ ฅํ์ธ์.", "์
๋ ฅ ์ค๋ฅ", MessageBoxButtons.OK, MessageBoxIcon.Error);
textBoxInput.Clear(); // ์
๋ ฅ ํ๋ ๋น์ฐ๊ธฐ
}
}
private void DisplayGugudan(int number)
{
textBoxResult.Clear(); // ๊ฒฐ๊ณผ ์ฐฝ ๋น์ฐ๊ธฐ
for (int i = 1; i <= 9; i++)
{
for (int j = 0; j < 3; j++)
{
int currentDan = i + j * number; // ํ์ฌ ๋จ ๊ณ์ฐ
string result = $"{currentDan} X {i} = {currentDan * i}";
textBoxResult.AppendText(result.PadRight(20)); // ์ค๋ฅธ์ชฝ ํจ๋ฉ์ผ๋ก ์ ๋ ฌ
}
textBoxResult.AppendText(Environment.NewLine); // ๋จ ๊ตฌ๋ถ
}
}
private void textBoxInput_KeyPress(object sender, KeyPressEventArgs e)
{
// ์ํฐํค๋ฅผ ๋๋ฅด๋ฉด ๊ณ์ฐ ์คํ
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
buttonCalculate_Click(sender, e); // ๊ณ์ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ์ถ
}
}
}
}
์ฝ๋ ํ๋ฆ ๋ฆฌ๋ทฐ
- ์ ๋ ฅ๊ฐ ํ์ธ: int.TryParse๋ฅผ ํตํด ์ ๋ ฅ ๊ฐ์ด ์ ํจํ ์ซ์์ธ์ง ํ์ธํฉ๋๋ค.
- ๊ตฌ๊ตฌ๋จ ์ถ๋ ฅ: ์ ํจํ ์ซ์์ผ ๊ฒฝ์ฐ, ์ฃผ์ด์ง ๋จ(๋๋ ๋ฒ์)์ ๋ํ ๊ตฌ๊ตฌ๋จ์ ์ถ๋ ฅํฉ๋๋ค.
- ์์ธ ์ฒ๋ฆฌ: ์ ํจํ์ง ์์ ์ ๋ ฅ ๊ฐ์ ๋ํด ๋ฉ์์ง ๋ฐ์ค๋ฅผ ํตํด ์ค๋ฅ๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ฆฝ๋๋ค.
- ์ํฐํค ์ฒ๋ฆฌ: ํ ์คํธ ์ ๋ ฅ ์ค ์ํฐํค๋ฅผ ๋๋ฅด๋ฉด ๊ณ์ฐ ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ํธ์ถํ์ฌ ๊ณ์ฐ์ ์คํํฉ๋๋ค.
- ์ถ๋ ฅ ํ์: ๊ตฌ๊ตฌ๋จ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ด๋ฐ ์ ๋ ฌํ๊ณ , ๊ฐ๊ฒฉ์ ์กฐ์ ํ์ฌ ๊ฐ๋ ์ฑ์ ๋์ ๋๋ค.
์ด ๊ตฌ์กฐ๋ ๊ฐ ์ฝ๋ ๋ฒ ์ด์ค์์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ํํ๋ฉด์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์์ต๋๋ค.