OOP
Object Oriented Programming으로 객체 지향 프로그래밍을 뜻한다.
정확히 OOP가 무엇인지 왜 사용해야하는지 알아보자
예시 : 키보드로 입력을 받아 프린터로 출력하는 PJT
위의 프로젝트를 개발 요청받았다고 생각해보자
단일 입력, 단일 출력
키보드 하나와 프린터 하나를 처리하는 소스는 아래와 같다.
public void copy() {
int c;
while ((c = readKeyboard()) ≠ EOF) {
writePrinter(c);
}
}
다중 입력, 단일 출력
키보드, 프린터에 추가로 종이 테이프 리더기 입력이 추가되었다.
위의 소스를 수정해 플래그를 두어 입력을 구분한다.
private boolean GptFlag = false;
public void copy() {
int c;
while ((c = (GptFlag ? readPt() : readKeyboard())) ≠ EOF) {
writePrinter(c);
}
}
다중 입력, 다중 출력
키보드, 프린터, 종이테이프 리더기에 추가로 종이 테이프 펀처 출력이 추가되었다.
private boolean GptFlag = false;
private boolean GpunchFlag = false;
public void copy() {
int c;
while ((c = (GptFlag ? readPt() : readKeyboard())) ≠ EOF) {
if(GpunchFlag)
writePunch(c);
else
writePrinter(c);
}
}
시간이 흘러 요청이 추가되고 코드가 변경될수록
점점 더 지저분해지고 코드가 길어지며 가독성과 유연성이 낮아진다.
OOP 라면?
stdio로 입출력을 해서 다른 장치이더라도 redirect 가능하도록 개발한다
public void copy() {
int c;
while ((c = getChar()) ≠ EOF)
putChar(c);
}
OOP 적용 전과 후의 다이어 그램을 비교해보자
이 경우 상위 레벨 모듈인 Copy가 키보드나 프린터와 같은 하위 레벨 모듈을 직접 사용하고 있어 의존이 발생한다.
따라서 I/O 장치가 늘어날수록 copy는 영향을 받을 가능성이 높아진다.
반면 OOP 적용 후엔 상위 레벨 모듈인 Copy가 하위 레벨 모듈인 키보드나 프린터에 의존하지 않고,
오히려 키보드와 프린터가 상대적으로 상위 레벨인 File Interface에 의존한다.
이를 의존의 역전, DI(Dependency Inverted) 라고 한다.
OO (Object Oriented)
그럼 객체지향은 무엇일까?
객체지향은 실세계를 똑같이 모델링하는 것이다.
많이 들어본 상속, 캡슐화, 다형성은 OO의 핵심이 아닌 메커니즘이다
OO의 핵심은 예시에서 본것처럼
의존 관계의 역전(IoC)을 통해 상위 레벨의 모듈을 하위레벨의 모듈로 부터 보호하는것이다
이때, 의존성 관리의 중요한 규칙은 SOLID 이며 아래에 정리해두었다 !
https://jainkku.tistory.com/77
reference
'OOP' 카테고리의 다른 글
IoC와 DI (0) | 2023.03.27 |
---|---|
DI 방법과 장단점 (0) | 2023.03.27 |