티스토리 뷰
======================================================
안녕하세요 Doridori 입니다.
항상 빨리빨리 돌아오려고 하는데 쉽지 않음을 느끼는 요즘 입니다.
내용 정리는 빨리 했는데 집중 할 수 있는 시간이 없다 보니 마음에 드는 예제를 만드는데 오래 걸렸습니다.
기존에 진행 하던 프로젝트를 마무리 하면 조금 쉬어 갈 수 있을까 싶었는데
다른 프로젝트 지원에 끝나자 마자 또 새로운 프로젝트 PM을 해야 할듯 해서 정신 없어 질 듯 합니다.
지난번에 하고 싶은 일과 해야 하는 일 사이이에서 고민 중이라고 적었는데 (그게 3달전이네요) 아직도 마음이 정해지지 않는 듯 합니다.
일단 바빠질듯 하고 준비도 쉽지 않아 한 템포 정리를 해야 하나 고민 하고 있기는 합니다.
역시 열심히 지내면 잘 풀리지 않을까 생각 하고 있습니다.
모두 화이팅 하십시오!!
======================================================
56.인터페이스(Interface)
UI)
Soruce)
교재)
강의 초반에 클래스 이야기가 나오면서 부터 중간중간 한번씩 이야기 했던 Interface 입니다.
보통은 프로젝트 시작 하는 시점에 설계하는 쪽에서 Interface 관련해서 설계를 진행 하고 이후 개발 하는 쪽에서 살을 붙여서 진행하게 되는데 설계하는 쪽, 사용하는쪽 양쪽에서 이해가 잘 맞아야 효과가 있기도 하고 설계가 틀어지거나 했을 경우 손도 많이가고 하다 보니 점점 지양하게 되는 추세인듯 합니다.
유지 보수 관점에서 봤을 경우에도 개발자가 계속 변경 되는 경우에 새로 올 때 마다 Interface 구조를 파악 해야 하고 구조를 파악 할 정도 수준은 되는 개발이 와야 효율적으로 동작 하기 때문에 쉽지 않은 듯 합니다.
하지만 잘 사용 한다면 매우 효율적인 기능임에는 분명하고 소스코드도 간결하게 구성 할 수 있습니다.
UI)
Interface를 꼭 사용해야 하는 경우가 뭐가 있을까 싶어서 고민을 하다보니 예제를 만드는데 까지 시간이 걸렸습니다.
기본적인 규약을 정의 한다라고 생각할 수도 있는데 그것만이 목적이면 조금 약한 느낌?
인터페이스를 꼭 사용 할 필요는 없지만 이런 상황에서는 매우 효율적이다 라는 느낌을 주고 싶었습니다.
추가로 진행을 하면서 C#의 주요기능 하나 Winform의 Control 하나 정도를 목표로 올리고 있는데 이번에 Winform 쪽은 Control 안에서 Form을 생성하는 부분을 추가해 봤습니다.
실제 개발 할 때에는 자주 사용 되지는 않지만 우리가 사용 하는 규모가 있는 대부분의 툴을 자세히 보면 InnerForm으로 구성 되어 있는것을 보실 수 있습니다. (궁금하니까 알아보면 좋을듯 합니다. ㅎㅎ)
강의)
업로드를 간만에 할 때마다 하는방법을 새로 알아보고 하고 기존내용과 비슷한 형태로 올리기 위해서 기존 내용을 뒤져보고 하는데 쉽지 않은 듯 합니다. ㅋ
Interface의 경우 충분히 재미있는 기능 이기도 하고 지양하고 있다고는 하지만 대규모 프로젝트에 빠지지 않고 들어가 있는 내용이기 때문에 보시면 코드를 이해 하는데 좋을 듯 합니다.
Code)
(Interface iCommon)
Interface를 생성하는 부분 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Interface_Test
{
interface iCommon
{
/// <summary>
/// From Name을 작성
/// </summary>
string strfrmName { get; set; }
/// <summary>
/// 초기화 시 호출 한 Form Name
/// </summary>
void fInit();
/// <summary>
/// 선택 색상을 기준으로 테마 변경
/// </summary>
/// <param name="color">변경 할 색상</param>
void fColorChage(Color color);
}
}
|
cs |
(Form fInnerMain)
Interface를 사용 한 InnerForm 생성 부분입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Interface_Test
{
public partial class fInnerMain : Form, iCommon
{
public fInnerMain()
{
InitializeComponent();
}
private void fInnerMain_Load(object sender, EventArgs e)
{
fInit();
}
#region Interface 구현
public string strfrmName {
get
{
return this.Text;
}
set
{
this.Text = value;
}
}
public void fColorChage(Color color)
{
lblInnerMain.BackColor = color;
}
public void fInit()
{
lblInnerMain.Text = $"{this.Text} Call";
}
#endregion
}
}
|
cs |
(Form fInnerSub)
Interface를 사용 한 InnerForm 생성 부분입니다. (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Interface_Test
{
public partial class fInnerSub : Form, iCommon
{
public fInnerSub()
{
InitializeComponent();
}
private void fInnerSub_Load(object sender, EventArgs e)
{
fInit();
}
#region Interface 구현
public string strfrmName
{
get
{
return this.Text;
}
set
{
this.Text = value;
}
}
public void fColorChage(Color color)
{
lblInnerSub.ForeColor = color;
}
public void fInit()
{
lblInnerSub.Text = $"{this.Text} Call";
}
#endregion
}
}
|
cs |
(Form Main)
Main Source 부분 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Interface_Test
{
public partial class Form1 : Form
{
int iMainFormCount = 1;
int iSubFormCount = 1;
public Form1()
{
InitializeComponent();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void form생성ToolStripMenuItem_Click(object sender, EventArgs e)
{
fInnerMain childForm = new fInnerMain();
childForm.strfrmName = $"Main Form #{iMainFormCount}";
childForm.TopLevel = false;
pMain.Controls.Add(childForm);
childForm.Show();
iMainFormCount++;
}
private void subFrom생성ToolStripMenuItem_Click(object sender, EventArgs e)
{
fInnerSub childForm = new fInnerSub();
childForm.strfrmName = $"Sub Form #{iSubFormCount}";
childForm.TopLevel = false;
pMain.Controls.Add(childForm);
childForm.Show();
iSubFormCount++;
}
private void 선택Form색상변경ToolStripMenuItem_Click(object sender, EventArgs e)
{
ColorDialog cDialog = new ColorDialog();
if(cDialog.ShowDialog()== DialogResult.OK)
{
foreach (var ofrom in pMain.Controls)
{
/*
if (ofrom is fInnerMain)
{
fInnerMain fMain = ofrom as fInnerMain;
fMain.fColorChage(cDialog.Color);
}
else if (ofrom is fInnerSub)
{
fInnerSub fSub = ofrom as fInnerSub;
fSub.fColorChage(cDialog.Color);
}
*/
// Interface 구현 (Class 간의 결합도를 낮춰 Interface Function 호출
iCommon icom = ofrom as iCommon;
icom.fColorChage(cDialog.Color);
}
}
}
}
}
|
cs |
'C# > C# 강좌 Winform' 카테고리의 다른 글
Doridori C# 강의) C# 프로그래밍 무조건 따라하기 (Chapter 2) (8) | 2021.07.31 |
---|---|
Doridori C# 강의 2) 57.콜백(CallBack Method) (2) | 2021.07.18 |
Doridori C# 강의 2) 55.포인터, Memory Address (0) | 2021.05.06 |
Doridori C# 강의 2) 54.얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy) (4) | 2021.04.11 |
Doridori C# 강의 2) 53.Loading 화면 만들기 (Program.cs) (4) | 2021.03.13 |
- Total
- Today
- Yesterday
- 서울
- C# 기초 강의
- 맥주
- 가볼만한곳
- 가볼만한 곳
- C# 강좌
- 소주
- 주말
- 막걸리
- 광저우
- 프로그램 강의
- 도리도리 C#
- 게임
- 아이랑
- C# 강의
- C#
- 증류주
- 모바일
- 술
- 위스키
- 도리도리
- 나들이
- 맛집
- WinForm
- 하이볼
- Visual Studio
- 칵테일
- 와인
- 전통주
- 보드카
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |