오브젝트 12장

송은우·2022년 10월 18일
0

TIL

목록 보기
31/61

상속의 목적은 재사용이 아님. 타입 계층을 구조화 하기 위해 사용해야 한다.
인스턴스를 한 그룹으로 묶기 위함이 상속이다.

다형성
많은 형태를 가질 수 있는 능력
유니버설 다형성
매개변수 : 제네릭 프로그래밍
포함 : 수신한 객체의 타입에 따라서 실제 수행되는 행동이 달라지는 능력. subtype 다형성
가장 일반적임 따라서 포함을 대부분 다형성이라고 함
일반적으로 상속을 사용함.
상속의 목적은 서브타입 계층 구축이 목적이다.
재사용의 목적이 아닌 일반화, 구체화의 목적을 위함이다

임시 다형성
오버로딩 : 하나의 클래스 안에 여러 메서드
강제 : 자동 타입 변환, 강제 타입 변환 을 이용해 다른 타입을 섞는 느낌. "3"+3 은 "33"으로 연산됨. 이때 오버로딩과 같이 있다면 조금 주의 필요 어떤게 호출될 지 판단하기 어려움

업캐스팅 : 부모 클래스의 타입에 자식 클래스가 할당되는거
다운 캐스팅 : 부모 클래스를 명시적인 변환으로 자식 클래스로 바꾸는 것
동적 메서드 탐색
동적 바인딩,late binding, 지연 바인딩 : 시스템이 메시지를 처리할 적절한 메서드를 실행 시점에 결정한다
정적 바인딩 : 컴파일타임에 미리 정해지는 것. 특정한 그 코드만 실행 가능함
self : self라고하는 임시 참조가 먼저 만들어짐. 그 메시지를 수신한 객체를 가리킴. 상속 계층의 역방향으로 탐색하고, 메서드를 찾으면 종료
super : public 이나, protected의 인스턴스, 메서드에 접근하는 방법

동적 메서드 탐색은 자동적인 메시지 위임을 의미한다.
동적인 문맥을 사용한다.

메서드 오버라이딩이 일어나면 부모의 메서드가 감춰지는 것처럼 보인다.
오버로딩은 서로 공존한다.
c++는 부모 클래스에 선언된 이름이 동일한 메서드를 숨겨서 클라이언트가 호출하지 못하게 막는데, 이를 이름 숨기기(name hiding)이라고 한다.

self 객체때문에 문제가 발생하기도 한다.
self는 현재 객체를 가리키기 때문에, self를 통해서(생략해서) 메서드를 호출했을 경우 상속받은 자식의 메서드가 대신 호출 될 수 있다.
그래서 자식을 다 본 후에야 이해할 수 있을 수가 있다.

동적 타입에서는 method_missing에러도, 자기만의 핸들러가 나올 수 있다.
도메인-특화 언어 동적 리셉션

self와 super 참조
self 는 자식부터 보고, super는 자기 부모부터 본다.

포워딩, 위임. self를 전달하지 않는 경우 포워딩. self를 전달하는 것은 위임
프로토타입 기반 언어는 무조건 위임만을 사용한다.

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글