VisualBasic.NET(비쥬얼베이직닷넷)/1. VB.NET강좌

[VB.NET강좌] 02. VB.NET 들어가기전 꼭 알고가자1

롤파마 2017. 1. 19. 20:02



02. VB.NET 들어가기전 꼭 알고가자1


   공부하면서 쓰는거라 오류가 있으면 댓글 달아주세요.




프로그램을 만들기 전에 몇 가지 이해하고 넘어가야할게 있다.

아래 코드를 보고 설명을 해보자.





   


   1. Class , Sub , Function


  1) Class(클래스)


프로그램에서 객체를 만들기 위해서는 클래스(객체를 만들기위한 일종의 틀)이 정의 되어있어야 한다고 했다.

Class 이게 바로 클래스이다. 위 코드를 보면 Class가 보일것이다.

그럼 Class 는 어떻게 표현해야 할까?


위 사진에서 코드 1번  Public Class ClassTest  ~  End Class 처럼





이렇게 표현하면 된다.



  2) 메소드(함수) - Sub , Function


Class 안에서 "동작을 정의하는 함수" 를 메소드 라고 한다.

위 사진의 코드 2번, 코드3번 처럼 Sub , Function 가 있고 메소드의 표현방법은 Class 와 같다.





메소드 Sub , Function 의 차이는 


Sub : 사용자정의 함수로 값을 반환하지 않고 함수를 불러 동작만 실행 할 때 사용

Function : 사용자정의 함수로 인수들을 넘겨서 값을 반환 하는 결과값이 필요 할 때 사용


자세한건 다음 강의할 때 코드를 만들면서 이해하자.




   2. 선언과 정의


사전적인 용어를 살펴보면

선언진행에 관련된 사항을 구성원 전체에게 공개적으로 알림

정의어떤 단어나 사물의 뜻을 명백히 밝혀 규정함


위에서 우리는 Class 를 표현하는 법을 배웠는데, "이런 Class가 있다" 라는걸 알리는 것이다.





이와 같이 표현하는걸 클래스선언 이라 한다.


Class선언만 하면 객체를 생성할수 없다.

Class정를 해야 객체를 생성할수가 있게된다.

정의를 해야 객체의 메모리공간이 만들어지게 되는것이다. 정의를 하면 선언을 겸할수있다.




   3. 접근한정자


위 코드처럼 Class앞, 메소드앞, 변수앞에 쓰는걸 접근한정자라 한다.


접근한정자 "접근할수있는 범위권한을 부여" 하는걸 말한다.


접근한정자는 아래와 같이 구분된다.

 

Public(공공의) : 어디서나 사용할수 있다.

Private(사적인) : 클래스 범위 안 에서만 사용하고 다른 곳에서는 접근 할 수 없다.

Protected(보호하다) : 클래스 범위 안과 상속받은 클래스에서 사용할수 있고 다른 곳에서는 접근 할 수 없다.

Friend(친구) : 동일 프로그램 내에서만 사용할수 있다. 다른 곳에서는 접근 할 수 없다.

Protected Friend(친구 보호) : Protected, Friend 모두 제공 동일프로그램, 자체클래스 및 파생클래스에서

액세스 할수 있다. 클래스의 멤버에만 지정할수있다.


접근한정자를 생략하고 Class 클래스명 이렇게 적는다면 기본은 Friend가 된다.(MSDN Library적여있음)


클래스 안에 함수가 Public라면 객체 생성후 언제든지 사용할수 있지만, Private라면 객체에선 절대로 사용할수없다. 클래스 내부에서만 사용가능하다.(은닉화-캡슐화)


위 코드에서

ClassTest 클래스는 접근한정자가 Public 이므로 어디에서든 ClassTest 클래스 사용할수 있다.

ClassTest 클래스 안에있는 FunFTest 함수는 접근한정자가 Private 이므로 ClassTest 클래스 객체를 만들어도 사용 할 수 없다. Private ClassTest 클래스 내부에서만 사용할수 있다.




   4. 변수


변수 "어떠한 값도 정해지지 않은 변하는 수" 이다.

프로그램 코딩시 변수는 우리가 필요한 값들을 저장하고 불러서 쓸수있게 하는 역할을 한다.


변수를 정의 하는 방법은





이렇게 정의할수있다.


예를 들면 




메모리가 할당되야 데이터를 저장할수 있게 된다.



그럼 데이터형식이란 무엇인가?

변수를 정의하면 메모리에 공간을 만드는데

메모리에 저장되는 값들이 동일하게 들어온다면 문제될게 없을것이다.


예를들어

메모리에 저장되는 값들이 작은값(1) , 중간값(5) , 큰값(10) 이렇게 들어온다고 하자.

메모리공간을 10만큼 만들게 된다면 작은값은 9만큼, 중간값은 4만큼 메모리 낭비가 있게된다.

그래서 들어오는 값들에 맞게 메모리공간을 잡아주면 낭비를 막을수 있기 때문에 데이터 형식을 쓴다.

데이터 형식은 숫자, 문자, 정수, True or False 가 있고 데이터형식에 맞게 쓰면된다.

데이터 형식을 적지 않으면 자동으로 Object 형식으로 잡힌다.



(아래표는 MSDN Library 에서 가져온것이다.)




할당되는 메모리에 맞는 데이터 형식을 써야 한다.

정수가 필요하면 : Short → Integer → Long

실수가 필요하면 : Single → Double → Decimal

문자가 필요하면 : String

참,거짓이 필요하면 : Boolean

날짜가 필요하면 : DataTime

이 정도 알아두면 된다.


변수명(식별자1)을 만들때는 다음과 같은 규칙을 지켜야한다.

1. 1023자를 넘을수 없고, 한글, 영문자, 숫자, _언더바는 사용 할 수 있지만,

   공백, 특수문자(?!등)은 사용 할 수 없다.

2. 첫 문자는 숫자가 오면 안된다.

3. _언더바로 시작할경우 반드시 하나 이상의 영문자나 10진수를 포함 해야한다.

4. VB.NET에서 사용하는 예약어2는 변수명으로 사용할수 없다. 


변수 선언한 범위 내에서 만 사용할수 있고, 범위를 벗어나면 소멸된다. 소멸되는 않는 변수는 다음에 설명하기로 한다.




   5. 상수


상수"한번 정해놓고 변하지 않는 값" 을 말한다.


예를 들어

복잡한 값 "452879235487624236" 이 있다고 하자.

이걸 일일이 프로그램에서 쓴다면 머리가 아플것이다. 

간단하게 상수명으로 지정해서 쓴다면 언제라도 편하게 쓸 수 있다.


상수를 정의하는 방법은 Const라는 예약어를 사용한다.




상수값은 안바꾸고 사용해도 되지만 상수들이 많거나,  쉽게 눈에 들어오게 하기위해 쓰이는 경우가 대부분이다.


예를 들어

아래처럼 복잡한 상수를


Const testSu As Long = 4528754624236


정의면 4528754624236 처럼 복잡한 값 대신 testSu 상수명으로 편하게 코딩할수 있다.




   6. 객체생성


객체를 생성하는 방법은 3가지가 있다.





이렇게 하면 클래스의 객체(인스턴스)가 만들어진다.




   7. 생성자 , 소멸자


클래스에서 객체를 생성하거나 소멸하면 VB.NET는 자동으로 호출하는 내부 함수가 있다. 


생성자 : "클래스 객체를 생성하면 실행되는 내부함수"

소멸자 : "클래스 객체를 소멸하면 실행되는 내부함수"


생성자 함수는 New() , 소멸자함수는 Finalize() 이다.


생성자는 객체가 만들어지면 개발자가 초기화 할 필요가 있는 것들을 직접 작성하여 실행 시킬때 필요하다.

생성자는 전적으로 개발자의 몫이된다.


Dim 객체명 As 클래스명 = New 클래스명

Dim 객체명 As 클래스명 = New 클래스명(인수)

    이렇게 객체를 생성하면 생성과 동시에 New()함수New(인수)함수를 실행하게 된다.


Public Sub New()

    초기화에 필요한 코드 실행

End Sub


초기화에 필요한 코드 작성하면 된다.


클래스 내부에 Finalize() 가 없어도 객체가 소멸 될 때는 Finalize()를 호출한다.

클래스 내에 없어도 호출된다는 건 우리가 만든 클래스가 Finalize() 함수가 있는 클래스를 상속했기 때문에 호출된것이다. 우리가 작성하는 클래스들은 System.Object클래스로부터 자동으로 상속받게 된다.

부모 클래스가 Finalize() 함수를 가지고 있기 때문에 Public Sub Finalize() 사용하면 오류가 뜨게 된다.

부모클래스가 가지고 있는 Finalize() 함수를 쓰려면 자식 클래스에서 다시 재정의를 해야 한다. 그때 쓰는게 오버라이드(Overrides)이다.

그래서 Protected Overrides Sub Finalize() 오버라이딩해서 작성해야한다.


그럼 왜 생성자와 소멸자는 정의하는게 다를까?

예전에는 프로그램 메모리관리를 개발자가 했기 때문에 객체가 필요없어지면 객체가 가지고있는 메모리들도 개발자가 일일이 소멸시켜 메모리 관리도 하고 신경쓸게 많았다. 하지만 VB.NET는 가비지 컬렉터(Garbage Collector)가 필요없는 메모리를 알아서 자동으로 소멸시켜준다. 개발자가 신경쓸필요가 없어진것이다.

소멸자는 전적으로 프로그램의 몫이기 때문에 함부로 변경할수없게 접근한정자가 다른것이다.

소멸자함수가 필요 없어진 것이다. 그래서 소멸자함수를 잘 쓰지 않는다. 그래도 필요하다면 위처럼 오버라이드해서 소멸자함수를 코딩해서 쓰면 된다.

 



   8. 클래스안에 매개변수와 메소드 사용방법


클래스 내부 형식멤버(매개변수, 메소드)에 접근하려면,

형식이름과 멤버이름 사이에 멤버액세스연산자인 점(.)연산자를 사용한다.


클래스객체 . 형식멤버


이렇게 사용하면 되고 꼭 형식멤버의 접근한정자 확인하고 써야한다.













  1. 클래스명, 변수명, 함수명 처럼 개발자가 정한 이름 [본문으로]
  2. Class, Sub, Function등 처럼 VB.NET에서 사용하는 명령어 [본문으로]