Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions 2025/Becoming a Better Programmer/donghyeon/ch14~23.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# 더 나은 프로그래머 되는법 = ch14~23

## 논의

같은 코드라도 도메인 특성, 의도에 따라 YAGNI가 되기도, 확장성 설계가 되기도 하는 것 같습니다.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 이 부분 분간이 어렵습니다.
당장 필요한 구현만 하라고 하는데,
일을 하다보면 확장성을 생각해야 나중에 일할 때 편할 것이라 생각이 들어 미리 작업해야 하나를 망설입니다.

그래서 저는 약간 기준이,
나중에 일할 것을 대비해 미리 작업하되 이로인해 현재 추가할게 어려워지거나 마무리가 안된다 느껴지면...
그 작업은 안하고, 확장보다는 지금 할 것에만 집중하자라고 되돌아가는 것 같습니다.

반면에 지금 미리 확장을 추가해도 지금 하는 일에 영향이 적다면,
구현해둬도 무리가 없던 것 같아요.

간단하게 예를 들면, 인터페이스와 구현체가 1:1 대응이 될 때, 의도적인 추상화라면 '확장성 설계'가 될 것이고,
'그냥 인터페이스가 있으면 좋으니까'라면 YAGNI가 될 것 같습니다.

좀 억지스러운 예제라고 느끼실 수도 있지만 그만큼 저는 YAGNI와 확장성 사이의 균형을 잡는 것이 어렵다고 생각하는데요.
특히나 도메인에 대한 충분한 이해가 없는 경우에는 정확한 판단이 매우 어려운 것 같습니다.

여러분들은 어떤 기준으로 둘을 구분하시나요?
너무 추상적인 질문이지만 평소에 궁금했었던 내용이라 논의내용으로 선정했습니다.
Comment on lines +3 to +13
Copy link
Collaborator

@TaeHyoungKwon TaeHyoungKwon May 15, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

종필님 논의 내용과도 비슷한 맥락의 논의라고 생각되는데요

도메인에 대한 충분한 이해가 있다고 하더라도, 섣부른 확장성 있는 설계는 신중하게 결정해야한다고 생각하는 편 입니다. 책에서 코드는 변한다에 대해서 저도 동의하는 바인데, 어떻게 보면 변경 가능성이 있냐 없냐의 확률 문제로 볼 수있을거 같고, 도메인에 대한 충분한 이해가 있는 전제에서는 어떤 부분에서 확장성이 필요하다는 예측이 맞을 가능성이 높기 때문에, 그 확률을 믿고 가볼 수 있을 것 같습니다

그렇지 않다면, 확률의 측면으로 볼 때, 일단 YAGNI가 맞을 것 같습니다

결론은 확률의 문제인데, 제 경험 상에서는 처음부터 섣부르게 판단해서 일반화하고, 확장성을 고려하는 것 보다는, 코드가 충분히 성숙해졌고, 어떤 패턴들이 보일 때, 귀납적으로 판단하여서, 확장성을 고려하는 설계를 적용하는게 더 성공확률이 높았던 것 같습니다

Comment on lines +5 to +13
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 확장성도 고려해야 겠지만 지금 필요한 동작을 하는 코드를 단순한 설계를 통해 구현하자 쪽에 더 가깝습니다.
언급하신 단어로는 YAGNI죠.

그리고 먼저 코멘트를 단 태형님 의견에 동의하는게 처음에는 어떻게 확장될지 예측해서 만들었어도
코드가 생성되고 나면 패턴과 정리 방향이 보이는 때가 옵니다.
저도 그때가 확장성을 고려하는 설계를 적용해야 될 때라고 봅니다.

반대의 상황이라면
동작하는 코드의 덩어리들을 만들어 둔 게 없는데 어떤 디자인 패턴을 쓰면 좋을지를 고민하는 게 예시라고도 볼 수 있겠죠.


## 내용

- 팀의 규칙을 구두로만 전하지 말고, **명백하게 공식화**해야 한다.
- 팀의 규칙은 팀이 성장함에 따라 **변할 수 있음**을 인지해야 한다.
- 코드의 **일관성**은 간결함의 기초이다.
- 문제를 해결하기 위해 딱 **필요한 양의 코드만 작성**해야 한다.
- 당장 관련 없는 문제에 대한 일반적인 해결책을 발명하지 말아야 한다.
- **생각 후 코딩**하라.
- **모든 테스트 통과 != 완벽한 소프트웨어**