개발자가 정복해야 할 객체지향-1

-소프트웨어를 구현한다는 것은 결국 최종적으로는 소프트웨어를 구성하는 데이터와 데이터를 조작하는 코드를 작성하는 것이다.

절차지향 프로그래밍

-프로시저로 프로그램을 구성하는 기법을 절차지향 프로그래밍이라고한다.
-절차지향은 데이터를 중심으로 한 프로시저로 구성된다.

*성적평균을 계산하고 출력하는 프로그램
- '평균계산 프로시저'와 '화면출력 프로시저'는 데이터를 공유해서 사용한다.
- 자연스럽게 데이터를 중심으로 구현된다.
- 최초에는 코드를 구현하는 것이 쉽다. 하지만, 규모가 커질수록 수정이 힘들다.

객체지향 프로그래밍

-데이터 및 데이터와 관련된 프로시저를 객체라고 불리는 단위로 묶는다.
-객체들이 모여 프로그램을 구성한다.
-각 객체들은 서로 연결되어 다른 객체가 제공하는 기능을 사용할 수 있다.
-이때 프로시저는 자신이 속한 개체의 데이터에만 접근할 수 있으며, 다른 객체에 속한 데이터에는 접근할 수 없다.
-객체의 데이터를 변경하더라도 해당 객체로만 변화가 집중되고 다른 객체에는 영향을 주지 않기 때문에, 유연하다.

객체

-객체의 핵심은 기능을 제공하는 것
-객체가 정의할 때 사용되는 것은 객체가 제공해야 할 기능이며, 객체가 내부적으로 어떤 데이터를 갖고 있는 지 정의되지 않는다.

* 소리크기 제어객체
- 소리크기 증가 / 감소 / 음소거 기능
- 내부적으로 소리크기를 어떤 데이터 타입값으로 보관하는지는 중요하지 않다. 3개의 기능을 제공한다는 것이 중요할 뿐이다.

인터페이스와 클래스

-보통 객체가 제공하는 기능을 오퍼레이션이라고 부른다. 즉 객체는 오퍼레이션으로 정의된다.
-객체가 제공하는 기능을 사용한다는 것은 결국 객체의 오퍼레이션을 사용한다는 의미가 된다.
-객체가 제공하는 오퍼레이션을 사용할 수 있으려면, 그 사용법을 알아야한다.

*소리크기 증가기능
- 기능식별 이름 / 파라미터 및 파라미터 타입 / 기능 실행결과 값 : 시그너처

-객체가 제공하는 모든 오퍼레이션 집합을 객체의 ‘인터페이스’라고 부르며, 서로 다른 인터페이스를 구분할 때 사용되는 명칭이 바로 타입이다.
-인터페이스는 객체를 사용하기위한 일종의 명세나 규칙이다.
-인터페이스는 객체가 제공하는 기능에 대한 명세서일 뿐, 실제 객체가 기능을 어떻게 구현하는지에 대한 애용은 포함하고 있지 않다.
-실제 객체의 구현을 정의하는 것은 클래스이다.
-클래스를 이용해서 메모리에 객체 생성, 메모리에 생성된 객체를 인스턴스라고 부른다.

배운점 : 
절차지향이 그대로 소스순으로 늘여놓은게 아니라, 데이터를 중심으로 한 프로시저로 구성된 프로그래밍이라는 점. SI같은 데이터의 정교함을 필요로하는 곳에서는 절차지향이 좀 더 편하게 사용할 수 있겠구나라고 생각하면서, 한편으로는 고객의 니즈에 따라 변화가 많은 곳인데, 객체지향으로 설계를 하고 개발하는 사람이 적을까 라는 생각도 들었다.