Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
Mission (2)
#pragmatic
2년 전
552

💡 연습문제 1. 파일에서 데이터를 읽는 클래스를 만들어야 한다. 한 번에 한 줄씩 잉ㄺ어 들이고, 각 줄은 여러 개의 필드로 쪼개야 한다. 의사 코드로 표현한 다음 두 클래스 중 어떤 것이 더 직교적인가?

class Split1 {

constructor(fileName)

def readNextLine()

def getField(n)

{

class Split2 {

constructor(line)

def getField(n)

}

✅ 풀이 과정

  • 직교성이 높은 코드란 독립적이고 결합도가 낮은 것을 말한다. 즉 하나가 바뀌어도 나머지 코드가 영향을 받지 않는 코드를 말한다. 클린코드에서도 비슷한 얘기를 하였는데, 클래스는 최대한 작게, 그리고 하나의 책임만 질 수 있도록 단일 책임 원칙(Single Responsibility Principle, SRP)을 지키는 게 중요하다고 강조하였다. 이런 규칙을 잘 지키면 생산성 향상과 리스크를 감소의 효과를 기대할 수 있다. 큰 클래스에 여러 기능이 들어있는 것이 아니라 작은 클래스 여럿으로 이뤄진 시스템이 더 바람직한 것이다.

  • 문제 1번에서 Split이라는 이름의 두 클래스가 있는데, 첫번째 코드는 Split 기능 외에 파일을 열고 다음 줄로 이동하는 기능도 들어있다. 만약 한 기능이 수정되면 이 클래스 역시 영향을 받게 되므로 독립성이 깨지며 결합도와 의존도가 매우 높다는 반증이므로 좋은 코드가 아니라고 생각한다. Split이라는 클래스명에 맞게 Split 기능에만 충실할 수 있게 짜여진 2번째 코드가 더 직교성이 좋다고 생각한다.

✅ 참고 자료

  • 클린 코드



💡 책에 있는 해답

우리 생각에는 Split2 클래스가 더 직교성이 좋다. 이 클래스는 자기가 해야할 일인 줄 쪼개기에만 집중하고, 어디서 그 줄이 오는지와 같은 세부 사항은 무시한다. 그러면 코드가 개발하기 더 쉬워질 뿐만 아니라 더 유연해진다. Split2는 파일에서 읽어온 문자열을 쪼갤 수도 있고, 다른 루틴이 만든 문자열을 쪼갤 수도 있고, 환경 변수로 넘어온 문자열을 쪼갤 수도 있다.