1. 정보 은닉과 캡슐화
2. 클래스 상속
3. 다형성
4. 추상 클래스
정보 은닉
클래스 외부에서 클래스의 맴버 변수에 직접 접근하지 못하도록 맴버 변수를
private으로 선언하는 것
(변수는 데이터를 저장 및 사용하기 때문에 직접 접근할 수 있도록 할 경우 들어가면 안되는 값을 넣어 오류가 발생할 수 있다.)캡슐화
정보은닉으로 인해 클래스 외부에서 접근 불가능한 맴버 변수의 값을 조작할 수 있도록 생성하는 멤버 함수
유산 상속과 마찬가지로 유산을 물려주는 부모(기반) 클래스가 자신의 재산(public, protected 한정자로 정의된 변수와 메소드)을 유산을 상속 받는 자식(파생) 클래스에게 제공
상속을 받는 이유
여러 클래스에 동일하게 작성되는 내용은 부모 클래스로 작성한 후
자식 클래스가 상속 받아 사용하면 코드 간결화에 도움이 된다.
형식을 통일해 하나의 그룹(배열, 리스트 등)으로 관리할 수 있도록 한다.(업 캐스팅, 다형성 등의 추가적인 기법 필요)
다형성은 객체가 여러 가지 다양한 형태를 가지는 것을 뜻한다.
좀 더 정확하게는 상속을 받는 자식 클래스가 다양한 형태를 가지게 된다.다형성의 첫 번째 과정 [업 캐스팅(Up Casting)]
부모 클래스의 참조 변수에 자식 클래스의 객체를 참조하는 것이 가능하다.
( 부모 클래스의 객체 변수에 자식 클래스 메모리 할당이 가능하다.)
부모 클래스와 자식 클래스 사이에 형 변환이 가능하다.다형성의 두 번째 과정 [메소드 오버라이딩]
메소드 오버라이딩은 업 캐스팅으로 형식이 통일되었을 때 부모 클래스의 메소드가 아닌 자식 클래스의 메소드가 호출되도록 하는 것이다.
사용하는 방법
- 부모와 자식 클래스에 동일한 이름의 메소드가 있을 때
부모 클래스는 virtual로 메소드를 정의하고
자식 클래스는 override로 메소드를 다시 정의로 메소드를 다시 정의
private으로 선언된 메소드는 오버라이딩이 불가능하다.
EX) 플레이어가 다양한 종류의 적을 공격할 때


예시에 사용될 코드

case 01 : 업 캐스팅 가능

case 02 : 다운 캐스팅 가능

case 03 : 다운 캐스팅 불가능

앞의 "case 03"과 같은 경우 컴파일 할 때는 오류가 발생하지 않고,
프로그램을 실행했을 때 오류가 발생한다.프로그램 실행 단계에서 형 변환이 가능한지,
형 변환에 성공했는지 확인하는 is와 as 연산자
is 연산자 : 객체가 해당 형식에 해당하는지 검사한 후 그 결과를 bool 값으로 반환
(값, 참조 형식 모두 사용 가능)as 연산자 : 형식 변환 연산자와 같은 역할로 형 변환이 가능하면 형 변환을 해서
인스턴스를 반환하고, 형 변환에 실패하면 null을 반환한다.
(참조 형식에만 사용 가능)
추상 클래스란?
추상 메소드(정의는 있지만 구현된 내용이 없는)를 포함하고 있는 미완성된 클래스
추상 메소드란?
- 한정자, 반환 형식, 메소드 이름, 매개 변수 까지만 정의하고,
메소드가 호출 되었을 때 어떤 행동을 하는지 내용이 없는 메소드
추상 클래스 특징
- new 연산자를 이용해 클래스 인스턴스를 생성할 수 없고,
추상 클래스를 상속 받은 자식 클래스에서만 구현 후 사용 가능- 추상 메소드와 추상 프로퍼티를 정의할 수 있다.
추상 메소드 특징
- 추상 메소드는 추상 클래스에서만 정의할 수 있다.
- 추상 메소드의 접근 지정자는 public or protected 중 하나로 정의한다.
- 추상 메소드를 정의할 때 static, virtual을 사용할 수 없고,
abstract 키워드를 사용해서 정의한다.- 추상 메소드는 구현 내용이 없고, "이런 메소드를 사용할 것이다."
"이런 메소드를 구현해야 한다!"라고 자식 클래스에게 구현을 강제하기 때문에
메소드 내용이 없고, 중괄호가 아닌 세미콜론(;)을 사용한다.추상 클래스, 메소드 사용 이유
- 클래스를 상속 받는 자식 클래스가 메소드 오버라이딩을 사용할 때
자식 클래스에서 "무조건" 메소드를 구현하도록 하기 위해 사용- 앞에서 배운 메소드 오버라이딩의 가상 메소드(virtual)는 자식 클래스에서 메소드를 구현하지 않아도 문제가 없기 때문에 강제성을 주기 위해 사용