클래스는 사용자 정의 데이터 타입으로, 데이터와 메소드를 내가 새로 정의한 데이터타입에 넣어 사용한다. 멤버 변수와 멤버 함수로 구성된다.
추상화된 결과를 클래스에 포함시키고 스스로 보호하는 것이 캡슐화이다.
class 클래스 이름
{
접근 지정자 클래스 이름 {...} // 생성자
접근 지정자 ~클래스 이름 {...} // 소멸자
접근 지정자 데이터형 멤버 변수(필드); // 변수 선언
접근 지정자 데이터형 메소드(){...}; // 메소드 선언
}
클래스이름 객체이름 = new 클래스이름();
모든 변수는 선언이 되면 초기화를 해야하는데 객체 또한 본질적으로 변수이므로 선언되면 초기화해야 한다.
객체 생성시 초기화를 해주는 메소드가 생성자이다.
이미 완성된 클래스를 다른 클래스에 상속할 수 있는데, 부모 클래스로부터 상속을 받을 때 이름 뒤에 콜론(:)을 붙이고 부모 클래스의 이름을 적으면 해당클래스의 특성을 상속한 자녀 클래스를 정의할 수 있다.
함수의 이름이 같더라도, 전달인자의 타입이나 개수에 따라 구분된다.
이름이 같은 함수라도, 전달인자 타입이나 개수가 다를 때, 오버로딩을 사용한다.
int plus(int a, int b)
{
return a+b;
}
char plus(char a, char b)
{
return a+b;
}
double plus(double a, double b)
{
return a+b;
}
인터페이스는, 메소드의 목록만을 명세하고 기능은 구현하지 않은 사용자 정의 타입이다.
인터페이스 선언
접근지정자 interface 이름 : 기반 인터페이스
{
}
인터페이스를 상속하는 클래스
접근지정자 class 자식클래스이름 : 인터페이스
{
}
인터페이스는 본체가 정의되지 않고, 추상 메소드만을 가진다.
공동작업을 수월하게 할 수 있고, 기존의 기능을 추가하거나 수정하다기보단, 동일한 개념의 기능을 새롭게 구현하는 것이다.
static int Add(int a){
return a+1;
}
delegate int CalcDele(int x);
CalcDele d = x => x+1;
위는 일반 메소드를, 아래는 람다식을 이용한 익명메소드를 사용한 방법이다.