인터넷의 숨겨진 보물들
이리 저리 웹 서핑을 하면서 여러 글을 읽다보면, 우연히 정말 멋진 보물들을 발견하곤 합니다. 얼마 전 웹 서핑을 하다가 발견한 멋진 글을 소개합니다. 객체지향의 여러 특징들과 테스트 가능성에 대해 너무나 잘 설명해주고 있습니다.
정진욱님(Github 프로필)의 블로그 글입니다. 2016~2017년에 걸쳐 작성된 글인데요. 더 많은 분들이 읽어보실 수 있으면 좋을 것 같아 간단한 설명과 함께 소개합니다.
객체지향
객체지향을 공부하다보면 생기는 의문이 있습니다. “상속보다는 구성을 사용하라.”라는 조언이 있는데, 그럼 상속은 언제 사용해야할까? 왜 상속보다 구성을 사용하는 것이 좋다고 할까? 위 글에서 예제와 함께 확인해보세요.
의존성 주입(Dependency Injection)이라고 들어보셨나요? 아름다운 객체지향 디자인의 핵심적인 역할을 하는 개념입니다. 그럼 의존 역전 원칙(Dependency Inversion Principle)은요? 제어 역전(Inversion Of Control)은요? 잘 모르신다면 위 글에서 확인해보세요. 예제를 통한 각 개념들의 설명과 서로간의 관계, 그리고 더 디테일한 통찰까지 담겨있습니다.
객체는 데이터, 동작으로 이루어지는 건 알겠다. 그런데 어디까지 묶어야 할까? 캡슐화(Encapsulation)가 중요하다는데, 관련 있는 개념끼리 크게 묶어서 추상화하는게 좋을까? 아니면 잘게 쪼개서 조립하듯 써야할까? 그러면 객체가 너무 많아지지 않을까? 이런 부분들이 헷갈린다면 위의 글을 한 번 읽어보세요!
테스트
개발의 세계에 들어서고 나면 유닛테스트, 통합테스트, 테스트 주도 개발 등 테스트와 관련된 여러 용어들을 접하게 됩니다. 그런데 막상 테스트를 작성하라니 어떻게 해야할지 모르겠고, 이미 존재하는 코드는 테스트가 절대 불가능할 것 같습니다. 그럴 때 읽어보면 도움이 되는 글 묶음입니다.
묶음에 대한 설명은 주제글인 Testing, Oh my! by Jin-Wook Chung의 본문을 인용하겠습니다.
예전에 회사 후배가 어떤 코드를 테스트하고 싶은데, 아직 경험과 스킬이 부족해서 힘들다란 말을 했다. 그 후배가 테스트하고자 하는 코드(System Under Test, 이하 SUT)는 테스트하기 어려운 IO 로직에 직접 의존하고 있어 테스트가 거의 불가능했다. 수동테스트 밖에 길이 없었던 것이었다.
테스트에 어려움을 느끼는 초심자의 큰 오해 중 하나는, 그 어려움이 테스트 스킬 부족 때문이라고 생각하는 것이다. 테스트 스킬이 중요하지 않은 것은 아니지만, 그보다 SUT가 얼마나 테스트하기 쉽게 디자인되었는지가 더 중요한 요소이다. 후배의 예처럼 IO 로직 같은 테스트하기 어려운 코드를 직접 참조해버리면 아무리 뛰어난 스킬이 있더라도 손과 눈으로 수동테스트하는 방법밖엔 없는 것이다.
이 때 후배에게 들려줬던 테스트 방법에 대한 이야기를 글로 정리하셨다고 합니다. 총 4개의 글인데요, 하나같이 너무나 훌륭한 글입니다.
- 어떤 코드가 테스트하기 쉬운지 또는 어려운지 Testable Code by Jin-Wook Chung
- 테스트가 쉬운 코드는 어떻게 작성하는지 How to write more testable code by Jin-Wook Chung
- 테스트가 어려운 코드는 어떻게 다뤄야 하는지 Test Humility by Jin-Wook Chung
- 테스트하기 쉬운 코드와 어려운 코드가 만나게 되는 지점은 어떤 테스트 방법이 있는지 Function Root Testing by Jin-Wook Chung
마치며
웹 서핑을 하다가 이렇게 훌륭한 글이나 블로그를 발견하면 한 편으로는 기쁘지만, 한 편으로는 서글퍼집니다. 저도 블로그를 운영하고 있기 때문이죠.😂
위의 글들을 읽으면서 간결한 문장, 글의 구성, 명확하고 적절한 예제들에 놀랐습니다. 저도 멋진 블로그를 만들어 나갈 수 있도록 열심히 공부하고, 글솜씨를 갈고 닦아야겠습니다.