개발자 99% 커뮤니티에서 수다 떨어요!
💡연습 문제 1.
파일에서 데이터를 읽는 클래스를 만들어야 한다. 한 번에 한 줄씩 읽어 들이고, 각 줄은 여러 개의 필드로 쪼개야 한다. 의사 코드로 표현한 다음 두 클래스 중 어떤 것이 직교적인가?
class Split1 {
constructor(fileName) # 읽기 위해 파일을 열기
def readNextLine() # 다음 줄로 이동
def getField(n) # 현재 줄의 n번째 필드를 반환
}
class Split2 {
constructor(line) # 한 줄을 쪼개기
def getField(n) # 현재 줄의 n번째 필드를 반환
}
직교성은 독립성, 결합도 줄이는 것을 의미한다. 하나가 바뀌어도 다른 부분에 영향을 끼치지 않으면 직교한다고 할 수 있다.
직교성을 위해서라면 하나의 코드는 가장 단순하고 간단한 일을 해야한다고 생각한다.
따라서 처음에 한번 훑어보고는 Split2가 가장 직교적이지 않을까 라는 생각을 했다.
그리고 내가 생각한 답이 맞는지 확인을 하기 위해 좀 더 상세하게 살펴봤다.
Split1에서 '읽기 위해 파일을 열기' 부분에서 파일이 어떤 정보가 어떻게 올지 모른다고 생각을 했다. Split2는 '한 줄을 쪼개기'라는 내용을 보고 가장 단순한 일인 쪼개는 일만 담당하기 때문에 Split1보다는 더 직교적이라 생각했다.
실용주의 프로그래머
우리 생각에는 Split2 클래스가 더 직교성이 좋다.
이 클래스는 자기가 해야 할 일인 줄 쪼개기에만 집중하고, 어디서 그 줄이 오는지와 같은 세부 사항은 무시한다. 그러면 코드가 개발하기 더 쉬워질 뿐만 아니라 더 유연해진다.
Split2는 파일에서 읽어온 문자열을 쪼갤 수도 있고, 다른 루틴이 만든 문자열을 쪼갤 수도 있고, 환경 변수로 넘어온 문자열을 쪼갤 수도 있다.