6 주차 객체프로그래밍 대림대학 2011 년도 1 학기홍명덕 (myungduk.hong@gmail.com)
객체실세계에존재하는물건을가상세계인컴퓨터안으로가져온개념 2
객체의장점 부품을만들듯이객체설계객체를조립해서완성된프로그램을개발 부품을교환하듯이객체를수정및교환유지보수쉬어짐객체의특징메서드 : 실세계의행위역할수행속성 : 어떤상태에있는지를값으로저장기타 : 멤버변수, 이벤트 3
클래스객체를대량으로생산할주형역할 클래스선언객체의모양설계 클래스의정의 객체를생산하는역할 New 키워드사용 Class CCar Dim My_Car = New CCar() 또는 Dim My_Car As CCar = New CCar() 4
인스턴스 클래스를사용해서만들어진객체를호칭객체의생성 = ' 객체를정의 (Definition) 했다 ' = ' 인스턴스를생성했다 (Instantiation)' 5
New 키워드이용 객체의생성 Dim obj As New CCar() 변수에다가생성된객체의참조값을저장 Dim obj2 As CCar() obj2 = obj obj 와 obj2 는동일한객체를가리킴 = ' 참조한다 (Reference)' 6
상태값을저장하기위해서사용하는변수선언방법 Class CCar Dim m_x,m_y As Integer ' 자동차의좌표값 사용방법 Dim My_ Car As New CCar() My_Car.m_x = 100 ' 자동차의 x좌표로 100을저장. My_Car.m_y = 100 ' 자동차의 y좌표로 100을저장. Dim icurx As Integer = My_ Car.m_ x ' 자동차의 x 좌표를꺼내서 icurx 변수에대입 7
객체가가지는특성을저장및읽기기능수행선언방법 Class CCar Private m_x as Integer Property CarX() As Integer Set (ByVal x As Integer) m_x = x End Set Get return m_x End Get End Property ' 자동차의 x 좌표값 'x 좌표를저장 'x 좌표를꺼내서반환함 8
객체가가지는특성을저장및읽기기능수행저장방법 Dim My_ Car As New CCar() My_Car.CarX = 100 ' 자동차의 x 좌표로 100 을저장. 읽기방법 Dim icurx As Integer = My_Car.CarX 'CarX 속성의값을꺼냄. Get..End Get 이호출됨. 9
멤버변수와의차이점저장시방법은동일 ' 필드멤버인 x 의사용 My_Car.m_x = 100 Dim icurx As Integer = My_Car.m_x ' 속성멤버인 CarX 의사용 My_Car.CarX = 100 Dim icurx As Integer = My_Car.CarX 10
멤버변수와의차이점저장속성은값의유효성검사기능추가가능 Class CCar Private m_x as Integer ' 자동차의 x 좌표값 Const conxmax As Integer = 400 자동차의 x좌표의최대크기값상수 Const conxmin As Integer = 10 자동차의 x좌표의최소크기값상수 Property CarX() As Integer Set (ByVal x As Integer) If x > conxmin And x < conxmax then m_x = x 'x좌표를저장 End If End Set Get return m_x 'x좌표를꺼내서반환함 End Get End Property 11
객체가가지는행위를구현 "... 하다 " 등의동사에해당서브프로시저나함수프로시저로구현 객체의사용객체이름 + 마침표 (.) () + 메서드이름 Class CCar Sub Draw() End Sub Debug.print(" 자동차가나타남 ) Dim My_ Car As New CCar() My_Car.Draw() 메서드를사용함 12
값을반환하는메서드함수프로시저사용 Class CCar Private m_x As Integer ' 자동차의 x 좌표값 Function GetX() As Integer Return m_x 'x좌표를꺼내서반환함 End Function Dim My_ Car As New CCar() Dim icurx As Integer icurx = My_Car.GetX() 자동차의 x 좌표를가져옴 13
매개변수를받는메서드서브프로시저와함수프로시저의매개변수사용법과동일 Class CCar Private m_x As Integer ' 자동차의 x 좌표값 Sub SetX(ByVal x As Integer) m_x = x 'x 좌표를저장 End Sub Dim My_Car As New CCar() My_Car.SetX(5) 14
생성자 객체가처음만들어질때실행되는메서드 New() 메서드사용초기화작업코드 Class CCar Sub New() Debug.print(" 자동차가만들어졌습니다. ) End Sub Dim My_Car As New CCar() 객체를생성하므로 New() 메서드가자동으로실행됨. 15
매개변수를받는생성자매개변수를전달받음 Class CCar Sub New(ByVal strowner As String) Debug.print(strOwner & " 님의자동차가만들어졌습니다.") End Sub Dim My_Car As New CCar(" 홍길동 ") 'New() 메서드에매개변수를전달함 16
매개변수를받는생성자복수개의생성자사용가능 Class CCar Sub New() 매개변수가없슴 Debug.print(" 자동차가만들어졌습니다.") End Sub Sub New(ByVal strowner As String) ' 매개변수가있슴 Debug.print(strOwner & " 님의자동차가만들어졌습니다.") End Sub 17
Optional 매개변수를받는생성자 매개변수생략시사용 Class CCar Sub New(Optional ByVal strowner As String = " 아무개 ") Debug.print(strOwner & " 님의자동차가만들어졌습니다.") End Sub Dim My_Car As New CCar() 'New() 메서드에매개변수를전달하지않음 Dim My_Car2 As New CCar(" 홍길동 ") 'New() 메서드에매개변수를전달함 18
특징생성된객체를참조하던변수를모두없애준다고해도바로메모리에서객체가없어지는것은아님가비지컬렉터가처리하는특정시간대의규칙에의거하 여삭제시킬시점이되어야만객체가완전히메모리에서소멸함 사용이유 메모리누수현상예방 메모리작업의생산성향상강제로가비지컬렉터호출방법 System.GC.Collect() 19
소멸자 객체가더이상필요가없어서사라지게될때호출 Finalize() 메서드사용마지막으로정리해야할작업처리 Protected와 Overrides 키워드사용 Dim obj As CCar obj = New CCar() obj = Nothing 'obj변수는 CCar 클래스의생성된객체를가리킴 'obj 변수가가리키는객체를끊음 Class CCar Protected Overrides Sub Finalize() ' 객체를제거될때 Finalize() 메서드가자동으로실행됨. Debug.print(" 자동차가사라집니다.") End Sub 20
소멸자실행가비지컬렉터에의해관리됨 System.GC.Collect() ' 가비지컬렉터를동작시킴 소멸자실행가비지컬렉터에의해관리됨 소멸자대행 Dispose() 메서드사용 Class CCar Sub Dispose() ' 객체를제거할때수작업으로호출시킴 Debug.print(" 자동차가사라집니다.") End Sub My_Car.Dispose() ' 객체가더이상필요없을때수작업으로호출해줌 21
소멸자대행폼의 Closed() 이벤트프로시저이용폼이화면에서사라지기바로직전호출됨준비한 Dispose() 호출함 Private Sub Form1_Closed(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles MyBase.Closed End Sub m_mycar.dispose() m_mycar = Nothing 'Dispose 메서드호출 ' 객체제거 22
일반적인것만추려내는 ' 추상화' 실세계의모습을프로그램세계로가져오기위한방법일반적인모습만생각해내고, 구체적인상세한코드는없애나가는과정클래스로구현 Class CMYClass Sub Hello() End Sub Debug.print(" 안녕하세요 ) 23
블랙박스를만드는 ' 캡슐화' 객체의내부정보는철저히숨김외부에열려진통로만이용해서그객체를사용할수있게함클래스안에서 public으로선언된메서드, 속성, 멤버변수, 이벤트로구현 Public Class BlackBox Private m_innervar As Integer = 5 ' 내부에서만사용됨 Public Function OpenFunc(ByVal x, ByVal y) As Integer ' 외부에서사용가능 Return x + y End Function Dim obj As BlackBox Debug.print(" gp 블랙박스의계산결과 : " & obj.openfunc(5, 5)) 24
확장이가능한 ' 상속성' 원본클래스가가지고있는기능을그대로물려받아서 새로운클래스를만듦으로써기존클래스의기능을확장시켜나가는과정 25
일반화 (Generalization) 상속성의다른표현 상속을해준클래스는상속받은클래스와비교를할때더일반적인모습을가짐 "is a" 관계상속성의관계는보통 "is a" 관계 (" 고객은사람이다 ") 베이스클래스 (Base Class) 상속을해준클래스 " 베이스클래스 ", " 슈퍼클래스 ", " 부모클래스 서브클래스 (Sub Class) 상속을받은클래스 " 자식클래스 ", " 상속클래스 " 26
베이스클래스만들기 Class MyParentClass Public imyparentvalue As Integer 서브클래스만들기 Class MySubClass Public imysubvalue As Integer 27
Inherits 키워드베이스클래스와서브클래스간의연결고리역할 Class MySubClass Inherits MyParentClass Public imysubvalue As Integer Dim obj As New MySubClass() obj.imyparentvalue = 5 obj.imysubvalue = 10 28