본문 바로가기
행위 돌아보기/독후감상문

패턴, 가치, 원칙에 대해서

by simplify-len 2022. 6. 13.

켄트백의 구현패턴 책에서 나오는 내용을 읽으며, 일부 발췌한 내용이 포함됩니다.

 

프로그래밍은 무엇일까?

왜 개발을 하는 걸까? 분명 처음에는 어떤 성취감에 의해서 분명 접근했었지만, 약 3년이 지난 시점에서 나에게 개발을 하는 이유를 묻는 다면 커뮤니케이션을 잘하기 위해서, 라는 말이 먼저 나오는 것 같다.

 

그렇다면 (개발 > 커뮤니케이션) 일까?

 

개발은 생업으로 하다보니 (과거 토이프로젝트 하던 때와는 달리) 내가 혼자 할 수 있는 것은 거의 없더라. 누군가와 협업을 해야만하고 기한내 목표를 달성하는 것 만이 유일한 목표가 되곤한다.

 

'켄트백의 구현패턴' 책은 이런 부분을 마치 처음부터 알고 있듯이 이야기한다.

결국 이 책 전체는 커뮤니케이션을 돕는 프로그래밍 기법에 초점을 두고 있다.

코드를 통한 커뮤니케이션에는 몇 가지 단계가 있다.

1. 생각을 하면서 프로그래밍하는 것이다. 본능에 의해 코팅하는 것을 멈추고, 내가 어떤 생각을 하고 있는지 살펴볼 수 있는 여유를 갖는 것이다.

2. 다른 사람들의 중요성을 인정하는 것

3. 다른 사람의 존재도 내 존재만큼 중요하다는 생각을 한 후 그러한 생각을 실펀으로 옮기게 되었다.

 

결국 프로그래밍은 커뮤니케이션을 하기 위해 작성한다. 라는 말이 이제 조금 와닿는것 같다.

 

그럼 커뮤니케이션을 잘하기 위해서 패턴, 가치, 원칙 은 왜 언급하고 있는걸까? 

 

한가지 예시로, 우리가 Loop 문을 작성한다고 가정해보자.

Loop 문을 어떻게 작성해야 될까? for 문으로? Stream 문 으로? advenced for 문으로? 여튼, 어떤 방식이던 읽기 쉽고, 작성하기 쉬워야 하며, 검증하기 쉬워야 하고 효율적이어야 한다.

좋은 Loop 문란 무엇일까? 분명 목적에 따라 다를 것이다. 성능을 중시할 때와, 수정의 용이성이 중시할 때 코드가 다른 것처럼 말이다.

 

여기서 바로 패턴이 등장한다.  패턴이란? 추상적인 원칙과 실제코드 사이의 간극을 메워주며 실질적인 코드 작성을 돕는다.

마치 커피를 만드는 바리스타가 커피를 만드는 방법을 처음부터 알고 있었다면 시간과 비용을 쉽게 줄일 수 있듯이, 패턴이 바로 그런 것이다. 그러나 패턴은 절대적 진리가 아니므로, 사람의 의사결정을 돕는 도구 정도로 생각하면 된다.

 

아직 가치와 원칙은 이야기하지 않았지만- 가치와 원칙은 왜 있는걸까? 패턴은 말 그대로 행위속에서 공통점을 발견하고, 그것을 통해서 해답을 찾아가는 것을 의미한다. 다시말해서, 패턴은 반복적으로 일어나는 문제에 대한 합리적인 해결책을 제공해서 프로그래머가 남는 시간과 에너지, 창의력을 진정 독창적인 문제 해결에 사용할 수 있게 해준다.

 

그러나 패턴이 모든 문제 해결의 정답이 될 수 없다. 결국에는 패턴을 적용할 수 없는 경우를 맞이하게 될 때 가치와 원칙이 이 문제를 해결해 줄 수 있다.

 

가치는 모든 프로그래밍에 적용되는 주제로 프로그램을 잘 짜는 사람은 타인과의 커뮤니케이션을 중시하고, 코드의 과도한 복잡성을 피하면서도 유연성 있는 코드를 작성한다. 즉 커뮤니케이션, 단순성, 유연성의 가치는 프로그래밍을 할 때 내리는 모든 의사 결정에 영향을 미친다.

원칙은 언제나 적용되는 것은 아니지만, 많은 패턴에서 사용되는 것이다. 항상 중요하지만 때로는 직접 적용하기 어려운 가치와 적용법을 명확하게 조금은 지엽적인 패턴 사이의 가교역할을 하는 것이다.

 

패턴은 지금 당장 무엇을 해야할지를 알려주고,

가치는 패턴을 사용해야 하는 동기를 알려주며,

(단순성, 유연성, 커뮤니케이션)

원칙은 동기를 행동으로 어떻게 바꿔줄지 결정한다.

(지역적 수정, 반복 최소화, 로직과 데이터의 결합, 대칭성, 선언적 표현, 변화율)

 

 

 

[ 그 외 참고자료 ]

1. https://github.com/LenKIM/object-book/tree/master/object1

 

GitHub - LenKIM/object-book: Study Object book Content Repository / 조영호 님의 오브젝트 책을 학습하고 정리한

Study Object book Content Repository / 조영호 님의 오브젝트 책을 학습하고 정리한 Repo입니다. - GitHub - LenKIM/object-book: Study Object book Content Repository / 조영호 님의 오브젝트 책을 학습하고 정리한 Repo입니

github.com

2. http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960770317#N

 

 

 

댓글