클래스는 변수와 메소드등이 하나로 묶인 특수한 형태의 자료형이다. 클래스는 객체지향 프로그래밍에 있어서 매우 중요한 요소중 하나이며 이를 이해하려면 개체지향 프로그래밍에 대한 이해가 먼저 필요하다
개체지향 프로그래밍은 모든 프로그래밍 요소를 객체로 두고 이 객체의 상호작용을 기반으로 프로그래밍하는것을 의미한다.
객체지향 언어는 이런 특이점이 있다
↑WorkItem이 object를 상속했고 ChangeRequest가 WorkItem을 상속했다.
클래스는 다른 클래스로부터 기능을 받아서 새로운 클래스가 될수 있다. 상속받는 클래스는 원본 클래스의 시작자,종료자 보호되는 변수등을 제외한 나머지 구성요소를 전부 받아온다.
이를 통해 필요한 만큼만 코드를 수정해서 사용할수 있으며 확장이 매우 유연해진다.
객체의 접근에 대해서 제한한다. 객체 내부에서 외부에서 볼수있는것과 볼수 없는것을 정의하고 이에 대해서 숨긴다.
또한 객체 내부에서 어떠한 일이 일어나는지에 대해서 감추고 메세지만을 통해서 객체간의 의사소통이 이루어진다. 이를 통해서 외부에 미치는 영향을 최소화한다.
하나의 메소드나 객체가 여러가지 기능을 가질수 있다. 메소드,연산자 오버로딩등이 다형성을 위한 대표적인 기능이다.
이같은 구성요소들은 객체지향 프로그래밍의 핵심이다.
클래스를 생성할때 쓰는 new 키워드는 새로운 인스턴스를 만드는 키워드이다 new키워드를 쓰면 클래스의 생성자를 불러온다. 클래스는 기본적으로 참조형식이기 때문에 생성과 동시에 동적인 메모리 할당이 발생한다.
다음 코드에서 각각의 구성요소는 다음과 같다
namespace ConsoleApp1
{
public class test
{
void tell_me()//메소드
{
Console.WriteLine("hello Test");
}
public test()//생성자
{
tell_me();
}
}
class program
{
static void Main(string[] args)
{
test Test = new test();//개체 선언 test에 기반을 둔 Test객체를 선언함.
}
}
}
클래스의 모든 구성요소는 캡슐화를 위해서 접근 한정자가 달릴수 있다. 위에 있는 public 이 접근 한정자이며 C#에서 제공하는 접근 한정자는 다음과 같다.
접근 한정자는 캡슐화에 있어서 가장 중요한 요소중 하나이며 보안적으로도 매우 중요한 부분이다.
메소드는 기본적으로 함수라고도 하며 메소드는 특정한 코드를 묶어놓은 묶음에 가깝다. 메소드의 구성은 다음과 같다
한정자 반환 형식 메소드_이름 (매개 변수들)
{
실행시킬 코드
return 반환할 객체;
}
생성자는 해당 클래스와 같은 이름을 지는 메소드로 해당 클래스가 생성될때 같이 실행되는 코드가 들어가 있다. 위의 코드에서 public test가 안에있던 tell_me() 메소드를 실행시켜서 hello Test라는 결과값이 나온것처럼 선언만 해도 바로 실행이 된다
만약 생성자를 따로 만들지 않았다면 C#에서는 암시적으로 생성자를 생성해서 처리한다.
This는 기본적으로 현재 인스턴스를 가리키는 키워드다. 같은 이름의 멤버가 있어도 해당 클래스의 객체를 가리키고 있음을 한정한다.
또한 객체를 통째로 넘겨주거나 인덱서를 선언할때도 쓰일수 있다.
출저