Structure와 Class

선택사항을 저장하는 구조체를 만들었는데, 원본 구조체의 값이 변경되지 않았다. 구조체를 전달할 때, ByRef를 사용했음에도 불구하고 원본 값이 변경되지 않았다. 그래서 클래스로 변경하니 원본의 값이 변경되었다.
구조체를 사용해서 인자를 전달하면, 원본에는 아무런 변화가 없다.

List와 Dictionary 클래스

.NET Framework v1.1이하에서는 ArrayList와 HashTable을 이용하여 콜렉션을 관리하였다.

ArrayList는 항목이 중복될 수 있는 콜렉션을 관리하며 추가된 순서(인덱스)가 중요한 관리대상이다. 예를 들어 벽체의 구성은 벽돌, 단열재, 방습층, 벽돌 등과 같이 중복되는 재료가 있는 경우이기 때문에 ArrayList를 사용하는 것이 좋다.

HashTable은 항목이 중복될 수 없는 콜렉션을 관리하며 중복되지 않는 키(key)가 중요한 관리대상이다. 예를 들어, 건축재료 전체 목록을 관리하고자 한다면 이름을 키(key)로하여 각 재료의 물성치를 관리할 수 있다.

이 둘을 안전하게 사용하려면 자료형(data type)을 항상 검토하여야 한다.

저장할 자료형을 정하여, 이와 다를 경우 코딩시부터 오류를 발생시키도록 강력한 자료형검토를 보장하는 클래스가 v2.0에서 추가되었다.

Generic.ListGeneric.Dictionary가 바로 새로 추가된 클래스들이다.

———

*주의 : .NET Framework v2.0에 Generic이 추가된 것임. 기존의 ArrayList와 HashTable은 계속사용할 수 있음

Visual Basic.NET의 구조

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

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

2. 클래스(class) 안에는 무엇이 들어 있나?
– 메소드(method)가 한 개 이상 들어 있음

3. 메소드 안에는 무엇이 들어 있나?
– 처리할 일을 지시하는 내용이 들어있음
-> 일련의 명령문이 들어 있음

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

콘솔프로그램을 작성하고자 한다면 다음과 같이 하면 된다.

5. Main함수를 가지고 윈도우 프로그램을 실행하려면?
1) Application.Run 메소드를 이용

프로그램을 끝낼 때는 Application.Exit()라고 하면 된다.
2) 폼의 ShowDialog메소드를 이용

3) 폼의 Show메소드를 이용

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

7. 그렇다면 클래스는 어떻게 설계해야 하는가?
– 클래스를 설계할 때믄 그 클래스 유형으로부터 생성되는 객체에 대해 생각한다.
객체에서 아는 것 -> 인스턴스 변수
객체에서 하는 것 -> 메소드
– 이 클래스가 무엇을 할 것인가(역할-> 메소드)를 먼저 생각한다.

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

8. 점(.) 연산자
– 클래스 내부의 상태와 행동을 어떻게 참조/호출하는가?
– 점(.) 연산자는 객체의 상태(인스턴스 변수)와 행동(메소드)을 접근할 수 있게 해주는 역할을 한다.

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

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

– 메시지 = 참조변수 + 점(.)연산자 + 메소드