반응형
닷넷 개발자를 위한, 닷넷 개발자에 의한, 닷넷 개발자의 닷넷커뮤니티 컨퍼런스

닷넷 개발자를 위한, 닷넷 개발자에 의한, 닷넷 개발자의 닷넷커뮤니티 컨퍼런스

닷넷 개발자를 위한, 닷넷 개발자에 의한, 닷넷 개발자의 닷넷커뮤니티 컨퍼런스


 

닷넷 개발자를 위한, 닷넷 개발자에 의한, 닷넷 개발자의 닷넷커뮤니티 컨퍼런스

닷넷 개발자를 위한, 닷넷 개발자에 의한, 닷넷 개발자의 닷넷커뮤니티 컨퍼런스


닷넷 개발자를 위한, 닷넷 개발자에 의한, 닷넷 개발자의 닷넷커뮤니티 컨퍼런스



반응형
 
실제 요구 사항을 맞추기 위하여 .net framework를 통하여 소프트웨어 개발을 진행하다 보면 숱하게 부딪히고 어려움을 겪게 되는 부분이 바로 비 관리 코드들과의 상호 연동에 관한 문제들입니다. 물론 전지전능한 msdn 라이브러리와 google의 힘을 빌어 손쉽게 해결하시는 분들도 계십니다. 하지만 생각보다 그렇게 답을 얻어내는 것은 쉽기는커녕 “고행”이라고 부를 정도입니다.
이러한 주제를 정형화하거나 완벽한 답이 무엇이라고 이야기하기는 힘들지만, 적어도 여러 가지 정보와 노하우를 풀어놓고 실전에서 겪었던 다양한 문제점들을 전하고 전달받는 그런 시간을 마련하고자 이번 세미나를 기획하게 되었습니다.
 
주 제  platform integration strategies and know-how for .net developers
개최일시  2009년 02월 21일 14:00~18:00
장소  한국마이크로소프트 5층 교육장
참가대상  c/c++과 c#을 동시에 사용하시는 분들, 윈도 api 응용이 힘드신 분들,
 .net 바깥의 다른 환경들과의 호환성 문제로 힘든 일정을 보내시는 분들
내용수준  중/고급 수준 - c# 이외에 c/c++ 프로그래밍 언어에 대하여 관심이
 있으시거나 한 번 이상 다루어보셨던 분들
가 격  무료
 
시 간 session 강 좌 제 목
14:00 ~ 14:50 50분 session 1  c 언어 연동에 대한 고민
15:00 ~ 15:50 50분 session 2  win32 api api 연동에 대한 고민
16:00 ~ 16:50 50분 session 3  activex 연동에 대한 고민
17:00 ~ 17:30 50분 session 4  unsafe 코드에 대한 고민
17:30 ~ 17:50 20분 -  질문과 답변
* 각 섹션의 쉬는 시간은 유연성 있게 조절합니다.
 
남 정 현 ㈜코아뱅크 / 산업기능요원 근무 중
- 데브피아 c# 마을 시삽 / microsoft mvp (visual c#)
- 남정현의 닷넷 블로그 (http://rkttu.com)
 
[session 1] c 언어 연동에 대한 고민
플랫폼 호출 서비스에 대한 이해
marshaling에 대한 이해
system.runtime.interopservices 네임스페이스의 주요 클래스들과 기능 둘러 보기
demo : heap memory allocation
demo : printf / scanf에 대한 사례와 한계
xplatform에 대한 이야기 #1 : c 언어 호환성
 
[session 2] win32 api api 연동에 대한 고민
dll 모듈 별 의미와 기능 이해
암시적 연결과 명시적 연결, 빠른 바인딩과 지연 바인딩
demo : window enumeration
demo : graceful window trace and handling
xplatform에 대한 이야기 #2 : win32 api 호환성
쉬어가기 : linux와 mono에서의 xplatform
 
[session 3] activex 연동에 대한 고민
com과 .net
activex와 .net #1 : gui 형태의 activex와 windows forms
activex와 .net #2 : component 형태의 activex와 activex wrapper
activex와 .net #3 : 컨테이너로서의 windows forms web browser control
demo : microsoft excel 편집 예제
demo : 한/글 컨트롤 사용 예제
 
[session 4] unsafe 코드에 대한 고민
unsafe 코드 문법과 기능상의 특성
demo : 배열 탐색의 새로운 방법
demo : unmanaged memory 영역 탐색을 통한 c 언어 스타일의 구조체 핸들링
 
 
- 세미나 당일 주차는 지원되지 않습니다. 가급적이면 대중교통을 이용해 주시기 바랍니다.
- 문 의 : 02-511-4824 (#132)
- 강의자료 : 다운로드
- 세미나 참가 시 활동왕 점수가 지급됩니다.
 
 

반응형

출처 : http://itkang.egloos.com/tb/516166


VB.NET에서의 객체지향 프로그래밍


VB.NET은 JAVA처럼 완벽한 객체지향을 지원한다.  VB.NET에서 어떠한 식으로 객체지향프로그래밍이 이루어지는지 예를 들어 살펴보기로 하자.

1-1. 네임스페이스, 클래스, 객체, 모듈

   ✱ 네임스페이스

VB.NET에서는 특정한 목적을 가진 클래스나 데이터 구조체들을 네임스페이스의 형태로 묶는다. 프로그래머는 단순하게 네임스페이스를 임포트(Import)함으로써, 네임스페이스의 클래스들을 사용할 수 있다. Imports라는 키워드를 사용하여 네임스페이스를 프로젝트에 임포트 한다. .NET프레임워크는 다양한 네임스페이스를 통하여 많은 클래스들을 지원하고 있다. 본 예제에서는 System이라는 네임스페이스를 사용한다.

Imports System


    ✱ 클래스

우리는 이미 클래스와 객체에 대하여 잘 알고 있다. 간단히 말하자면 클래스는 실생활에 존재하는 객체(Object)의 정의이다. 예를 들면 Human이라는 클래스는 인간을 표현하는 클래스이고, Dog이라는 클래스는 모든 개들을 표현하는 클래스이다. VB.NET에서는 아래의 예처럼 클래스를 정의한다. VB.NET에서의 클래스는 함수(Function), 변수, 속성(Property)등을 포함할 수 있다.


Imports System

Namespace Animals

Class Dog

   Function Bark()

      Console.Writeline ("Dog is barking")

   End Function

End Class

End Namespace


    ✱ 객체

객체는 클래스의 인스턴스(사례)이다. 예를 들면 Jimmy는 Dog의 한 개체이다. 클래스란 하나의 틀이고, 이틀을 이용하여 객체를 찍어내어 사용한다고 볼 수 있다. 다음과 같이 객체들을 생성하고 사용한다..








Public Module modMain

Sub Main()


Dim Jimmy as Animals.Dog

Jimmy = new Animals.Dog()


Dim Merry as Animals.Dog

Merry = new Animals.Dog


Jimmy.Bark()  ‘ --> Dog 클래스내의 Bark함수 호출

Merry.Bark()

End Sub

End Module


마치 변수를 선언하듯 Dog이라는 형태의 Jimmy변수와 Merry변수를 선언한다. Animals란 네임스페이스내의 Dog이라는 클래스가 있기 때문에 Animals.Dog이라는 표현을 사용하였다.

Jimmy = new Animals.Dog와 Merry = new Animals.Dog에서 객체를 생성한다. 


   ✱ 모듈

앞의 예제에서 우리는 모듈을 이미 사용하였다. 우리는 공통 함수(Function과 Sub)을 작성하기 위하여 모듈을 사용한다. 즉 모듈은 함수들의 집합체이다. public으로 선언된 함수들은 어디서든지 사용될 수 있다. 모듈에 작성된 여러 함수들 중 Main()함수를 제일 먼저 실행한다.


1-2. 접근형식

주된 접근형식으로는 Public, Private, Friend 그리고 Protected가 있다. 앞에서 언급 했듯이 클래스는 함수와 변수 등을 포함할 수 있는데, 우리는 함수와 변수 앞에 접근형식을 선언할 수 있다. 만약 접근형식이 Public으로 선언되었다면, 객체를 생성함으로써 해당 함수나 변수를 사용할 수 있다. Private나 Protected로 선언된 함수나 변수는 클래스 내의 함수들만 사용할 수 있다. Private와 Protected의 다른점은 Protected는 클래스를 상속하면 사용할 수 있다는 것이다. Friend는 동일 프로젝트내에서는 접근이 가능하다. 아래의 예는 Public과 Private의 사용 예를 보여준다.


Imports System

Namespace Animals

Public Class Dog

   Public AgeOfDog as Integer  ‘  --> Public변수

   Public Function Bark()       '  --> Public 함수 Bark

       Console.Writeline ("Dog is barking")

   End Function


   Private Function Walk()    ' --> Private 함수 Walk

        Console.Writeline ("Dog is walking")

   End Function

End Class

End Namespace


Public Module modMain

Sub Main()

    ourFunction()
End Sub


Function ourFunction()

    Dim Jimmy as Animals.Dog

    Jimmy = new Animals.Dog()

    Jimmy.Bark   '--> Bark가 Public으로 선언되어 있기 때문에 실행된다.

    Jimmy.AgeOfDog = 10  ‘ --> AgeOfDog이 Public으로 선언되어 있으므로 실행된다.

    Jimmy.walk           ‘ --> walk가 Private로 선언되어 있으므로 오류 발생

End Function

End Module 


1-3. Shared 함수

클래스내의 Shared멤버는 객체를 생성하지 않고도 사용할 수 있다.


Imports System

Namespace Animals

Public Class Dog

   Public Shared Function Bark()       '  --> Public 함수 Bark

       Console.Writeline ("Dog is barking")

   End Function


   Private Function Walk()    ' --> Private 함수 Walk

        Console.Writeline ("Dog is walking")

   End Function

End Class

End Namespace


Public Module modMain

Sub Main()

    Animals.Dog.Bark()  ‘--> Bark함수가 Shared로 선언되었기 때문에 객체를 생성하지
                         ’않고도 함수를 실행할 수 있다.

    Dim Jimmy as Animals.Dog

   Jimmy = new Animals.Dog()

   Jimmy.walk()  ' --> walk는 shared로 선언되지 않았기 때문에 객체생성후 사용

End sub

End Module 


우리가 지금 까지 사용한 Writeline함수는 Shared함수 이기 때문에 객체를 생성하지 않고 사용할 수 있다.


1-4. 오버로딩

오버로딩이란 동일한 이름을 갖는 함수를 파라미터를 다르게 줌으로써 각각 다른 함수처럼접근할 수 있도록 해주는 기술이다.


Imports System

Class Adder

   Overloads Public Sub Add(A as Integer, B as Integer)

       Console.Writeline ("Adding Integers: " + Convert.ToString(a + b))

   End sub


   Overloads Public Sub Add(A as String, B as String)

       Console.Writeline ("Adding Strings: " + a + b)

   End sub

   Shared Sub Main()

      Dim AdderObj as Adder

      AdderObj = new Adder

      AdderObj.Add(10, 20)

      AdderObj.Add("hello", " how are you")

   End sub

End Class


위의 예제를 보면 Add라는 이름을 갖는 두개의 함수가 존재하나 각각의 인자(Parameter)가 서로 다르기 때문에 별개의 함수로 인식된다. 오버로딩을 사용하기 위해서는 함수 앞에 Overloads라는 키워드를 사용하여야 한다. Main함수를 클래스 내부에 작성할 때는 Shared키워드를 사용하여 객체를 생성하지 않고 실행될 수 있도록 해 주어야 한다.


1-5 상속

상속이란 프로그램의 재사용성을 높이기 위한 객체지향프로그래밍의 핵심적 기술이다. 다시 말하면 이미 만들어진 클래스를 다시 이용하는 방법을 말한다. 클래스를 상속받은 클래스(Derived Class)는 부모클래스(Base Class)의 속성을 그대로 물려받는다.


Imports System

Class Human

   Public sub Walk()

       Console.Writeline ("Walking")

    end Sub

End Class


Class Programmer

   Inherits Human

   Public sub Programming()
       Console.Writeline ("Programming")

   End Sub

End Class


Class MainClass

   Shared Sub Main()

      Dim Tom as Programmer

      Tom = new Programmer

      Tom.walk()   '--> Programmer클래스가 Human클래스를 상속했으므로 Human클래스의

                  ‘-->  함수를 이용할 수 있음

      Tom.Programming()

   End Sub

End Class       

1-6. 오버라이딩

기본적으로 상속받은 클래스는 부모클래스(Base Class)의 함수를 상속 받는다. 상속받은 함수를 재정의 하여 사용할 수도 있는데 이를 오버로딩이라고 한다.


Imports System

Class Human

   Overridable Public Sub Speak()

      Console.Writeline ("Speaking")

   End Sub

End Class


Class Korean

    Inherits Human

    Overrides Public Sub Speak()

       Console.Writeline ("Speaking Korean")

    End Sub

End Class


Class MainClass

   Shared Sub Main()

      Dim Lee as Human

      Lee = new Human

      Dim Kim as Korean

      Kim = new Korean

      Lee.Speak()

      Kim.Speak()

   End Sub

End Class


1-7. 생성자(Constructor)와 소멸자(Destructor)


생성자는 객체가 생성될때 자동으로 실행되는 특별한 함수의 하나이다. 생성자도 오버로딩하여 사용할 수 있는데 생성자에서는 Overloads란 키워드를 사용하지 않는다. 소멸자는 객체가 소멸될 때 자동으로 실행되는 특별한 함수이다.



Class Dog

   Private Age as Integer

   Public Sub New()   ' --> 생성자

      Console.Writeline ("Dog is created with age zero")

      Age = 0

   End Sub


   Public Sub New (Val as Integer)

      Console.Writeline("Dog is Created with age " + Convert.ToString(Val))

      Age = Val

   End Sub


   Overrides Protected Sub Finalize()  ' --> 소멸자

      Console.Writeline("Dog is destroyed")

   End Sub


   Shared Sub Main()
      Dim Jimmy, Jacky as Dog

      Jimmy = new Dog      '--> 디폴트 생성자를 실행

      Jacky = new Dog(10) ‘--> 인수를 갖고있는 생성자를 실행

   End Sub

   ‘ --> 프로그램 끝날 때 소멸자 실행

End Class


1-8. 속성(Property)

객체에 정보를 저장하기 위해 속성과 필드를 사용한다. 필드는 단순한 Public변수를 의미하나, 속성은 Get/Set키워드를 사용한다.


Imports System

Public Class Dog

   Private AgeOfDog as Integer

   Public Property Age() As Integer

     Get

        Console.Writeline("Getting Property")

        Return AgeOfDog

     End Get


     Set(ByVal Val As Integer)

        Console.Writeline("Setting Property")

        AgeOfDog = Val

     End Set

   End Property

End Class 


Class MainClass

   Shared Sub Main()
      Dim Jimmy as Dog

      Jimmy = new Dog

      Jimmy.Age = 30    '--> AgeOfDog변수를 직접 핸들링할 수 없다(Private) 그래서

                       ‘--> Age() Property루틴을 사용한다.

      Dim curAge = Jimmy.Age() ‘--> Age Get루틴이 실행된다.

   End Sub

End Class

+ Recent posts