클래스 정리 (2)

컴퓨터 관련자료/C# 2014.04.16 13:07

11. 객체 지향 프로그래밍의 3대 특성

은닉성(캡슐화/encapsulation), 상속성(Inheritance), 다형성(Polymorphism)

 

12. 접근 한정자로 공개 수준을 결정할 수 있다.

public - 클래스 내/외부 접근가능

protected - 클래스 외부 접근불가, 파생 클래스에서 접근가능

private - 클래스 내부에서만 접근가능, 파생 클래스에서도 접근불가

internal - 같은 어셈블리에 있는 코드에 대해서만 public으로 접근가능

protected internal - 같은 어셈블리에 있는 코드에 대해서만 protected로 접근가능

 

* 접근 한장자로 수식하지 않은 클래스의 멤버는 무조건 private로 자동 지정된다.

 

13. 상속

class 파생 클래스 : 기반 클래스

{

   // 아무 멤버를 선언하지 않아도 기반 클래스의 모든 것을 물려받음.

   // 단, private으로 선언된 멤버 제외.

}

 

14. 기반 클래스의 생성자 -> 파생 클래스의 생성자 -> 파생 클래스의 소멸자 -> 기반 클래스의 소멸자 순으로 호출.

 

15. this 키워드는 자기자신을, base 키워드는 기반 클래스를 가리킨다.

 

16. 클래스의 상속을 막기 위해서는 sealed 한정자를 붙여주면 된다.

상속받으려는 시도가 발견되면 컴파일러에서 에러 발생.

 

17. 형변환을 위한 연산자 is, as

is - 객체가 해당 형식에 해당하는지 검사하여 결과를 bool 값으로 반환

as - 형식 변환 연산자와 같은 역할, 변환에 실패하는 경우 객체 참조를 null로 만든다. (참조 형식에서만 사용가능)

as 연산자를 사용하면 형식변환에 실패하더라도 코드가 점프하는 일 없이 코드 관리가 수월하다.

 

18. 다형성은 하위 형식 다형성의 준말. 상속받아 만들어진 파생 클래스를 통해 다형성을 실현한다.

 

19. 오버라이딩을 하기 위해서는 오버라이딩을 할 메소드가 virtual 키워드로 한정되어 있어야 하고

메소드에 override 키워드를 수식하여 사용한다. (private로 선언한 메소드는 오버라이딩 불가)

 

 

 

 

20. 메소드 숨기기란 CLR에게 기반 클래스에서 구현된 메소드를 감추고 파생 클래스에서 구현된 메소드만 보여주는것.

파생 클래스의 메소드를 new 한정자로 수식하면 된다. (생성자를 호출하는 new와 다른 녀석)

오버라이딩과는 다르다.

baseOrDerived.메소드이름(); // 기반클래스의 메소드 출력

 

21. 오버라이딩을 막기 위해서는 virtual로 선언된 가상 메소드를 오버라이딩한 메소드를 sealed 한정자로 수식하면 된다.

 

virtual로 선언한다는 것은 기반클래스를 오버라이딩 할 수 있게 만들었기 때문에

오버라이딩한 메소드는 파생클래스의 파생클래스에서도 자동으로 오버라이딩이 가능하다.

이를 막기 위해 오버라이딩한 메소드에 sealed 한정자를 사용한다.

 

 

22. 중첩 클래스는 클래스 내부에서 클래스를 선언하면 된다.

사용하는 이유는 (1) 클래스 외부에 공개하고 싶지 않은 형식을 만들려고

(2) 현재의 클래스의 일부분처럼 표현할 수 있는 클래스를 만들려고

...중첩 클래스에 private 접근 한정자를 사용하면 자신이 소속된 클래스 밖에서는 보이지 않는다.

 

23. 분할 클래스는 여러번에 나눠 구현하는 클래스. 구현이 길어질 경우 여러 파일을 나눠 구현할 수 있다.

(소스 관리의 편리를 위해) partial 키워드를 수식하고 클래스의 이름을 동일하게 설정한다.

 

24. 클래스는 실세계의 객체를 추상화하기 위한것, 구조체는 데이터를 담기 위한 자료 구조로 사용.

 

25. 클래스와 구조체의 차이

 특징

 클래스

구조체

 키워드

 class

struct

 형식

 참조 형식

값 형식

 복사

 얕은 복사

깊은 복사

 인스턴스 생성

 new 연산자와 생성자 필요

선언만으로 생성

 생성자

 매개 변수 없는 생성자 선언 가능

매개 변수 없는 생성자 선언 불가

(CLR이 기본값으로 초기화 해준다.)

 상속

 가능

모든 구조체는 System.Object 형식을 상속하는 System.ValueType으로부터 직접 상속받음

 

 

26. 끝

 

'컴퓨터 관련자료 > C#' 카테고리의 다른 글

클래스 정리 (2)  (1) 2014.04.16
클래스 정리 (1)  (1) 2014.04.15
오버로딩과 오버라이딩  (0) 2014.04.15
데이터형은 왜 쓰는걸까?  (0) 2014.04.06
C# 디버깅  (0) 2014.03.26
C# 데이터베이스를 이용한 주소록 만들기  (0) 2014.03.19
변수 출력  (0) 2014.03.19
.NET Framework의 개요  (0) 2013.10.28
log4net 오픈소스  (0) 2013.09.04
.NET Framework  (0) 2013.08.27
C# 시작  (0) 2013.08.27