■ 객체지향설계・개발/객체지향 개요
- 개요
- 하나의 객체가 여러 타입을 가질 수 있는 것을 의미한다.
- 목적
- 사용자의 편의성을 보장하자.
- 유지보수를 편하게 하자.
- 객체 지향 설계로 만든 코드의 경우, 상위 클래스 타입을 공유하는 하위 클래스 객체를 교환하는 것으로, 코드 수정량을 줄일 수 있다.
- 수단
- Upcasting
- 상위 클래스 타입을 가지는 하위 클래스 객체를 생성하는 것이다.
- Overriding
- 상위 클래스의 메서드와 동일한 시그니처를 하위 클래스에서 재정의 하는 것이다.
- 상위 클래스의 자료형을 가지는 하위 클래스 객체의 메서드를 실행하면, 동적으로 상위 클래스가 아닌 하위 클래스에서 재정의된 메서드를 실행한다.
- Overloading
- 메서드의 이름은 같되, 매개변수만 바꾸어 여러 메서드로 정의한 것이다.
- 매개 변수의 타입, 순서, 갯수만 바꾸어도 같은 이름의 함수의 호출로, 서로 다른 함수를 호출할 수 있다.
- 개요
- 구체적인 사물에서, 목적 달성에 필요한 공통적인 특성만을 추출 / 재조합, 추상적으로 분류하여, 클래스로서 모델링 하는 것이다.
- 예) 사람 클래스를 설계할 때, 관찰자에 따라 의미 있는 특성
- 은행 : 나이, 직업, 연봉
- 병원 : 시력, 몸무게, 혈액형
- 목적
- 클래스나 데이터베이스의 테이블 등을 설계하자.
- 수단
- class 키워드로 구현
- 객체 그 자체의 공통적인 특성을 생각하고, 목적에 맞는 것만 추출하여 하나의 클래스로 만들 수 있다.
- 예) 로봇 강아지를 만들자.
- 로봇 강아지의 목적을 생각한다.
- 24시간 감시하여, 낯선 사람이 집에 침입하면 주인에게 경고한다.
- 강아지1, 강아지2, 강아지3, ..., 강아지n의 공통적인 특성을 생각한다.
- 강아지1의 개인기인 두 발로 걷기는 모든 강아지에 해당되지 않기에 제외한다.
- 모든 강아지가 주인을 사랑한다는 공통적인 특성이기에 추출한다.
- 모든 강아지가 밥을 먹고, 잠을 자지만, 로봇 강아지의 목적에 맞지 않으므로 제외한다.
- 출처
- 개요
- 상위 클래스의 특성을 하위 클래스에서 상속하여 재사용, 확장하는 것이다.
- 상속의 관점은 부모 - 자식 관계라기 보다, 동물 - 포유류의 관계에 가깝다.
- 상속 관계는 [하위 클래스 is a kind of 상위 클래스]를 만족해야 한다.
- 펭귄 is a kind of 조류
- 펭귄 is a kind of 동물
- 고래 is a kind of 동물
- 조류 is a kind of 동물
- 목적
- 수단
- 개요
- 목적
- 사용자에 의한 객체의 오용을 방지하자.
- 객체의 내부 데이터를 외부에서 참조할 수 없으므로, 내부 데이터의 변화가 다른 객체에 영향을 끼치지 못한다.
- 유지보수를 간편화 하자.
- 객체 내부가 바뀌어도, 사용 방법은 같으므로, 리팩토링으로 인한 객체의 개수 범위가 해당 객체로 한정 된다.