추상클래스와 인터페이스 추상클래스(abstract class) 서로 기능이 비슷한 클래스의 공통부분을 묶을 때 사용 구현 메서드와 추상 메서드를 함께 가질 수 있다. 50% 디자인(설계), 50% 구현 extends keyword 사용 구현 메서드를 가질 수 있다. 인터페이스(interface) 서로 기능이 다른 클래스의 공통부분을 묶을 때 사용 100% 추상 메서드로 이루어진다. 100% 디자인(설계), 규약 implements keyword 사용 구현 메서드를 가질 수 없다. 다중상속 형태를 지원한다. final static 멤버변수를 가질 수 있다. 공통점 다형성을 보장하기 위해서 등장 객체를 생성할 수 없다. (new X) 하위 클래스에 의해 구현되어야 한다.(override : 재정의 필수) 부..
다형성 상속관계에 있는 클래스에서 상위클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체지향 원리(개념) 💡 override를 통해 하위 클래스를 접근할 수 있다. 💡 하위클래스의 동작방식을 알 수 없어도 상위클래스를 통해 하위클래스를 구동 시킬 수 있다. 다형성 이론의 전제조건(부모 클래스 활용) 상속관계가 되어야 한다. 객체생성을 upcasting으로 할 것(상위 클래스가 하위클래스에게 메시지를 보내야 하므로) 하위클래스가 반드시 재정의(override)해야 한다.(다형성이 보장되기 위해서는) 동적 바인딩을 통해 실현된다. 실행시점에서 사용될 메서드가 결졍되는 바인딩, 프로그램의 속도를 떨어뜨리는 원인이 된다.) 💡 다형성 배열 - 서로 다른 하위 클래스를 담을 수 있다.
문제점 Enum을 String으로 바꿀 때마다 새로 함수를 작성하고 새로운 enum을 파라미터로 생성해야 하기 때문에 쓸 때마다 코드가 늘어난다. 해결 static template function을 만들어서 헤더만 추가하면 쓸 수 있도록 한다. 추가 typeid.name()을 하면 'enum EnumValue'으로 만들어지기 때문에 RemoveFromStart()를 이용하여 'enum '을 잘라준다. enum은 BlueprintType 이여야 한다. 코드 template static FString GetEnumDisplayNameToString(T EnumValue) { FString EnumString = FString::Printf(TEXT("%hs"),typeid(T).name()); EnumStr..
Override(재정의) 상속관계에서 상속받은 하위 클래스가 상위 클래스의 동작을 수정하는 것 메모리에 부모와 자식 메서드가 공존하지만 결국에는 자식 메서드가 실행된다. 💡 동적 바인딩(호출될 메서드가 실행시점에서 결정되는 바인딩) 💡 프로그램의 속도가 떨어지는 원인이 되지만 이점이 더 많기 때문에 사용한다. 💡 Override를 통해 하위 클래스를 접근 할 수 있다. 자동 형변환 Object Castring 자식 → 부모 : 업캐스팅 부모 → 자식 : 다운캐스팅
상속→ 클래스의 설계(행위적인 측면) 수평적 설계 코드의 중복이 발생 새로운 요구사항에 대한 코드의 수정이 불가피하다. 관리하기가 어렵다. 수직적 설계(계층화, 상속구조) 수평적 설계의 단점을 극복할 수 있다. 확장을 쉽게 할 수 있다. 코드가 복잡해 진다. (이점이 많다)
class DataType 측면 : 새로운 자료형을 만드는(설계하는) 도구 = 모델링 도구 OOP(객체지향)측면 : 객채의 상태정보와 행위정보를 추출하여 캡슐화 하는 도구 Model : class를 Model이라고도 부른다. (역할이 정해지므로) 우리가 만드는 Model의 종류(3가지는 거의 대부분 만들게 되어 있다. 1 - 1. DTO(Data Transfer Object) 데이터 구조, 데이터를 담는 역할, 이동하기 위해서 데이터를 담는다. 1 - 2. VO(Value Obejct) 객체를 담아서 하나의 값(덩어리)으로 취급한다는 의미 DAO(Data Access Object) 데이터를 처리하는 역할(비지니스 로직), 데이터와 CRUD하는 역할 Utility(Helper Object) 도움을 주는 기..