Community

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

← Go back
Assignment9. 연습문제 1번
#pragmatic
2년 전
903
2

연습문제 1

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


 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` 의 직교성이 좋다. 자기가 해야할 일인 쪼개기만 집중하고, 어디서 그줄이 오는지와 같은 세부사항은 무시. 그러면 코드 개발이 쉬워질 뿐만아니라 더욱 유연해진다. 또 파일에서 읽어온 문자열을 쪼갤 수 있고 다른 루틴이 만든 문자열을 쪼갤 수도있고, 환경변수로 넘어온 문자열을 쪼갤수도있다.

2 comments