[Good Code Bad Code] 단위테스트의 원칙-1
·
📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.309~317)를 읽고 정리한 글입니다. 단위 테스트의 정의단위테스트의 정의에 대해 정확히 내려진 정의는 없지만 상대적으로 격리된 방식으로 코드의 구별되는 단위를 테스트하는 것에 관한 것이다. 중요한 것은 코드를 잘 테스트하고 이 작업을 유지보수할 수 있는 방법으로 수행하는 점이다.단위 테스트의 기초중요한 개념과 용어테스트 중인 코드 : '실제 코드', 테스트의 대상이 되는 코드를 의미테스트 코드 : 단위 테스트를 구성하는 코드를 가리킨다.테스트 케이스테스트 코드의 각 파일에는 일반적으로 여러 테스트 케이스가 있고, 각 테스트 케이스는 특정 동작이나 시나리오를 테스트한다.테스트 케이스는 보통 3개의 섹션 Arrange - Act - Asse..
[Good Code Bad Code] 코드를 재사용하고 일반화할 수 있도록 하라 -2
·
📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.287~306)를 읽고 정리한 글입니다. 전역 상태를 주의하라전역변수는 프로그램 내의 모든 콘텍스트에 영향을 미치기 때문에 전역변수를 사용할 때는 누구도 해당 코드를 다른 목적으로 재사용하지 않을 것이라는 암묵적인 가정을 전제한다. 가정에는 비용이 수반된다. 전역 상태가 갖는 코드는 재사용하기에 안전하지 않을 수 있다.프로그램의 여러 부분에서 공유하고 접근할 필요가 있는 데이터를 전역 변수로 선언하면 접근이 쉬워진다. 하지만 이런 경우 코드를 재사용하는 것이 안전하지 않을 때가 있다. 전역 변수를 사용하여 코드를 작성할 때, 소프트웨어의 각 실행 인스턴스에서 전역 변수가 하나만 존재한다는 암묵적인 가정이 이루어진다. 하지만 재사용을 할 경우..
[Good Code Bad Code] 코드를 재사용하고 일반화할 수 있도록 하라 -1
·
📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.281~287)를 읽고 정리한 글입니다. 이번 장에서는 다음과 같은 내용을 다룬다.안전하게 재사용할 수 있는 코드 작성 방법다양한 문제를 해결하기 위해 일반화된 코드를 작성하는 방법간결한 추상화 계층을 만들고 코드를 모듈화하면 하위 문제의 해결책이 느슨하게 결합된 코드로 분리된다. 이를 통해 코드의 재사용성과 일반화가 더욱 쉬워지고 안전성이 높아진다. 이 장에서는 해당 내용 외에 몇 가지 추가적인 사항에 대해 살펴본다.가정을 주의하라가정은 코드 재사용 시 버그를 초래할 수 있다.함수를 만들 때 성능상 이점을 높이기 위해 그 상황에만 맞는 가정을 하게 된다면, 나중에 재사용 시 상황이 달라지게 되면 버그가 일어날 가능성이 커진다. 또한 가정은..
[Good Code Bad Code] 코드를 모듈화 하라-3
·
📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.268~280)를 읽고 정리한 글입니다. 관련 있는 데이터는 함께 캡슐화하라서로 다른 데이터가 서로 밀접하게 연관되어 있어 그것들이 항상 함께 움직여야 할 때가 있다. 이 경우에는 클래스로 구조화하는 것이 합리적이다.캡슐화되지 않은 데이터는 취급하기 어려울 수 있다.// 텍스트 렌더링을 하기 위한 클래스 및 함수class TextBox{ ... void renderText( String text, Font font, Double fontSize, Double lineHeight, Color textColor){ ... }}// 텍스트 스타일링 값을 가..
[Good Code Bad Code] 코드를 모듈화 하라-2
·
📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.253~267)를 읽고 정리한 글입니다. 클래스 상속을 주의하라 클래스 상속은 확실히 쓸모가 있고 때로는 적합한 도구이다. 두 가지 사물이 진정한 is-a 관계를 갖는다면 상속이 적절할 수 있다. 상속은 강력한 도구지만, 몇 가지 단점이 있고 상속이 야기하는 문제가 치명적일 수 있기 때문에 한 클래스가 상속하는 코드를 작성하는 것에 대해 신중히 생각해야 한다. 클래스 상속은 문제가 될 수 있다상속은 추상화 계층에 방해가 될 수 있다.한 클래스가 다른 클래스를 확장하면 슈퍼클래스의 모든 기능을 상속한다. 이 기능은 원하는 것보다 더 많은 기능을 노출할 수 있다. 이로 인해 추상화 계층이 복잡해지고 구현 세부 정보가 드러날 수 있다. 상속은 적..
[Good Code Bad Code] 코드를 모듈화 하라-1
·
📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.243~252)를 읽고 정리한 글입니다. 모듈화의 주된 목적은 변경과 재구성이 용이한 코드를 작성하는 것이다. 이번 장의 내용은 간결한 추상화 계층이라는 개념을 기초로 한다.의존성 주입의 사용을 고려하라의존성 주입을 사용하게 되면 하위 문제를 재구성할 수 있는 방식으로 코드를 작성하는 것이 유용할 수 있다. 하드 코드화된 의존성은 문제가 될 수 있다. 특정 구현에 의존해서 코드를 구현하면 다른 구현으로 코드를 재설정할 수 없다. 또한 의존하는 클래스의 인스턴스를 생성할 방법에 대해 알고 있어야 하기 때문에 추상화 계층이 지저분해지고 코드의 적응성이 한층 더 제한될 수 있다. 해결책 : 의존성 주입을 사용하라생성자의 매개변수를 통해 로드맵을 ..
[Good Code Bad Code] 코드를 오용하기 어렵게 만들라-3
·
📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.226~242)를 읽고 정리한 글입니다. 시간 처리시간을 다룰 때 코드를 잘못 사용하고 혼동을 일으킬 여지가 굉장히 많다. 시간에 기초한 개념을 다룰 때 적절한 데이터 유형과 언어 구성 요소를 사용하여 혼동과 오남용을 방지해야 한다.정수적절한 자료구조 (java.time)한순간의 시간과 시간의 양의 구분이 힘듦Instant 클래스와 Duration 클래스로 구분모호한 시간의 단위단위가 유형 내에 캡슐화시간대 처리 오류LocalDateTime 클래스 제공데이터에 대해 진실의 원천은 하나만 가져야 한다.데이터는 종종 두 가지 형태로 제공된다.기본 데이터 : 코드에 제공해야 할 데이터. 코드에 이 데이터를 알려주지 않고는 코드가 처리할 방법이 없..
[Good Code Bad Code] 코드를 오용하기 어렵게 만들라-2
·
📚 개발자의 서재/Good Code, Bad Code
해당 포스팅은 톰 롱의 Good Code, Bad Code (P.213~226)를 읽고 정리한 글입니다. 객체를 깊은 수준까지 불변적으로 만드는 것을 고려하라깊은 가변성 -> 멤버 변수 자체가 가변적인 유형이고 다른 코드가 멤버 변수에 접근할 수 있을 경우 발생 깊은 가변성은 오용을 초래할 수 있다.클래스의 멤버 변수가 리스트처럼 참조를 포함하는 경우, 해당 객체를 완전히 제어할 수 없으므로 클래스의 가변성이 증가할 수 있다. 해결책 : 방어적으로 복사하라깊은 가변성과 관련된 문제가 있을 대 게터(getter) 함수를 통해 객체가 반환될 때 객체의 복사본을 만들면 가능해진다. 방어적으로 복사하면 불변적인 클래스를 만드는 데 꽤 효과적일 수 있다. 하지만 몇 가지 문제가 발생한다.복사 비용이 발생한다. 클..