본문 바로가기
개발자가 되어보자..공부공부/개발 일지

C# 문법 복습2. (Class, 생성자, 접근제한자, 속성, 상속, as/is 키워드)

by 묭묭이와소담이 2022. 12. 2.
반응형

2. 고양이 감정 표현(클래스 선언, 생성자, 접근제한자, 속성)

 

Class는 일종의 설계도라고 생각하면 편하다.

예를 들어..

 

자동차를 만드는 것을 가정했을 때,

 

자동차 설계도 = Class

자동차 = Object

구매한 자동차 각각 = Instance 

 

이며.. 자동차 설계도로부터 자동차를 만들어 내는 것을 객체화, 인스턴스화 라고 한다.

설계도에는 자동차색, 자동차옵션 등 여러가지 변수를 설정, 저장 할 수 있다.

 

Visual Studio에서 우리가 자연스럽게 사용하는 여러가지 기능들 또한 이미 생성된 Class라고 볼 수 있으며, 프로젝트를 진행하며 내가 원하는 기능을 가진 Class를 직접 생성하여 사용하는 것이 효율적이다. - 추후 수정에 용이하다.

(List배열, Random, Math 등도 기존에 만들어져 있는 Class이다.)

 

1) Class(클래스) 생성

- 1개의 프로젝트 내에 클래스를 생성해도 되고, 다른 파일에 클래스를 생성해도 된다.

class MyongClass

{코드블럭}

 

2) 클래스 선언

MyongClass Myong = new MyongClass();

                                                생성자

 

클래스는 사용자 정의 자료형이라고도 한다.

다른 자료형인 int 변수를 선언할 때와 마찬가지 방법으로 선언한다.

대신 int 처럼 1개의 변수만 저장하는 것이 아닌, 많은 데이터를 가진 class이기 때문에

메모리할당키워드인 'new'를 적어주어야 한다.

생성자는 사용자가 적어주지 않더라도 자동으로 생성이되고, ()안에 Class안에서 사용 될 변수들을 입력해주면 된다.

 

Class 내에서 변수를 선언할 때, Class 내부와 외부 변수사이를 명확하게 해주는 키워드가 있다.

this 키워드이다.

예를 들어,

 

public cat(string Name, int Age)

{ this.Name=Name;

this.Age=Age;}

 

Class 내에서 인스탄스변수와 매개변수는 같은 변수명이 가능하다.

하지만 인스탄스 변수에 값을 할당하여야 하는 경우에, this. 키워드를 사용하여 인스탄스변수임을 확실하게 해주는 것이다.

 

3) Class 내 변수(Field)의 속성

 

Class내의 함수를 Method라고 하고, Class내의 변수를 Field라고 한다. 

 

int Myong;

일반적인 변수 선언 방법이다.

 

public void MyongMethod()

{코드블럭}

일반적인 함수, Method의 선언 방법이다.

 

속성은 변수에 Method와 같은 코드블럭을 추가하는 것이다.

int Myong

{

get{ return = □}

set{코드블럭}

}

 

즉 {}안의 속성을 가진 변수를 생성하여 변수에 Method의 기능을 추가했다고 볼 수 있다.

 

get 은 method의 return과 같이 값을 반환하는 역할이다.

set은 새로운 값을 할당하는데 사용된다. (set을 적지 않는다면 '읽기전용'인 변수가 된다.)

set내의 매개변수는 항상 value로 표시한다.

 

 

4) 접근제한자

 

public > interanl > protected > private

접근성이 큰 순으로 나열하면 위와 같다. 

 

private

- 접근제한자를 입력하지 않는다면 자동으로 private로 설정이 된다.

pirvate가 설정되어 있으면 외부에서 접근(access)이 불가능하다.

외부로부터 보호하거나, 굳이 표시되지 않아도 되는 것들을 private로 설정하면 된다.

 

public

- 외부에서도 접근이 가능하다.

 

Internal

- Class 내에서의 접근제한자이며, Class내에서 접근제한자를 입력하지 않으면 자동으로 Internal로 설정이 된다.

내부클래스, 외부클래스, 파생클래스에서 접근이 가능하다.

 

protected

- 내부클래스, 파생클래스에서만 접근이 가능하다.

 


 

4. 입양리스트 심화 (클래스 상속, 가상 Method, is/as 연산자)

 

 

* 상속

상속은 Class간에 부모-자식 관계를 정의하는 작업이다.

프로젝트에는 1개의 Class만 생성 할 수 있는 것이 아니다.

여러 가지의 Class를 설정 할 수 있고, 그 중에는 비슷한 기능을 가진 Class들도 있을 것이다.

비슷한 기능을 가진 Class들을 각각 사용하는 것은 비효율적이다.

이런 중복되는 코드의 반복을 피하기 위해 사용한 것이 Class간의 상속이다. 

(함수 Method, 변수의 속성 등 모두 효율적인 프로그래밍 작업을 위한 것이다.)

 

예를 들어, 

 

Cat Class, Dog Class가 있다.

다른 특징이 있겠지만, 대체적으로 비슷한 Class일 것이다.

2가지 Class는 Animal Class를 부모로 하여 상속을 받게 할 수 있을 것이다.

 

class Animal 

{코드블럭}

 

class Dog : Animal

{코드블럭}

class Cat : Animal

{코드 블럭}

 

위 처럼 :(콜론)에 부모가 될 Class명을 적어주면, 자식 Class는 부모 Class로 부터 상속을 받는 것이 가능하다.

(단, public 또는 protected로 설정된 부분에만 접근이 가능하다.)

 

Class 내에서 this. 키워드 처럼,

부모 Class의 변수라는 것을 명확하게 해주는 키워드는 base. 이다.

 

* is/as 키워드

1) is 키워드

- 특정한 object가 어떤 class인지 확인하기 위해서 사용한다. (true or false)

 

myong is myongclass

 

myong이 myongclass에 해당된 객체가 맞다면 true값을 반환한다.

아니라면 false를 반환한다.)

보통 조건문과 함께 사용된다.

 

if(myong is myongclass)

{코드블럭}

 

2) as 키워드

- 자료형 변환을 할 때 사용한다. 

1개의 부모 Class에 여러 개의 자식 Class가 있을 수 있다.

Animal Class - Dog Class

                        Cat Class

 

이 때, 어떤 Class인지 지칭해 줄때.. 해당 Class의 자료형으로 변환해 줄 때 as를 사용한다.

 

if (item is Dog)

{(item as Dog).Bark();}

if (item is Cat)

{(item as Cat).Meow();}

item이 Dog Class가 true라면 Dog Class의 Bark()를 실행한다.

item이 Cat Class가 ture라면 Cat Class의 Meow()를 실행한다.

 

 

반응형

댓글