본문 바로가기

C#

C# 클래스

 

3.1 클래스

 클래스(Class)?

- 클래스는 데이터와 처리를 모아 놓은 것으로 새로운 데이터 타입을 만드는 데이터 타입 생성기라고 합니다.

 

- 위의 그림은 Person이라는 class를 나타내고 있습니다. Person(사람)에는 age(나이), weight(몸무게), height(키)...등 데이터 타입이있습니다. 간단하게 변수라고 생각하시면 됩니다. 이 데이터 타입에 값을 넣을 수 있습니다. age라는 데이터 타입에는 나이를 상수 값으로 넣을 수 있겠죠↗?  

 클래스로 데이터 타입 만들기





- Person 클래스의 메모리를
생성
하려면 person sister = new person();  <- 처럼 new 연산자를 사용해야만 합니다. 

 클래스의 구성요소

- 클래스가 대단해 보이기는 하지만 딱! 두가지로 나눌 수 있습니다. 변수와 함수로 말이죠. 클래스의 내부에 존재한다는 의미에서 변수와 함수를 클래스의 멤버(Membe)를 붙여 멤버 변수, 멤버 함수라고 부르기도 합니다. 

 클래스 내에 함수 삽입

이번에는 클래스에 변수와 함수 두 가지 모두를 삽입해 보겠습니다. 클래스에서 변수는 단순히 데이터의 보유라는 정적인 측면을 가지고 있지만 함수로 인해 기능적인 측면을 가질 수 있습니다.

 
 - 위의 예제는 단순히 두개의 값을 더해서 결과값을 출력하는 프로그램입니다. 클래스는 ublic int a; public int b; 멤버 필드와
public int sum(int x, int y) 멤버 함수를 포함하고 있습니다. 위에서 선언한 멤버 함수에서 x와 y를 합을 이용해 s = test.sum(3.5);로

3과 5를 더한 값을 구해 출력할 수 있습니다.

 Public 과 Private

- public이 붙은 멤버는 해당 클래스 이외의 객체에서도 엑세스할 수 있습니다.
- private를 붙이면 중요한 데이터를 함부로 변경하는 것을 방지하기 위해 다른 객체에서 액세스할 수 없도록 할 수 있습니다.
- public, private 둘 다 적지 않으면 자동으로 private로 설정됩니다.



 

 속성(Property)

- 속성은 객체나 클래스의 필드(field)에 접근하는(읽거나 기록하는) 수단을 제공하는 클래스의 멤버입니다. 속성을 통해 필드를 읽거나 기록할 수 있게됩니다.
- 속성은 get액세서와 set액세서로 구성이 되는데 get액세서는 필드에 값을 반환하고 set 액세서는 외부에서 들어오는 값을 얻어내 필드에 값을 대입합니다.
- set 접근자는 멤버에 쓰기를 제공하고 get 접근자는 읽기를 제공해줍니다.
- value는 set 접근자의 매개변수로 value를 사용해서 외부에서 들어오는 값을 얻어낼 수 있습니다.

속성의 정의입니다.


여기서 value는 대입 값을 받아서 넣어 줄 수 있게 합니다.

 
3.2 메모리

 변수 , 객체 그리고 인스턴스

- 값타입은 변수의 이름을 선언함과 동시에 메모리를 할당해줍니다.

- 참조타입(클래스)는 변수의 선언과 변수에 대한 메모리 할당이 분리되어 있습니다.
이 둘은 이러한 차이가 있지만 둘다 변수라고 할 수 있습니다.
- Class에서 Person sister; 는 객제 변수 선언으로 변수의 이름을 선언한 것입니다. 단순이 이름만 선언한 것이지 메모리는 없습니다.
  Person sister = new person(); 은 new라는 연산자를 사용해 변수이름을 선언함과 동시에 메모리를 할당한 것입니다.
- 값타입으로 변수를 만들어도 변수라고 하고, 클래스로 변수를 만들어도 변수하고 부르지만 클래스를 이용해서 만든 변수를 다른 변수들과 구분하기 위해서 객체 또는 인스턴스라는 용어를 사용합니다.

 



 값타입(Value Type)과 참조타입(Reference Type)의 메모리 생성의 차이

- 값타입의 메모리는 스택(Stack) 영역에 생성되고 참조타입(클래스)은 스택(Stack), 힙(Heap)영역에서 생성됩니다.

 
위의 그림에서 나타난 것처럼 값타입의 int a는 스택에 4바이트를 자리잡고 있습니다. person sister 참조값 자체를 저장하기 위한 메모리는 스택에서 생성됩니다. 그리고 new연산자를 이용하여 메모리를 생성하는 순간 힙 영역에 객체가 필요로 하는 만큼의 메모리(실제 객체의 메모리)를 생성하고 그 참조값을 스택에 존재하는 person sister이 가지게 됩니다.

 Value Type과 Reference Type의 비교 

값타입과 참조타입을 구분하는 방법은 3가지가 있습니다.
첫번째 메모리를 가리키는 방식 : 값타입은 메모리를 직접 가리키고 참조타입은 메모리를 참조를 통해서 가리킵니다.
두번째 값복사 : 값타입에서는 메모리에 존재하는 값들이 통째로 복사되고 참조타입은 값을 복사하더라도 참조가 복사되기 때문에 메모리 자체는 그대로 있습니다.
세번째 메모리 생성 : 2.에서 설명했듯이 값타입은 변수의 선언과 동시에 메모리를 생성하고 참조타입은 변수의 선언과 메모리 생성이 분리 되어 있으므로 참조 변수를 먼저 선언한 후 new 연산자를 사용하여 메모리를 생성합니다.

 C#에서의 구조체와 클래스의 차이
- 클래스와 구조체의 유사점은 둘다 데이터 타입 생성기 라는 것이고,
- 클래스와 구조체의 차이점은 구조체는 값타입이며 클래스는 참조타입이라는 것입니다.
- 구조체와 new관계 : 구조체에 초기값을 할당할 방법을 제공하기 위해서 new 키워드를 사용하지만 값타입인 것은 변함이 없습니다.





'C#' 카테고리의 다른 글

C#의 배경  (0) 2012.01.17