Code Spitz 첫번째 (2/2)

결국 만나고야 말았던 oop

언제까지고 기초만 할 수 는 없기 때문에 한번쯤은 OOP를 거치지 않을 수 없다는 각오는 하고 있었습니다. 다만 … 이번에도 힘들게 공부할 것이 분명했지만 원래 공부는 그런것이기도 하고 해서 그냥 받아들이기로 했습니다.

꼭 배워야 하는 그것 OOP

예전에도 그래왔고 앞으로도 그런 프로그램의 결코 변하지 않는 대명제가 있죠..

“모든 프로그램은 변한다.”

변하는것은 어쩔 수 없는 현실이기 때문에 이것을 얼마나 잘 받아들이고..(체념하라는 말이 아닙니다.) 그것을 잘 대처하는게 우리가 해야할 것이라고 하시는 충격적인 말부터 시작하였습니다.

  1. 일단 격리하자

변하는것을 알기 때문에 하나 변한다고 모든것을 다 처음부터 만들 수는 없습니다. (출근을 하는 회사원의 가장 큰 꿈은 퇴근이기 때문에..) 어떻게든 효율적으로 서로 영향을 덜 주고 변화에 대응할 수 있도록 우리는 적응해야 합니다.

그렇다면 무엇을 기준으로 격리할 것인가? 라는 의문이 남습니다.

그것은 변화하는 부분이 어떻게 되는지 잘 고민해서 변화하는 부분이냐 아니냐를 기준으로 하는것입니다.

2. 강한응집성과 약한의존성

변화율이 같은것을 모으고 변화율이 다른것 역시 모아두면 변화율을 관리하는것에 도움을 줄 수 있습니다. 그러면 자연스럽게 디자인패턴처럼 만들어 진다고 합니다. (반대가 아닐까 합니다만… 디자인패턴처럼 짜면 자연스럽게 강한응집성과 약한의존성을 관리할 수 있게 되는것일것 같습니다. ) 그렇다면 다시 처음으로 돌아와서 이것을 어떻게 관리할 것인가인데 여기서 하나의 객체에 하나의 책임만 지게 하는 단일책임의 원칙이 나옵니다. 말로는 다들 이해하는데 책임의 이면은 역할이라는 말은 쉽게 알지는 못했죠.. .

3. 알고리즘은 if와 for 이다.

항상 알고리즘이 어려운것 또는 특정 해법대로 푸는것이라고 생각해서 if와 for이라는 생각은 안해봤습니다. 그러나 결국 모든 객체들을 모아 if와 for 로 처리하게 하는.. 궁국적으로 알고르즘을 사용하지 않는 (물론 그렇게만 보일 뿐이지 실제로는 알고리즘 이겠죠..) 프로그래밍 이라고 할 수 있겠습니다.

4. 데이터 로더에서 데이터 서플라이로

데이터를 읽어오는 부분에서 읽어오려는 데이터가 어떤 형식이던 받아들여서 처리할 수 있도록 해야 하기 때문에(저는 이것도 모르는 무식쟁이였습니다….그냥 정해진 데로 통신하면 되는거 아냐.. 했죠.. ㅠㅠ) 결국에는 역할로 분리해서 협력하게 만들어 놓으면 변화율(여기서는 통신하는 파일형식)에 따라 작성해야 대응 할 수 있게 됩니다. 다시말해 데이터 종류가 무엇이건 관계없이 대응 해야 하는거죠..

5. 상속

데이터의 종류가 달라져도 구현체만 변경하면 대응할 수 있도록 부모객체에 자식객체를 오버라이드 시키는 방법이라든지, 상속을 통한 데이터 분리과정이라든지 이 부분은 조금 더 공부를 해야 할것 같습니다. 저보다 먼저 글을 써주신 분이 감사하게도 많은 도움이 되었습니다.

여기서 es6에서 class extends 를 쓸 때 this를 쓰려면 항상 super(); 이들어간다는 사실을 처음 알게 되었습니다. (사실 안써서 모르는것이 맞습니다. ㅠㅠ)

6. 내부계약과 외부계약

상속을 통해 데이터를 읽어오는 객체를 내부계약으로 서로다른 역할을 하는것은 별도의 외부계약으로 묶여 있는것을 마지막으로 저번주의 시간을 마쳤습니다.

7.소감

아.. 항상 어렵지만 매번 이렇게 커다란 벽을 느끼게 해 주셨습니다. 모르는것도 많아서 영상이 나오면 한번 더 봐야지 라는생각으로 글을 최대한 미뤘는데 아직 영상공개 시점이 느린것을 몰랐습니다. 다음번에는 조금 더 필기를 열심히하고 주의깊게 듣자는 반성을 하게 되었습니다.

Show your support

Clapping shows how much you appreciated 진영화(jin young hwa)’s story.