728x90
객체 지향 프로그래밍
- 요소
- 추상화
- 캡슐화
- 상속
- 다형성 - 제일 중요 !
- 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력)
- 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 떄문에 대규모 소프트웨어 개발에 많이 사용된다.
- 레고 블럭 조립하듯 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법
다형성의 실세계 비유
- 실시계와 객체 지향을 1:1로 매칭되진 않지만, 비유하기 좋음
- 역할과 구현으로 세상 구분
다형성의 실세계 비유
- 운전자 - 자동차
- 어떤 자동차든 운전자는 상관없이 운전할 수 있다.
- 배역 - 실제 배우
- 배우가 아플 때 다른 배우가 땜빵 가능
- 키보드, 마우스, 세상의 표준 인터페이스들
- 정렬 알고리즘
- 할인 정책 로직
역할과 분리 시
- 핵심은 클라이언트가 편함
- 내부 구현이 변경되어도 영향을 받지 않는다
- 인터페이스만 알면 됨
- 내부 구조를 세세히 다 몰라도 됨
객체의 협력이라는 관계부터 생각
- 혼자 있는 객체는 없다.
- 클라이언트: 요청, 서버: 응답
- 수 많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다.
다형성의 본질
- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
- 다형성의 본질을 이해하려면 협력이라는 객체사이의 관계에서 시작해야함
- 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
- interface로 정의되어 있으면 어떤 종류의 차가 들어와도 상관없고 클라이언트 코드가 바뀌지 않음
k3와 model3 차동차 예제
OCP(Open-Closed Principle) 원칙
좋은 객체 지향 설계 원칙 중 하나로 OCP 원칙이라는 것이 있다.
- Open for extension: 새로운 기능의 추가나 변경 사항이 생겼을 때, 기존 코드는 확장할 수 있어야 한다.
- Closed for modification: 기존의 코드는 수정되지 않아야 한다.
기존의 코드 수정 없이 새로운 기능을 추가할 수 있어야 한다는 의미
새로운 차량이 추가되어도 Driver의 코드는 전혀 변경되지 않는다.
- main() 내부에서 차량 인스턴스 생성 및 setCar, driver()를 호출하니, 이 부분이 클라이언트라 생각했었고 이 부분에 수정이 없어야 OCP 원칙이 지켜지는 것이 아닌가 라고 생각했었다.
- 이런 부분은 OCP를 지켜도 변경이 필요하다.
- 하지만 Car의 사용자 객체인 Driver가 클라이언트라 생각해야함
- Car interface를 사용하는 클라이언트인 Driver ! 인터페이스를 사용하는 곳이 클라이언트이다 !
- 클라이언트: Driver, 서버: Car !!!!!
728x90
'프로그래밍 > Java' 카테고리의 다른 글
[실전 자바-기본편] 인터페이스 (1) | 2024.02.24 |
---|---|
[실전 자바-기본편] 추상 클래스 (0) | 2024.02.24 |
[실전 자바-기본편] 다형성 활용 (0) | 2024.02.24 |
[실전 자바-기본편] 다형성 (0) | 2024.02.21 |
[실전 자바-기본편] 상속 (0) | 2024.02.15 |
댓글