왜 객체지향을 써야하는가?
- 좋은 코드를 짜기 위한 방법
좋은 코드란 ?
- 이해하기 쉬운가?
- 변경 하기 쉬운가?
변경하기 쉬우려면?
- 구조화를 잘하자.
- 일정한 기준으로 나누고 묶어서 정리
객체 지향이란 코드를 구조화하고 정리하는 방법중에서 가장 널리 쓰이는 효과적인 방법이다.
객체 지향의 프로그래밍의 본질
객체 지향의 본질은 캡슐화, 메시징, 동적바인딩 이다.
앨런케이가 객체지향 개념을 만들었다.
앨런케이가 말하는 객체지향이란 객체나 클래스가 핵심이 아니라, 핵심은 메시지다.
소프트웨어를 어떻게 정리할까?
프로시저 추상화 - 작업의 절차로 추상화 하는 방법
소프트웨어를 생명체의 세포로 생각하면은 어떨까?
세포들은 작고 독립적인 객체
서로 간의 메시지를 통해서 소통함 (ex 유미의 세포)
데이터와 프로시저를 하나의 미니 프로그램으로 만든다. - 객체
프로시저란 데이터를 가지고 조건문, 반복문 등을 통해 일정한 절차를 수행하는 것을 말한다.
행동을 하나의 함수로 만들어서 작성한것 .
그리고 데이터 를 여러곳에서 접근할 수 있으면 코드의 질이 안좋아짐.
관련있는 데이터와 프로시져를 찾아서 묶고 다른 객체가 내부를 건드리지 못하게 한다.
캡슐화를 통해서 공유되는 부분을 접근제어를 해서 변경 제어를 함.
이렇게 변경하게 되면 코드가 이해하기 쉽고 변경하기도 쉬워진다.
다른 객체의 데이터나 프로시져가 필요할 때는 메시지를 요청한다.
- 메시지를 받는 객체는 스스로 처리 방법을 선택한다.
메시지를 요청하는 부분에서는 해당 메시지를 어떻게 처리해야 할지를 알 필요가 없고, 요청만 하고
메시지를 받는 객체에서 요청에 대해 처리하는 방법을 선택해서 처리한다.
동적바인딩은 만들때부터 갈아끼울 수 있도록 만든다.
분리형 드라이버를 생각하면 된다.
상황에 따라서 드라이버를 선택해서 사용
ex) 영화관에서 판매원이 아니라 키오스크에서도 티켓을 요청 할 수 있도록 함.
분리형 설계
1. 공통 분모를 설정한다. (인터페이스)
2. 둘중 어떤것이 들어갈지 결정하는 역할을 추가한다.
- if조건만 추가하면 되는데 더 복잡해 지지 않나?
- 단순하게 한두개만 있으면 더 복잡할 수 도 있지만, 많은 조건들이 있으면 복잡성을 줄일 수 있다.