접근 한정자

CJB_ny·2022년 7월 25일
0

C#

목록 보기
12/24
post-thumbnail

접근 한정자

객체지향 OOP의 3대 특성

  • 은닉성

  • 상속성

  • 다형성

접근 한정자 종류

  • public : 잘 알제? => 공개적이다.

  • protected : 클래스 외부에서 접근 불가, 파생클래스는 접근 가능.(자식은 가능)

  • private : 클래스 내부에서만 접근 가능. 파생 클래스도 접근 불가.

  • internal : 같은 어셈블리에 있는 코드에서만 public으로 접근가능. 다른 어셈블리에 있는 코드에서는 private과 같은 수준의 접근성을 가짐.

  • protected internal : 같은 어셈블리에 있는 코드에서만 protected로 접근 가능. 다른 어셈블리에 있는 코드에서는 private과 같은 수준의 접근성을 가진다.

  • private protected : 같은 어셈블리에 있는 클래스에서 상속받은 클래스 내부에서만 접근이 가능하다.

접근 한정자를 수식하지 않은 클래스는 default 값이 private이다.

상속한 클래스 객체 생성과정

class Child : Parent
{

}

이러한 자식 클래스가 있다고 치면,

자식 클래스 객체를 생성 할 때, 부모 클래스의 생성자를 호출한 후에 자신의 생성자를 호출하고,

객체가 소멸될때에는

자식클래스 -> 부모 클래스 순서이다.

자식 생성자 -> 부모 생성자에 인수 전달

class Chlid : Parent
{
	public Child (string name, int age)
    {
    }
}


Child c1 = new Child("KNY", 26);

이럴경우 Parent에다가 name, age 어떻게 전달 해 줄수 있을까?

"base" 키워드 사용 => "기반 클래스(부모)"를 가르킨다.

"this"는 자기자신

class Base
{
	public Base(string name, int age) {}
}

class Child : Base
{
	public Child(string name, int age) : base(name, age)
    { }
}

이런식으로 사용한다.

또한 상속하기 싫을 경우

sealed class Base
{
	public Base(string name, int age) {}
}

class Child : Base
{
	public Child(string name, int age) : base(name, age)
    { }
}

"sealed" 키워드 사용

클래스 끼리 형식변환 is, as

class Mammal
{}

class Dog : Mammal
{}

class Cat : Mammal

이렇게 기반클래스와 파생클래스 관계일 경우

Mammal mammal = new Mammal();

mammal = new Dog();

이렇게 가능하고

is, as 를 사용하여 우아하게 형식 변환이 가능함.

is보다는 as사용을 권장한다.

is : 객체가 해당 형식에 해당하는 검사하여 bool값 반환함.

as가 코드를 관리하기가 수월하다.

Mammal m1 = new Mammal();

Cat cat = m1 as Cat;

만약 형식 변환에 실패 했다면 cat은 null값을 가진다.

❗ 단, 참조 형식에 대해서만 사용이 가능하다 ❗

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글