C언어 기초 배우기

Class

클래스는 사용자 정의 데이터 타입으로, 데이터와 메소드를 내가 새로 정의한 데이터타입에 넣어 사용한다. 멤버 변수와 멤버 함수로 구성된다.
추상화된 결과를 클래스에 포함시키고 스스로 보호하는 것이 캡슐화이다.

Class 선언

class 클래스 이름
{
	접근 지정자 클래스 이름 {...} // 생성자
    접근 지정자 ~클래스 이름 {...} // 소멸자
    접근 지정자 데이터형 멤버 변수(필드); // 변수 선언
    접근 지정자 데이터형 메소드(){...}; // 메소드 선언
}

클래스이름 객체이름 = new 클래스이름();

접근 지정자

  • public : 누구나 접근 가능
  • protected : 상속 관계에 있을 때, 상속 받은 자식 클래스에서 접근 가능, 그 외에는 불가
  • internal : 같은 어셈블리(프로젝트) 내의 모든 클래스가 접근 가능
  • protected internal : protected + internal
  • private : 내 클래스 내부에서만 접근 가능하다.

생성자(constructor)

모든 변수는 선언이 되면 초기화를 해야하는데 객체 또한 본질적으로 변수이므로 선언되면 초기화해야 한다.
객체 생성시 초기화를 해주는 메소드가 생성자이다.

상속성

이미 완성된 클래스를 다른 클래스에 상속할 수 있는데, 부모 클래스로부터 상속을 받을 때 이름 뒤에 콜론(:)을 붙이고 부모 클래스의 이름을 적으면 해당클래스의 특성을 상속한 자녀 클래스를 정의할 수 있다.

다형성과 오버로딩, 오버라이딩

다형성

함수의 이름이 같더라도, 전달인자의 타입이나 개수에 따라 구분된다.

오버로딩

이름이 같은 함수라도, 전달인자 타입이나 개수가 다를 때, 오버로딩을 사용한다.

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;

위는 일반 메소드를, 아래는 람다식을 이용한 익명메소드를 사용한 방법이다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN