실전 자바 소프트웨어 개발

4장 주요 내용 정리

최-코드 2024. 5. 28. 22:04

강한 형식의 원칙 : 예를 들어 파일을 가리킬 때 String 타입을 쓰기보단 파일을 가리키는 전용 형식을 이용하여 오류가 발생할 범위를 줄이는 것을 말한다. String으로는 실제 있는 경로인지 알 수 없지만, File 타입을 사용하면 이를 미리 확인할 수 있게 된다.

 

유비쿼터스 언어 : 개발자와 사용자 모두가 사용할 수 있도록 설계, 공유된 공통 언어를 말한다. 이를 통해 바꿔야 할 코드(용어)를 쉽게 알 수 있어 유지보수성을 높일 수 있다.

 

도메인 클래스 이용 이유 : 강한 형식의 원칙과 유비쿼터스 언어를 접목할 수 있으며, 사용 방법을 규제할 수 있다. setter와 관련된 함수를 만들지 않으면 불변 속성과 같이 규제할 수 있다. 불변성을 가질 시 이 도메인 클래스를 생성하는 클래스의 구현을 확인하면 되므로 오류가 발생한 원인을 좁힐 수 있다.

 

리스코프 치환 원칙(LSP) : SOLID 원칙 중 하나로, 클래스 상속과 인터페이스 구현을 올바르게 사용하도록 도와준다.

형식=클래스 or 인터페이스,  하위형식 = 부모와 자식관계를 이룸(클래스 상속 or 인터페이스 구현)이라고 볼 때,

q(x)는 T형식의 x 객체를 증명할 수 있는 공식이다. 그러면 S 형식의 객체 y가 있고 S가 T의 하위형식이면 q(y)는 참이다.
  • 하위 형식에서 선행조건을 더할 수 없음, 이때 선행조건은 어떤 코드가 동작하는 조건을 말한다. 즉, 부모가 지정한 조건보다 더 많은 선행조건을 요구할 수 없다. 예를 들어, 부모가 문서의 크기를 제한하지 않는다면, 이를 상속한 클래스는 문서의 크기가 100KB보다 작다고 조건을 달 수 없다.
  • 하위형식에서 후행조건을 약화시킬 수 없음, 이때 후행조건은 어떤 코드를 실행한 다음에 만족해야 하는 규칙이다. 예를 들어 어떤 메소드가 실행하여 문서를 반환하면 그 문서는 문서 목록에 포함되어야 하는 조건이 있으면 하위형식도 이를 따라야 한다. 문서가 포함되지 않아도 된다라는 조건을 붙이면 이는 LSP를 위반하게 된다.
  • 슈퍼형식의 불변자는 하위형식에서 보전됨. 이는 final 키워드로 쉽게 적용할 수 있다.
  • 히스토리 규칙. 자식 클래스는 부모가 허용하지 않은 상태 변화를 허용하지 않아야 한다. Document 클래스가 불변의 속성을 가질 때 자식 또한 불변의 속성을 가지고 있어야 한다.

테스트 위생 : 테스트 대상 코드베이스뿐 아니라 테스트 코드도 깔끔하게 유지하며 유지보수하고 개선해야 함을 의미한다.

테스트 위생을 지키는 핵심 요소

  1. 테스트 이름 짓기 - 서술적이고, 도메인 용어를 사용하자. 기본적으로 테스트하고자 하는 메소드의 이름을 그대로 가지고 온다음 접두어로 should를 붙여주는 것도 나쁘지 않은 방법이다.
  2. 중복배제
  3. 오류 상황 테스트 - 문서를 임포트 하는 응용 프로그램에 대해 확장자를 설정한 문서에 대해서만 테스트하는 것이 아닌, 설정한 확장자가 아닌 문서, 존재하지 않은 파일 등등에 대해서 테스트를 진행해야 한다. 이때 예외처리를 할 수 있는데, @Test(expected = "예외.class")와 같이 하면 예외가 발생하면 테스트가 성공하고, 예외가 발생하지 않으면 테스트가 실패하게 된다.
  4. 좋은 진단 - 테스트가 실패했을 때 출력하는 메세지와 정보가 존재해야 한다. 실패한 이유를 설명한 메세지가 명확해야 쉽게 디버깅할 수 있다. 보통 assertEquals()메소드를 이용한다. assertEquals("테스트가 실패하면 이 메세지 표시 " ,expected,actual)와 같은 꼴을 가진다.