프디아 백엔드
내가 생각하는 객체 지향이란?
햄스타배
2024. 4. 11. 13:14
자바 4특징 5원칙
4특징
- 캡슐화
- 상속
- 추상화(추상클래스와 인터페이스)
- 다형성 : 하나의 타입에 여러 개의 객체를 담아서 사용
그렇다면 객체 지향 프로그램이란 무엇일까??
전에 들은 강의에서는 "프로그램을 유연하고 변경 용이하게" 하는 것이라 하였다
컴퓨터 프로그램들을 객체들의 모임으로 파악하고자 하고, 객체는 메시지를 주고 받고 데이터 처리를 할 수 있다(협력)
유연하고 변경 용이하다는 것은 추상화를 통해 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있다는 뜻인 것 같다
연극으로 생각해보자. 역할은 로미오와 줄리엣이 있고, 누가 로미오를 맡든 연극의 시나리오는 변하지 않는다
로미오를 맡는 배우는 쉽게 변경가능하듯이 컴포넌트를 쉽고 유연하게 변경할 수 있어야 한다.
5원칙
- 단일 책임 원칙
: 모든 클래스는 하나의 액터/역할에 대한 책임만 가지며, 그 클래스는 그 책임을 완전히 캡슐화 해야한다
(특정 객체의 책임 의존성 과중을 최대한 지양하기 위한 원칙)
방법은 2가지!!
1. 추상 메소드: 상위와 하위를 쪼갬으로써 다형성 형태로 구현
2. 필드로 객체화하여 변경이 필요할 때 해당하는 하나의 클래스만 수정 (but 코드 변경 범위를 생각해야한다..)
class ReportService{
private ReportDesign reportDesign;
private ReportContent reportContent;
void editContents(){
//내용편집을 위한 코드
reportContent.edit();
}
void editTemplate(){
reportDesign.edit();
}
void print(){}
}
class ReportDesign(){
void edit(){
}
} //객체화
class ReportContent(){
void edit(){
}
} //객체화
- 개방-폐쇄 원칙
- 기능 추가 요청이 오면 클래스 확장을 통해 손쉽게 구현하면서, 확장에 따른 클래스 수정은 최소화 하도록
- 기능이 변하거나 확장되는 것은 가능하지만 그 과정에서 기존의 코드가 수정되지 않아야한다
- 리스코프 치환 원칙
- 하위타입은 상위타입을 대체할 수 있어야한다, 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 방식
- 부모 클래스의 행동 규약을 자식 클래스가 위반하면 안됨 (ex 상위 = 직사각형, 하위 = 정사각
- 인터페이스 분리 원칙: 각자 관심에 맞는 작은 인터페이스로 여러 개 분리
- 특정 클라이언트를 위한 인터페이스를 분리해서 독립적으로 여러개 둔다.
- 의존관계 역전 원칙: 추상화에 의존(구현 클래스X, 인터페이스에 의존)
유연하게 구현체 변경이 가능해야한다