개발자 99% 커뮤니티에서 수다 떨어요!
💡 연습문제 1. 파일에서 데이터를 읽는 클래스를 만들어야 한다. 한 번에 한 줄씩 읽어 들이고, 각 줄은 여러 개의 필드로 쪼개야 한다. 의사 코드로 표현한 다음 두 클래스 중 어떤 것이 더 직교적인가?
class Split1 {
constructor(fileName) # 읽기 위해 파일을 열기
def readNextLine() # 다음 줄로 이동
def getField(n) # 현재 줄의 n번째 필드를 반환
}
class Split2 {
constructor(line) # 한 줄을 쪼개기
def getField(n) # 현재 줄의 n번째 필드를 반환
}
독립성 추구
결합도 줄이기
관련없는 것들은 서로 영향이 없게 하기,
자족적, 단일적 컴포넌트 간에 상호의존도를 줄이기
특정 기능의 요구 사항을 대폭 변경했을 시, 영향을 받는 모듈은 하나여야 한다.
하나의 기능이 바뀌어도 다른 하나에 어떤 영향도 주지 않는 것
Split1 은 쪼개는 것만이 아니라 파일을 열고 다음 줄로 이동하는 작업을 거치고 있다. 하지만 Split2는 줄을 쪼개고 각 줄을 필드로 반환하는 필요한 과정만 거치고 있다.
따라서 Split2가 더 직교적이고 관련없는 것들을 제거하고 클래스명이 담고 있는 작업만 행하는 것을 찾아볼 수 있었다
문제에서 보듯이 파일에서 데이터를 읽는 클래스를 만드는 것인데, 파일을 어디서 가져오든지 Split2는 줄 쪼개는 역할만 하고 있으므로 다른 파일에서도 사용될 수 있다.
그리고 자기자신의 역할만 수행함으로, 다른 기능과 겹치지 않는다. 따라서 독립적인 클래스로 사용이 가능하다.
직교성 (Orthogonality) https://hewonjeong.github.io/orthogonality/
Split2 클래스가 더 직교성이 좋다. 이 클래스는 자기가 해야 할 일인 줄 쪼개기에만 집중하고, 어디서 그 줄이 오는지와 같은 세부사항은 무시한다. 그러면 코드가 개발하기 더 쉬워질 뿐 아니라 더 유연해진다. Split2 파일에서 읽어온 문자열을 쪼갤 수도 있고, 다른 루틴이 만든 문자열을 쪼갤 수도 있고, 환경 변수로 넘어온 문자열을 쪼갤 수도 있다.