[C#]09.클래스 꼭 알고가자 Part1
- 프로그래밍 언어 - C#
- 2018. 12. 2. 21:03
안녕하세요 유랑입니다.
이번 시간에는 C#에서 가장 핵심이라고 할 수 있는 클래스에 대해서 배워보겠습니다.
객체지향언어에 꼭 나오며, 지난 시간에 조금씩 써왔었습니다.
1. 클래스
1-1) 클래스의 선언과 객체의 생성
클래스를 이야기하려면, 객체에 대해서 알아야 합니다.
객체는 자동차, 파일, 연필 등 모든 물체를 뜻합니다.
우리는 이런 객체의 특징들을 정리해 코드화 하여야 합니다.
즉, 클래스에 객체의 색깔과 기능 등을 정리해 도면도를 이용하듯 생성이 가능하답니다.
설명이 너무 길었군요. 코드를 통해서 알아보겠습니다.
고양이라는 객체를 Class로 정의하여, Cat kitty = new Cat();의 형태로 객체를 만들어낸답니다.
생성하고 각각의 색깔과 이름을 정의해 줬어요.
1-2) 생성자와 종료자
객체는 생성자에 의해 만들어지고 종료자에 의해 파괴됩니다.
생성자를 통해서 원하는 초기값을 설정 가능합니다.
종료자는 가비지 컬렉터가 알아서 객체를 소멸시켜주니 되도록이면 구현하지 마세요.
1-3) 정적 필드와 메소드
Class 사이에서 동일한 변수나 메소드를 사용할 경우 어떻게 최소화할 수 있을까요?
static은 해당 클래스가 처음으로 사용될 때 계속 동일한 메모리에 남아있기에 공유가 가능합니다.
그대신 너무 많은 static 남용은 성능 저하의 원인이 됩니다.
1-4) 객체 복사하기
클래스는 태생이 참조 형식이기 때문에 객체를 복사할 때
복사를 수행하는 코드를 만들어야 합니다.
1-5) this 키워드
this는 객체가 자신을 지칭할 때 사용되는 키워드입니다.
객체 외부에서 사용된 필드나 메소드의 이름이 객체 내부와 동일할 때
이러한 모호성을 풀 수 있습니다.
1-6) this() 생성자
메소드나 필드값 뿐만 아니라 생성자도 가리킬 수 있는데
그게 바로 this()입니다.
1-7) 접근 한정자
코드를 작성하다보면 public으로 선언하고 싶으실 때가 많으실거에요.
하지만 public으로 쓰면 외부에 노출되어 중요한 기능까지 변경이 가능하게 되는 위험부담이 있어요.
C#에서 제공하는 접근 한정자는 모두 여섯 가지이며, 다음과 같습니다.
만약 접근 한정자 선언을 하지 않으면 자동으로 private로 지정된다고 하네요.
- public => 클래스의 내부/외부 모든 곳에서 접근할 수 있습니다.
- protect => 클래스의 외부에서는 접근할 수 없지만, 파생 클래스에서는 접근이 가능합니다.
- private => 클래스의 내부에서만 접근할 수 있습니다. 파생 클래스에서도 접근이 불가능합니다.
- internal => 같은 어셈블리에 있는 코드에서만 public으로 접근할 수 있습니다.
- protected internal => 같은 어셈블리에 있는 코드에서만 protected로 접근할 수 있습니다.
- private protected => 같은 어셈블리에 있는 클래스에서 상속받은 클래스 내부에서만 접근이 가능합니다.
1-8) 상속하기
클래스를 쓰다보면 다른 클래스로부터 유산을 물려받을 수 있다는 소리를 들으셨을 거에요.
가족도 아니고 유산이라닛?!
객체 지향 프로그래밍에서는 물려받는 클래스(파생 클래스 or 자식클래스)가
유산을 물려줄 클래스(기반 클래스 or 부모 클래스)를 지정합니다.
이걸 이용하면 부모 클래스의 기능들을 가져와 쓸 수 있어요.
- 객체가 생성될 때는 기반 클래스 => 파생 클래스 순서로 생성자를 호출합니다.
- 객체가 소멸될 때는 파생 클래스 => 기반 클래스 순서로 종료자를 호출합니다.
1-9) 형식 변환(is와 as)
기반 클래스와 파생 클래스 사이에서는 족보를 오르내리는 형식 변환이 가능하며,
파생 클래스의 인스턴스는 기반 클래스의 인스턴스로서도 사용할 수 있습니다.
- is => 객체가 해당 형식에 해당하는지를 검사하여 그 결과를 bool 값으로 반환합니다.
- as => 형식 변환 연산자와 같은 역할을 합니다. 다만 형변환 연산자가 변환에 실패하는 경우 예외를
던지는 반면에 as 연산자는 객체 참조를 null로 만드다는 것이 다릅니다.
2. 마무리
오늘은 클래스에 대해서 배워보았습니다.
클래스는 객체 지향 언어라 어렵고, 생소한 단어도 많으셨을 거에요.
다음 시간도 마찬가지로 클래스를 다룰텐데 꼭 알아가셨으면 합니다.
오늘도 고생하셨습니다.
감사합니다.
수업자료: https://github.com/YouRang12/-Tistory-CShop---Basic