자주 쓰는 비유지만
원숭이,침팬지,사람,고래
이렇게했을때 영장류로 분류해버리면 고래를 잘 못된 분류가 되고 이건 잘못된 추상화임
하지만
원숭이,침팬지,사람,고래 이거의 공통점인 젖을 먹인다는 개념으로 접근하면 포유류가 되고 이건 잘된 추상화고
결국 프로그래밍이라는 추상적으로 실체하지 않는걸 실체하게 만드는 행위임. 컴퓨터라는 도구위에서
추상화를 잘 시켜서 최대한 코드의 재사용성을 높이는게 결국은 좋은 프로그래밍인거
즉 공통적인 부분을 잘 추상화해두고, 세부 구현을 잘 감추어두고 분리를 잘 해두면
후에 수정할 부분이 적게 되는거
프로그래밍이 커질수록 이러한 분류가 복잡해지고, 공통 적인 부분을 어디까지 추출해놓고 객체를 나눠야하는가 자체가 어려워짐
이게 경험이고, 이런 방법론으로 도입되는것들이 도메인 로직이나 DDD라는 개념이고
전부 결국은 어떻게 코드의 재사용성을 높이고 프로그래밍을 크게 만들때 코드간의 충돌을 줄이느냐를 포장하는거임
SOLID 원칙도 매한가지고.
강결합 될 경우에는 당연히 코드 수정을 할때 더 많은 부분을 수정해야하니까 약한 결합을 선호하는거고
그렇다고 약한 결합만 해놓으면 코드의 중심 즉 프로그램이 커져나갈때 어느부분을 축으로 수정해야하는가를 구분하기 어려워짐
그렇기때문에 그러한 분류하는 방법론의 총체가 프로그래밍의 기법인거
근데 저 친구는 어제 기본 클래스로 다 되는데 왜 추상 클래스 씀? 인터페이스 씀? 약간 이런식으로 이해하는거 같아서