[C#] 클래스 심화(Class Advanced) #01

JanMatny·2024년 11월 19일
0

C#

목록 보기
8/15

클래스 심화 과정 #01


목차

1. 정보 은닉과 캡슐화
2. 클래스 상속
3. 다형성
4. 추상 클래스


정보 은닉과 캡슐화

정보 은닉

클래스 외부에서 클래스의 맴버 변수에 직접 접근하지 못하도록 맴버 변수를
private으로 선언하는 것
(변수는 데이터를 저장 및 사용하기 때문에 직접 접근할 수 있도록 할 경우 들어가면 안되는 값을 넣어 오류가 발생할 수 있다.)

캡슐화

정보은닉으로 인해 클래스 외부에서 접근 불가능한 맴버 변수의 값을 조작할 수 있도록 생성하는 멤버 함수

정보 은닉과 캡슐화의 예시


상속(Inheritance)

유산 상속과 마찬가지로 유산을 물려주는 부모(기반) 클래스가 자신의 재산(public, protected 한정자로 정의된 변수와 메소드)을 유산을 상속 받는 자식(파생) 클래스에게 제공

상속을 받는 이유

여러 클래스에 동일하게 작성되는 내용은 부모 클래스로 작성한 후
자식 클래스가 상속 받아 사용하면 코드 간결화에 도움이 된다.
형식을 통일해 하나의 그룹(배열, 리스트 등)으로 관리할 수 있도록 한다.(업 캐스팅, 다형성 등의 추가적인 기법 필요)

base 키워드

  • this 키워드가 자기 클래스 내부의 변수, 메소드에 접근할 때 사용하는 키워드라면,
    부모(기반) 클래스의 변수나 메소드에 접근할 때 사용하는 키워드가 base

다형성(Polymorphism)

다형성은 객체가 여러 가지 다양한 형태를 가지는 것을 뜻한다.
좀 더 정확하게는 상속을 받는 자식 클래스가 다양한 형태를 가지게 된다.

다형성의 첫 번째 과정 [업 캐스팅(Up Casting)]

부모 클래스의 참조 변수에 자식 클래스의 객체를 참조하는 것이 가능하다.
( 부모 클래스의 객체 변수에 자식 클래스 메모리 할당이 가능하다.)
부모 클래스와 자식 클래스 사이에 형 변환이 가능하다.

다형성의 두 번째 과정 [메소드 오버라이딩]

메소드 오버라이딩은 업 캐스팅으로 형식이 통일되었을 때 부모 클래스의 메소드가 아닌 자식 클래스의 메소드가 호출되도록 하는 것이다.

사용하는 방법

  • 부모와 자식 클래스에 동일한 이름의 메소드가 있을 때
    부모 클래스는 virtual로 메소드를 정의하고
    자식 클래스는 override로 메소드를 다시 정의로 메소드를 다시 정의
    private으로 선언된 메소드는 오버라이딩이 불가능하다.

업 캐스팅(Up Casting)을 사용하는 이유

  • 업 캐스팅을 사용하는 이유는 형식을 통일하기 위해서 사용한다.
  • 형식 통일이 필요한 이유는 코드를 간결하게 하고, 코드의 수정을 최소화하면서도 다양한 경우에 대비하기 위함이다.
  • 형식이 통일되면 배열, 반복문 등을 이용해 동시에 작업을 시키는 것이 수월하다.

EX) 플레이어가 다양한 종류의 적을 공격할 때

  • 코드는 플레이어가 다양한 종류의 몬스터를 공격하는 예제로, 적의 종류는 고블린, 슬라임, 드래곤이 있고 각각 TakeDamage 메소드를 갖고 있다.
  • 플레이어 클래스에 적을 공격하는 Hit 메소드를 정의하였는데, 적의 종류가 3종류이기에 메소드 오버로딩으로 세 가지 버전의 Hit 메소드를 정의하였다.

부모 클래스와 자식 클래스 사이의 형 변환

예시에 사용될 코드

case 01 : 업 캐스팅 가능

case 02 : 다운 캐스팅 가능

case 03 : 다운 캐스팅 불가능

  • 앞의 "case 03"과 같은 경우 컴파일 할 때는 오류가 발생하지 않고,
    프로그램을 실행했을 때 오류가 발생한다.

  • 프로그램 실행 단계에서 형 변환이 가능한지,
    형 변환에 성공했는지 확인하는 is와 as 연산자

  • is 연산자 : 객체가 해당 형식에 해당하는지 검사한 후 그 결과를 bool 값으로 반환
    (값, 참조 형식 모두 사용 가능)

  • as 연산자 : 형식 변환 연산자와 같은 역할로 형 변환이 가능하면 형 변환을 해서
    인스턴스를 반환하고, 형 변환에 실패하면 null을 반환한다.
    (참조 형식에만 사용 가능)


추상 클래스

추상 클래스란?

추상 메소드(정의는 있지만 구현된 내용이 없는)를 포함하고 있는 미완성된 클래스

추상 메소드란?

  • 한정자, 반환 형식, 메소드 이름, 매개 변수 까지만 정의하고,
    메소드가 호출 되었을 때 어떤 행동을 하는지 내용이 없는 메소드

추상 클래스 특징

  • new 연산자를 이용해 클래스 인스턴스를 생성할 수 없고,
    추상 클래스를 상속 받은 자식 클래스에서만 구현 후 사용 가능
  • 추상 메소드와 추상 프로퍼티를 정의할 수 있다.

추상 메소드 특징

  • 추상 메소드는 추상 클래스에서만 정의할 수 있다.
  • 추상 메소드의 접근 지정자는 public or protected 중 하나로 정의한다.
  • 추상 메소드를 정의할 때 static, virtual을 사용할 수 없고,
    abstract 키워드를 사용해서 정의한다.
  • 추상 메소드는 구현 내용이 없고, "이런 메소드를 사용할 것이다."
    "이런 메소드를 구현해야 한다!"라고 자식 클래스에게 구현을 강제하기 때문에
    메소드 내용이 없고, 중괄호가 아닌 세미콜론(;)을 사용한다.

추상 클래스, 메소드 사용 이유

  • 클래스를 상속 받는 자식 클래스가 메소드 오버라이딩을 사용할 때
    자식 클래스에서 "무조건" 메소드를 구현하도록 하기 위해 사용
  • 앞에서 배운 메소드 오버라이딩의 가상 메소드(virtual)는 자식 클래스에서 메소드를 구현하지 않아도 문제가 없기 때문에 강제성을 주기 위해 사용
profile
코딩 공부용 벨로그

0개의 댓글