나는 펜으로 종이에 글을 쓴다. 를 프로그래밍한다묜???
프로젝트가 지루해져가서 잠깐 딴짓을 해본다.
소요 시간 : 1시간반쯤? 기록 10분...쿵..,
도구 : 종이 두장. ( 낙서가 생각하는데 도움을 준다. )
막상 글을 다 적고 보니 전공자가 아니라서 그런지 부족한게 보여도 채워넣기가 쉽지 않다.
몰라서이기도 하고, 알아야 하는것이 있음에도 그걸 익힐 시간이 만만치 않기에... (핑계~ )
제목처럼 글하나를 프로그래밍 해본다.( 조금은 복잡하게... 말이다. )
물론 저 간단한 문장을 쉽다면 아주 아주 쉽게, 어렵다면 어렵게... 상황에 맞춰서 코딩을 하겠지만...
코딩전 객체설계단계를 연습삼아.. 만들어보자! 우선은 글에서 나타난 객체들을 구상한다.
(나) 라는 주체가 있고 (종이)와 (글)을 쓰는 (펜) 이 존재하게 된다.
음. 네가지의 객체가 서로 관련되어 있다. 이를 간단한 구상도( 나만에 방법 )를 그려보자.
음 위에 종이와 펜도 구체화 해보자.
간단하다. 중간에 대리자나 객체 또는 인터페이스... 등등.. 선택하고 싶은걸 넣으면 된다.
코딩에 들어가야겠지?
굳이 대리자를 써본이유는
public void Write(string wrMsg)
{
_wPen.Data = wrMsg;
//_wPaper.Get(_wPen.Draw); // 기본사용..
_wPaper.Get(delegate(Graphics g) {
g.DrawString(wrMsg, new Font("궁서체", 20f), Brushes.Red, new PointF(10, 100));
});
}
이걸 기록하기 위해서다.
( 반드시 제공되는 소스대로가 아닌 취향에 맞게 변경할수도 있다는 것을 제공해주기 위한 배려?...
: 이걸 제공함으로 원치 않은 동작이 나타날수 있으니.. 설계시 설계자의 판단에 맞겨야겠지? )
{
* 국어인 한글을 단어 찾아보면서 써야되겠네...
반드시 [부사] 틀림없이 꼭.
반듯이 [부사] 찾아보기: 반듯하다
}
아래는 소스 전문이다.
폼에 버튼 하나 추가되있고 버튼에 Click이벤트를 추가한것 뿐이다.
위 구성도가 있으니... 주석은 패쑤!
public partial class Form1 : Form
{
Writer me = null;
Paper paper = null;
Pen pen = null;
public Form1()
{
InitializeComponent();
pen = new Pen();
paper = new Paper(this);
pen.Penfont = this.Font;
me = new Writer( pen, paper );
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(e);
pen = null;
paper.Dispose();
paper = null;
me = null;
}
private void button1_Click(object sender, EventArgs e)
{
me.Write("가나다라");
}
}
public class Writer
{
Pen _wPen = null;
Paper _wPaper = null;
public Writer(Pen p1, Paper p2)
{
_wPaper = p2;
_wPen = p1;
}
public void Write(string wrMsg)
{
_wPen.Data = wrMsg;
_wPaper.Get(_wPen.Draw);
}
}
public delegate void Delegate_Draw(Graphics paper);
public class Paper : IDisposable
{
Graphics _g = null;
public Paper( Control ctrl)
{
_g = Graphics.FromHwnd( ctrl.Handle );
}
public void Get(Delegate_Draw toolDraw)
{
toolDraw(_g);
}
#region IDisposable 멤버
public void Dispose()
{
_g.Dispose();
_g = null;
}
#endregion
}
public class Pen
{
string _data = string.Empty;
public string Data
{
get { return _data; }
set { _data = value; }
}
Font _penfont;
public Font Penfont
{
get { return _penfont; }
set { _penfont = value; }
}
public void Draw(Graphics g)
{
g.DrawString(_data, _penfont, Brushes.Black, new PointF());
}
}
'# 1) 프로그래밍' 카테고리의 다른 글
이름을 잘짓자! 한글로 코딩을... (0) | 2010.05.26 |
---|---|
변수명, 메서드명... 이름짓기어렵다!! (0) | 2010.05.26 |
TCP.IP 초기 구상 모델... (0) | 2010.05.09 |
미스테리... vs2008 오류.. (2) | 2010.04.19 |
컨트롤 타원 회전시키기... (0) | 2010.04.08 |