(노드 심화 주차 강의 듣는 중)
- 객체 지향에서 나오는 용어들(캡슐화, 상속, 추상화, 다형성, 의존성, 결합도, 응집도)과 객체 지향 프로그래밍 설계의 5가지 원칙인 “SOLID”는 어떤 차이가 있는 걸까.
⇒ 대략 전자를 ‘객체 지향적인 설계에서 다루어지고 활용되는 개념들’로, 후자를 거기서 더 나아가 ‘객체 지향 프로그래밍을 더 잘하기 위한 원칙’으로 이해하고 있다.
- 내가 이해한 ‘객체 지향’: “누가 어떠한 일을 할 것인가”, 일꾼에게 일 할당하기.
어떤 저택을 돌보는 기능이 필요하다고 할 때, 그걸 한 뭉텅이의 일거리로 만들지 않고 임의로 어떤 고용인들을 추상화해내는 것. 침대 시트와 옷가지를 빠는 ‘빨래 담당 하녀’, 마구간을 돌보는 ‘마구간지기’, 주방 담당 ‘주방장’ 등으로.
또 어떤어떤 일을 하는 사업을 한다고 할 때 그걸 막연히 주먹구구식으로 해나가는 게 아니라, 유기적으로 자기 일을 해내는 직원들을 뽑아서 업무를 배치하는 식으로 똑똑하게 일처리를 해나가는 방식이 바로 객체 지향이라고 생각하면 되겠다. 객체 지향은 말하자면 회사 시스템인 것!
- 내가 이해한 ‘객체 지향 프로그래밍’: SOLID에서
S, 단일 책임 원칙: 자기가 맡은 일만. 남이 맡은 기능이 필요하면 본인이 하지 말고 남에게 시키기.
O, 개방-폐쇄 원칙: 기존 코드를 수정하지 않고도 기능 추가가 될 수 있도록 기존 코드를 탄탄히(?) 만들어 놓는 것.
L, 리스코프 치환 원칙: 부모와 자식 클래스를 서로 바꿔도 똑같은 기능으로 작동하도록 해야 한다(? 잘 모르겠음).
I, 인터페이스 분리 원칙: 하나의 큰 부서가 일꾼들을 포함하기보다, 잡일꾼1이 ‘도끼날 다듬기’, ‘장작 패기’, ‘장작 나르기’와 같은 여러 작은 ‘기능 부서’를 포함하도록 하자는 것.
D, 의존성 역전 원칙: 상위 계층은 하위 계층에 의존하면 안 된다(? 잘 모르겠음).
- “내 코드에 추상화를 적용하겠다” = “내 코드를 함수로 묶고 뽑아내고 기능별로 모아 다른 js 파일로 나누겠다.”
오늘 공부하려고 대략적으로 가늠한 양의 반절 정도밖에 하지 못했다. 처음 생각할 때부터 좀 많다고 여기긴 했지만… 그래도 모르는 건 모르겠고 아는 건 알겠고가 확실히 나뉘도록 노트를 정리하며 이해한 것이 만족스럽다. 필요할 때 다시 돌아와서 정리한 노트를 참고하기만 하면 되겠다.
Uploaded by N2T