티스토리 뷰

프로그래밍

OOP와 VB.Net 클래스

야라바 2015. 4. 7. 11:07


OOP는 Object-Oriented Programming(객체 지향 프로그래밍)의 약자로 현재 프로그래머 들이 즐겨사용하는 대부분의 프로그래밍 언어에는 OOP개념이 포함되어 있습니다. VB .Net 또한 OOP 시각으로 프로그램을 만들어 가는 것이 효과적이며 VB 언어에 가장 적절한 프로그래밍 방법입니다. 초기의 프로그래밍 언어가 프로그램을 데이터와 처리 방법으로 나누는 절차적(procedural) 프로그래밍이었다면 GUI(Graphic User Interface) 기반의 사용자 환경과 수많은 이벤트에 대응해야하는 비절차적 환경에 적절한 OOP는 프로그램을 여러 객체로 나누고 이들 객체 간의 상호 작용을 기술하는 방식으로 프로그래밍합니다. 절차적 프로그래밍 언어로는 C, FORTRAN, COBOL을 들수 있고 OOP 언어는 VB.Net을 비롯하여 Java, Python등을 예로 들 수 있습니다.

VB의 클래스 정의는 Class 클래스명 .....End Class의 형식으로 기술합니다.

클래스 내의 데이터 멤버를 속성(attribute)이라 하고 일반적인 변수 선언 방식과 동일하게 사용합니다. 클래스 내의 프로시저 선언을 메소드(Method)라 하고 서브 프로시저와 함수 모두를 사용할 수 있습니다. 위의 코드 예제를 보면 Handler등의 속성과 SwitchControls 라는 메소드를 확인할 수 있습니다. 속성과 메소드 앞에는 Private, Public, Protected를 붙여서 그 접근 가능 범위를 지정할 수 있습니다. Private는 해당 클래스 및 오브젝트 바깥에서는 접근할 수 없으며 Public은 바깥에서도 접근할 수 있도록 합니다. Protected는 클래스를 상속받아 또다른 클래스를 만들 수 있는데 상속 받은 클래스에서는 접근할 수 있도록 한 것입니다. 아무것도 지정하지 않으면 기본적으로 Private으로 처리합니다.

클래스를 사용하기 위해서는 오브젝트를 선언 및 생성해 주어야 하는데 위의 코드 예제를 보면 오브젝트 선언은 변수 선언과 마찬가지로 "Dim 오브젝트이름 As 클래스이름"의 형식으로 기술합니다. 오브젝트의 실체를 생성할 때는 "New"를 사용해야 하며 위의 예제 "Dim ExcludedFilderPatterns As New List(..)" 처럼 선언과 동시에 생성할 수도 있고, 선언과 생성을 분리하여 실행문 기술 시점에 "ExcludedFilderPatterns =  New List(..)" 처럼 기술할 수도 있습니다. 속성 및 메소드의 사용은 오브젝트명.속성 또는 오브젝트명.메소드의 형식으로 사용할 수 있으며 오브젝트를 생성하지 않아도 존재하는 클래스 속성과 같은 경우에는 클래스명.속성으로도 사용할 수 있습니다.

메소드 중에 특별한 메소드로 생성자(constructor)와 소멸자(destructor)가 이들은 오브젝트가 생성되는 시점 또는 소멸 시점에 자동으로 불려지는 메소드입니다. 이름은 각각 New()와 Finalize()로 정의하면 되고 생성자의 경우 오브젝트 생성 시점에 파라미터를 전달받아 적절한 작업을 수행할 수 있습니다. 

위에서 언급한 방식을 통해서 클래스 내에 객체와 관련한 다양한 정보와 기능을 모아놓고 클래스 바깥으로는 상호 작용을 위한 인터페이스를 공개하는 캡슐화를(Encapsulation, 정보은닉) 통해서 한 클래스의 수정이 다른 곳에 미치는 영향을 최소화하면서도 재사용을 높여주는 장점을 높였다면 클래스 상속(Inheritance)은 OOP의 장점을 극대화 시켜주는 것으로 안정된 클래스를 손쉽게 확장 할 수 있도록 해줍니다. 대표적인 예를 들자면 앞으로 다룰 윈도우 폼을 디자이너에서 작성하면 아래의 코드 예제와 같이 사용자가 작성한 폼(From)들은 .Net 시스템의 클래스를 상속받는 방식으로 자동 생성됩니다.

Partial Class MainForm

    Inherits System.Windows.Forms.Form

상속은 "Inherits 클래스명"의 형식으로 사용합니다. Inherits 다음에 기술하는 클래스를 부모(Parent) 클래스, Super 클래스등으로 부르고 상속 받은 클래스를 자식(Child) 클래스, Sub 클래스라 부릅니다. 위의 코드에서는 System.Windows.Forms.Form가 부모 클래스이고 MainForm이 Sub 클래스인 것입니다. 실상 C#.Net이든 VB.Net이든 프로그램의 생산성과 안정성을 높이는 관건은 위의 코드 처럼 .Net 프레임워크에서 제공하고 있는 다양한 클래스를 적절하게 활용하는 것에 있다고 해도 과언이 아닙니다. 클래스를 만들어 가는 것도 중요하겠지만 많은 경우에는 클래스를 만들기 보다는 .Net 프레임워크에 있는 클래스를 잘 사용하기만 해도 문제 해결에 충분한 경우가 많습니다. 닷넷 프레임워크 4.5를 기준으로한 클래스 소개는 https://msdn.microsoft.com/en-us/library/gg145045(v=VS.110).aspx를 참조하시면 됩니다. 아래의 그림은 4.5 기준의 Name space입니다. Name space 내부에 다양한 클래스가 있으므로 그 양은 엄청나게 방대한 것입니다. MSDN 사이트에서의 빠른 검색이 실력일지도 모릅니다.




댓글
댓글쓰기 폼