상속

· Game/Unreal
상속과 인터페이스 상속과 인터페이스의 공통점은 다형성이다. 상속은 자주 사용하지만 인터페이스는 자주 사용하지 않았다. 프로젝트를 진행하던 중 적절한 사용상황을 발견하여 기록한다. 프로젝트 중, NPC와 Drop Item 모두 캐릭터와 상호작용하는 경우가 있다. NPC는 대화를 통해 퀘스트를 주고, Drop Item은 Inventory에 Item을 추가한다. 둘 다, 상호작용하는 Actor이기 때문에 하나의 부모를 가지고 Interact 함수를 구현한 뒤 상속받게 하였다. 하지만, NPC를 구현하다 문제가 발생했다. 올바르게 동작하지만, 원하지 않는 상속이 이루어지게 되는 문제였다. 예를 들어, 부모 클래스인 InteractiveActor에서 Item에 관한 정보를 가지고 있다고 가정했을 때, NPC는 I..
파생 클래스의 이름은 기본 클래스의 이름을 가린다. public 상속에서는 이런 이름 가림 현상은 바람직하지 않다. 가려진 이름을 다시 볼 수 있게 하는 방법으로, using 선언 혹은 전달 함수를 쓸 수 있다. 상속된 이름이 숨겨지는 것을 피해라 상속과 관련된 이름 가리기 현상을 보기 전, 이해를 돕기 위해 기본 변수에 대한 이름 가리기 규칙을 살펴보자. int x; void someFunc() { double x; std::cin >> x; } 값을 읽어 x에 넣는 위의 문장에서 실제로 참조하는 x는 전역 변수 x가 아니라 지역 변수 x이다. 이유는 안쪽 유효범위에 있는 이름이 바깥쪽 유효범위에 있는 이름을 가리기 때문이다. 컴파일러가 someFunc의 유효범위 안에서 x라는 이름을 만나면, 일단 그..
public 상속의 의미는 is-a이다. 기본 클래스에 적용되는 모든 것들이 파생 클래스에 그대로 적용되어야 한다. 왜냐하면 모든 파생 클래스 객체는 기본 클래스 객체의 일종이기 때문이다. public 상속 모형은 반드시 is-a public 상속은 is-a이다. 이 사실을 무조건 기억해야 한다. B(Base) 클래스로부터 D(Derived) 클래스를 파생시켰다면, D 타입으로 만들어진 모든 객체는 B타입의 객체이지만, 그 반대는 되지 않는다. 다시 말해 B는 D보다 더 일반적인 개념을 나타내며, D는 B보다 더 특수한 개념을 나타낸다. B타입의 객체가 쓰일 수 있는 곳에는 D타입의 객체가 쓰일 수 있다. D타입의 모든 객체는 B타입의 객체도 되기 때문이다. C++은 public 상속의 문법은 다음과 같..
· Kotlin
Inheritance 객체지향적인 언어의 장점 중 하나는 바로 상속이다. 코틀린에서의 상속을 알아보자. 코틀린의 최상의 클래스는 Any이다. 클래스에 상위 타입을 선언하지 않으면 Any가 상속된다. class Ex1 //암시적 Any상속 class Ex2: Any() //명시적 Any상속 Any는 java에서 Object와 비슷해 보이지만 조금 다르다. equals(), hashCode(), toString()만 존재한다. 상속을 해줄 클래스가 open을 해줘야 상속이 가능하다. 또한 부모 클래스에 기본 생성자가 있다면 호출하여 초기화 가능하다. 코틀린에서 클래스는 기본적으로 final이다. 따라서 상속을 원한다면 open을 반드시 적어야 한다. open class parent(firstName: Str..
· Python
클래스와 객체 - 객체: 데이터와 이를 처리하기 위한 메서드의 묶음 - 클래스: 객체를 만드는 형틀 혹은 포멧 클래스로부터 만들어지는 객체를 그 클래스의 인스턴스(instance)라 한다. 클래스 정의하기 class라는 키워드로 시작하고 __init__( )라는 생성자 메서드를 가진다. 객체 생성 클래스 이름으로 호출하면 객체가 생성된다. 프라이빗 멤버와 퍼블릭 멤버 클래스 안에서는 크게 두 가지 멤버가 존재한다. 하나는 클래스 안에서만 접근 가능한 프라이빗 멤버, 다른 하나는 클래스 안과 밖에서 모두 접근 가능한 퍼블릭 멤버 멤버 앞에 __키워드를 붙이면 프라이빗 멤버가 된다. 클래스 멤버 클래스의 메서드 밖에서 선언한 변수로 해당 클래스에서 관리하는 멤버이다. 클래스 이름으로 접근해야 하며 객체로 접..