객체 지향 프로그래밍
- 객체 지향 특징
- 객체 지향의 특징 중 가장 중요한 것은 다형성!
- 디자인 패턴은 대부분 다형성을 활용한 것.
- 스프링의 핵심인 IoC, DI도 다형성을 활용하는 것.
- 추상화
- 캡슐화
- 상속
- 다형성
- 객체 지향의 특징 중 가장 중요한 것은 다형성!
- 객체 지향 프로그래밍 : 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 "객체"들의 모임으로 파악하고자 하는 것
- 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
- 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만든다.
- 레고 블럭을 조립하듯, 컴퓨터 부품을 갈아 끼우듯 유연하고 변경이 용이하게 한다.
- 다형성의 실세계 비유
- 실세계와 객체 지향을 1:1로 매칭하는 것은 아니다.
- 역할과 구현으로 세상을 구분한다.
- 위 예시에서는 운전자 역할에서 볼 때 구현된 자동차가 바뀌어도 운전자에게 영향을 주지 않는다.
- 자동차 역할의 인터페이스에 따라서 정해져 있기 때문에
- 자동차 역할과 구현이 구분되어 있는 이유
- 자동차가 바뀌더라도 운전자의 역할은 바뀌지 않기 때문에, 운전자에게 영향을 주지 않는다.
- 클라이언트가 자동차의 내부 구조를 다 알 필요가 없다. 자동차의 역할만 알면 된다.
- 역할과 구현을 구분해놓음으로 운전자는 어떤 자동차가 구현되더라도 문제가 되지 않는다.
- 역할과 구현을 분리함으로 단순해지고 유연해지며 변경이 편리해진다.
- 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
- 클라이언트는 내부 구조가 변경되어도 영향을 받지 않는다.
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
- 결국 역할과 구현을 분리하는 것은 클라이언트의 편의성을 위한 것.
- 역할과 구현을 분리하는 것을 자바 언어로 적용을 한다면?
- 역할 = 인터페이스
- 구현 = 인터페이스를 구현한 클래스, 구현 객체
- 객체 설계 시 역할과 구현을 명확히 분리해야 한다.
- 역할(인터페이스)을 먼저 부여하고 역할을 수행하는 구현 객체를 만들어야 한다.
- 유연하고 변경이 용이하며, 확장 가능한 설계를 할 수 있고 클라이언트에 영향을 주지 않는 변경이 가능하다.
그렇기에 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.
- 다형성의 본질
- 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
- 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다.
class Car {
// 내용 생략
}
class Driver {
private Car car;
//이후 내용 생략
}
- Driver 클래스는 클래스 상에서 Car 클래스를 알고 있다
= Driver 클래스는 Car 클래스에 의존한다. - 의존 = 클래스 상에서 어떤 클래스를 알고 있다의 의미다.
OCP (Open-Closed Principle) 원칙
- 객체 지향 설계 원칙 중 하나로 확장에는 열려있고, 변경에는 닫혀 있다는 뜻이다.
= 기존 코드의 수정 없이 새로운 기능을 추가할 수 있다.
- Open for extension : 새로운 기능의 추가나 변경 사항이 생겼을 때 기존 코드는 확장할 수 있어야한다.
- Closed for modification : 기존의 코드는 수정되지 않아야 한다.
- 확장이 열려있다는 의미는?
- 인터페이스를 사용해서 구현하는 새로운 클래스를 자유롭게 추가할 수 있다.
- 코드 수정은 닫혀있다는 의미는?
- 새로운 클래스를 추가하게 되면 당연히 기존 코드의 수정은 불가피하다.
- 변하지 않는 부분
- 클라이언트 코드를 수정하지 않는다.
- OCP 원칙의 핵심은 클라이언트 코드는 수정하지 않고 기능을 확장할 수 있어야 한다는 것이다.
전략 패턴 (Strategy Pattern): 디자인 패턴 중 가장 중요한 패턴 중 하나.
알고리즘을 클라이언트 코드의 변경 없이 쉽게 교체할 수 있다.
전략 패턴 ex) Driver - Car 에서 Car 인터페이스가 전략을 정의하는 인터페이스이며 각각의 차량 K3, 테슬라 등이 전략의 구체적인 구현이 된다. 또한 전략을 클라이언트 코드 Driver의 변경 없이 손쉽게 교체할 수 있다.
Null Object Pattern : 참조형 변수에 null 대신 null 역할을 하는 객체(Null Object)를 변수에 대입해줌으로 NPE 예외를 방지하고 null 대신 객체를 넣어줄 수 있다.
출처:[인프런 김영한 실전 자바 - 기본편]
김영한의 실전 자바 - 기본편 강의 | 김영한 - 인프런
김영한 | 실무에 필요한 자바 객체 지향의 핵심 개념을 예제 코드를 통해 쉽게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문
www.inflearn.com
'Java > [인프런 김영한 실전 자바 - 기본편]' 카테고리의 다른 글
[인프런 김영한 실전 자바 - 기본편] 다형성2 (1) | 2024.07.17 |
---|---|
[인프런 김영한 실전 자바 - 기본편] 다형성1 (0) | 2024.07.16 |
[인프런 김영한 실전 자바 - 기본편] 상속 (0) | 2024.07.16 |
[인프런 김영한 실전 자바 - 기본편] final (0) | 2024.07.16 |
[인프런 김영한 실전 자바 - 기본편] 자바 메모리 구조와 static (0) | 2024.07.16 |