리팩터링(refactoring)

리팩터링(refactoring)
1. 정의
- 기존 코드의 설계를 개선하는 절차
- 동작(operation)을 보존하는 변환
-> 겉으로 보이는 동작을 바꾸지 않고, 이해하거나 수정하기 쉽게 소프트웨어의 내부 구조를 바꾸는 것 (Martin Fowler)

2. 리팩터링을 하는 이유
- 새로운 코드를 더 쉽게 추가할 수 있도록 하기 위해
- 기존 코드의 설계를 개선하기 위해
- 기존 코드를 더 잘 이해하기 위해
- 덜 짜증나는 코드로 만들기 위해

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
컴퓨터가 이해하는 코드는 어느 바보나 짤 수 있다. 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 짠다." - Martin Fowler


<참고>
패턴(pattern) : 반복해 나나타는 설계 문제에 대한 표준 해법
설계 초기 단계부터 패턴을 적용하는 것보다 기존 설계를 개선하는 데 패턴을 사용하는 것이 더 낫다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2006/07/25 22:20 2006/07/25 22:20
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/5

Visual Basic.NET의 구조

1. Visual Basic.NET의 소스파일에는 무엇이 들어있나?
- 확장자가 .vb인 소스코드 파일에서는 클래스를 정의
Public Class Dog
'클래스
End Class

- 모듈(module) -> 암시적으로 공유되는 클래스의 특수 형태로 볼 수 있음

2. 클래스(class) 안에는 무엇이 들어 있나?
- 메소드(method)가 한 개 이상 들어 있음
Public Class Dog
Sub Bark()
'메소드
End Sub
End Class


3. 메소드 안에는 무엇이 들어 있나?
- 처리할 일을 지시하는 내용이 들어있음
-> 일련의 명령문이 들어 있음
Public Class Dog
Sub Bark()
Statement1 '명령문
Statement2
End Sub
End Class


4. 클래스를 해부한다면?
비베닷넷에서는 프로그램을 실행시키기 위한 Main함수, 클래스, 폼을 지정해야 함
시작 함수로서의 Main에 대한 정의는 어떻게 하는가?
Public Class MyFirstApp
Public Shared Sub Main()
End Sub
End Class

콘솔프로그램을 작성하고자 한다면 다음과 같이 하면 된다.
Public Class MyFirstApp
Public Shared Sub Main()
Console.WriteLine("Hello, World.")'내용을 콘솔에 출력한다.
Console.ReadLine()'사용자의 입력을 받아들인다.
End Sub
End Class


5. Main함수를 가지고 윈도우 프로그램을 실행하려면?
1) Application.Run 메소드를 이용
Public Module StartModule
Public Sub Main()
Dim frm As New Form1()
Application.Run(frm)
End Sub
End Module

프로그램을 끝낼 때는 Application.Exit()라고 하면 된다.
2) 폼의 ShowDialog메소드를 이용
Public Module StartModule
Public Sub Main()
Dim frm As New Form1()
frm.ShowDialog() 'modal window를 보여줌.
'윈도우가 닫힐 때까지는 Main()의 다른 명령은 실행되지 않음
End Sub
End Module

3) 폼의 Show메소드를 이용
Public Module StartModule
Public Sub Main()
Dim frm As New Form1()
frm.Show() 'modeless window를 보여줌.
'Main()가 계속 실행됨
End Sub
End Module


6. 메소드(method)란?
1) 뭔가를 하는 것
  명령문 : 선언, 대입, 메소드 호출 등
2) 뭔가를 여러 번 반복하는 것
  순환문 : For, While
  For : 반복횟수를 알 때
  While : 반복횟수를 모르며, 탈출조건은 알 때.
3) 조건에 따라 뭔가를 하는 것
  분기문 : If/Else, Select Case

7. 그렇다면 클래스는 어떻게 설계해야 하는가?
- 클래스를 설계할 때믄 그 클래스 유형으로부터 생성되는 객체에 대해 생각한다.
객체에서 아는 것 -> 인스턴스 변수
객체에서 하는 것 -> 메소드
- 이 클래스가 무엇을 할 것인가(역할-> 메소드)를 먼저 생각한다.
Public Class Song
Dim m_Title As String '아는 것 -> 인스턴스 변수(상태)
Dim m_Artist As String
'
Sub SetTitle() '하는 것 -> 메소드(행동)
Sub SetArtist()
Sub Play()
End Class


- 클래스와 객체 사이에는 어떤 차이가 있는가?
  클래스는 객체(인스턴스)를 만들기 위한 청사진 -> 그 유형의 객체를 만드는 방법을 알려주는 역할을 한다
  클래스는 하나이나 객체는 여럿이 될 수 있다.

8. 점(.) 연산자
- 클래스 내부의 상태와 행동을 어떻게 참조/호출하는가?
- 점(.) 연산자는 객체의 상태(인스턴스 변수)와 행동(메소드)을 접근할 수 있게 해주는 역할을 한다.
Dim myDog As Dog = New Dog() '새로운 객체를 만든다.
myDog.Bark() '점 연산자를 myDog변수에 적용하여 Bark()메소드를 호출하여 그 개가 짖도록 한다.
myDog.m_Size = 40 '점 연산자를 써서 그 크기를 설정한다.


Public Class Dog
Dim m_Size As Integer '***실제 코딩에서는 상태를 직접 바꾸는 것을 피하자. 상태는 Private으로 선언하여 숨긴다.
Dim m_Breed As String
Dim m_Name As String
'
Public Sub Bark()
Console.WriteLine("멍멍")
End Sub
End Class


9. 결국 비베닷넷의 프로그램은 무엇이라 할 수 있는가?
-클래스를 통해여 만들어진 객체들의 연극
- 비베닷넷 프로그램이란 객체가 다른 객체와 대화하는 것에 불과함
- 대화한다는 것은 객체에서 서로 다른 객체의 메소드를 호출하는 것을 의미함.

myDog.Bark()

-> myDog에게 Bark하라고 말함
-> myDog에게 Bark하라는 메시지를 전함
-> myDog이라는 변수로 참조할 수 있는 객체를 이용하여 Bark()라는 메소드를 호출하라는 뜻

- 메시지 = 참조변수 + 점(.)연산자 + 메소드
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2006/03/25 21:32 2006/03/25 21:32
, , , ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/69

UML 클래스 다이어그램

클래스 다이어그램에 대한 로버트 C. 마틴의 글입니다.
제가 강의에 참고한 내용이지요.
좋은 내용입니다.
단, 영어로 작성된 문서입니다.

UML_ClassDiagrams.pdf

UML Class Diagram


크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2006/03/06 22:13 2006/03/06 22:13
, ,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/2

VB.NET : 프로그래밍 가이드

비베닷넷 프로그래밍을 위한 작은 문서입니다.
옛날에 작성한 문서로 비베6.0을 덮어쓴 문서입니다.

VB_NET_V2002.pdf

vb.net 프로그래밍가이드

크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by 솔라뷰

2002/05/17 22:04 2002/05/17 22:04
,
Response
No Trackback , No Comment
RSS :
http://www.solarview.net/rss/response/1