개발자 99% 커뮤니티에서 수다 떨어요!
파일에서 데이터를 읽는 클래스를 만들어야 한다. 한번에 한 줄씩 읽어 들이고, 각 줄은 여러개의 필드로 쪼개야 한다. 의사코드로 표현한 다음 두 클래스중 어떤것이 더 직교적인가 ?
class Split1 {
// 1. 읽기위해 파일 열기
// 2. 다음줄로 이동
// 3. 현재 줄의 n번째 필드를 변환
constructor(fileName)
def readNextLine()
def getField(n)
}
class Split2 {
// 1. 한줄로 쪼개기
// 2. 현재줄의 n번째 필드를 반환
constructor(line)
def getField(n)
}
✅ 풀이 과정
`Class Split2`
라고 생각한다. 일단 직교적인 시스템설계란 생산성 향상과 리스크를 더욱 감소 할 수 있는것 이어야 한다. 외부 인터페이스를 바꾸지 않는한 전체 시스템으로 퍼져나가는 문제를 일으키지 않으리라 확신할수 있어야 한다.
`class Split2`
를 더 직교적인 시스템이라 생각한 이유는 다음과 같다.
`class Split1`
의 첫번째 명령을 보면, "파일을 읽기위해 파일을 실행한다."
파일을 실행하기위해서는 파일 경로와 같은 "외부의 정보"가 반드시 필요하다. 직교성은 한 구성요소를 변경해도 다른 구성요소에 영향을 주지않는 방식이기 때문인 것이다.
하지만 `class Split2`
는 그럴 여지가없다. 해당 클래스의 line
에서 특정 n번째 필드를 반환하기 때문에 그렇다.
어느 한 클래스의 내부를 변경해도 다른 클래스에는 결코 영향을 주지 않는다. 이점에 매우 부합된다고 할 수 있다.
Freecamp, 직교성
https://www.freecodecamp.org/news/orthogonality-in-software-engineering/
`split2`
의 직교성이 좋다. 자기가 해야할 일인 쪼개기만 집중하고, 어디서 그줄이 오는지와 같은 세부사항은 무시. 그러면 코드 개발이 쉬워질 뿐만아니라 더욱 유연해진다. 또 파일에서 읽어온 문자열을 쪼갤 수 있고 다른 루틴이 만든 문자열을 쪼갤 수도있고, 환경변수로 넘어온 문자열을 쪼갤수도있다.