구현부 재사용을 해야하는데 합성으로 처리하기 너무 번거로울 경우에만 쓰는게 맞는거 같다 아니면 서브클래스에서 변경할 기능이 간단하고 어차피 금방 먹버할 예정일때만
익명(211.114)2022-01-20 17:40
is-a는 상속이 제일 자연스러움
ㅇ(106.101)2022-01-20 17:49
답글
의미상으로는 그런데 결국 결합도 문제로 씹창날 확률 up
익명(211.114)2022-01-20 17:52
답글
예를 들어 본다면?
ㅇ(106.101)2022-01-20 17:52
답글
가장 흔히 접하는게 슈퍼클래스 기능변경이 쉽지 않아질때가 많지 하위클래스 주렁주렁달려서 빼도박도 못할때가 한두번이 아님
익명(211.114)2022-01-20 17:53
답글
재사용하겠다고 오버라이딩할때도 슈퍼클래스 메소드 호출하고 해놨는데 그 슈퍼클래스 메소드 구현 변경했다가 하위클래스 불변식 깨지고 난리나는거 언어 표준 라이브러리 수준에서도 번번히 보임
익명(211.114)2022-01-20 17:55
답글
너가 말하는 경우는 컴포지션이 더 적합한 경우가 맞고 상속이 적합한 경우가 있음. 하위클래스가 주렁주렁 달린 수퍼클래스는 그게 애초에 has-a가 아니라 정말 is-a인가 (LSP를 만족하는가)를 따져봐야 하고 LSP에 어긋나면 has-a인 부분들을 컴포지션들로 빼내는게 나음
ㅇ(106.101)2022-01-20 17:56
OOP에 상속 말고 다른 개념도 많은건 사실임. 컴포지션, 어그리게이션, 의존성 인젝션, 더블 디스패치.. Composition over inheritance라는 말을 무슨 진리처럼여기는 애들도 많은데 그것도 딱히 맞는 말은 아니고 각 패턴의 장단점을 명확히 알고 상황에 맞춰 사용하는게 중요함
ㅇ(106.101)2022-01-20 17:51
상속은 타입 계층을 만들때만 써라라고 하던데
익명(220.86)2022-01-20 17:57
상속말고 구성을 쓰라더라 트레이트
익명(202.150)2022-01-20 19:49
PHP 에는 트레이트가 있음
익명(202.150)2022-01-20 19:50
자바 창시자가 “다시 자바 만들때로 돌아간다면 상속을 없애깄습니다” (청중들 웃음) “농담이지만 진담이기도 합니다. 상속은 엌저고 어쩌고” 하면서 사람이 문제라고 했었음 ,
구현부 재사용을 해야하는데 합성으로 처리하기 너무 번거로울 경우에만 쓰는게 맞는거 같다 아니면 서브클래스에서 변경할 기능이 간단하고 어차피 금방 먹버할 예정일때만
is-a는 상속이 제일 자연스러움
의미상으로는 그런데 결국 결합도 문제로 씹창날 확률 up
예를 들어 본다면?
가장 흔히 접하는게 슈퍼클래스 기능변경이 쉽지 않아질때가 많지 하위클래스 주렁주렁달려서 빼도박도 못할때가 한두번이 아님
재사용하겠다고 오버라이딩할때도 슈퍼클래스 메소드 호출하고 해놨는데 그 슈퍼클래스 메소드 구현 변경했다가 하위클래스 불변식 깨지고 난리나는거 언어 표준 라이브러리 수준에서도 번번히 보임
너가 말하는 경우는 컴포지션이 더 적합한 경우가 맞고 상속이 적합한 경우가 있음. 하위클래스가 주렁주렁 달린 수퍼클래스는 그게 애초에 has-a가 아니라 정말 is-a인가 (LSP를 만족하는가)를 따져봐야 하고 LSP에 어긋나면 has-a인 부분들을 컴포지션들로 빼내는게 나음
OOP에 상속 말고 다른 개념도 많은건 사실임. 컴포지션, 어그리게이션, 의존성 인젝션, 더블 디스패치.. Composition over inheritance라는 말을 무슨 진리처럼여기는 애들도 많은데 그것도 딱히 맞는 말은 아니고 각 패턴의 장단점을 명확히 알고 상황에 맞춰 사용하는게 중요함
상속은 타입 계층을 만들때만 써라라고 하던데
상속말고 구성을 쓰라더라 트레이트
PHP 에는 트레이트가 있음
자바 창시자가 “다시 자바 만들때로 돌아간다면 상속을 없애깄습니다” (청중들 웃음) “농담이지만 진담이기도 합니다. 상속은 엌저고 어쩌고” 하면서 사람이 문제라고 했었음 ,