본문 바로가기

공부 기록63

[클린코드] 12장. 창발성 12장. 창발성창발적 설계로 깔끔한 코드를 구현하자단순한 설계 규칙 네 가지가 소프트웨어 설계 품질을 크게 높여준다고 믿는다.모든 테스트를 실행한다.중복을 없앤다.프로그래머 의도를 표현한다.클래스와 메서드 수를 최소로 줄인다.단순한 설계 규칙 1: 모든 테스트를 실행하라무엇보다 먼저, 설계는 의도한대로 돌아가는 시스템을 내놓아야 한다. 즉, 문서를 완벽하게 설계해도 실제 시스템이 설계한대로 돌아가질 않는다면 그 가치는 인정받기 어렵다.따라서 테스트를 철저히 거쳐 모든 테스트 케이스를 항상 통과하는 시스템이 되어야 한다. (테스트가 가능한 시스템)테스트가 가능한 시스템을 만들려고 애쓰면 설계 품질이 더불어 높아진다.결합도가 높으면 테스트 작성이 어려워지는데, 테스트 케이스를 가능한 많이 작성하면 작성할수록.. 2024. 5. 2.
[클린코드] 11장. 시스템 11장. 시스템복잡성은 죽음이다. 개발자에게서 생기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다.- 레이 오지, 마이크로소프트 CTO도시를 세운다면?혼자서 도시를 세울 수 있을까? 불가능하다.혼자서 도시를 관리할 수 있을까? 불가능하다.도시를 잘 관리할 수 있는 이유는 수도 관리팀, 전력 관리팀, 건축물 관리팀 등 각 분야를 관리하는 팀이 있기 때문이다. 도시가 잘 돌아가는 또 다른 이유는 적절한 추상화와 모듈화이다. 따라서 큰 그림을 이해하지 못할지라도 개인과 개인이 관리하는 '구성요소'는 효율적으로 돌아간다.소프트웨어 팀도 도시처럼 구성한다. 깨끗한 코드를 구현하면 낮은 추상화 수준에서 관심사를 분리하기 쉬워진다.시스템 제작과 시스템 사용을 분리하라소프트웨어 시스템은 (애플리케이션 .. 2024. 5. 1.
[클리코드] 10장. 클래스 10장. 클래스이 장에서는 깨끗한 클래스를 다룬다.클래스 체계캡슐화: 리팩토링에서도 다루었지만 클래스의 멤버변수는 private으로 은폐시켜야 한다.클래스는 작아야 한다.클래스를 만들 때 중요한 세 가지가 있다.클래스 크기가 작아야 한다.클래스 크기가 작아야 한다.클래스 크기가 작아야 한다.SOLID 원칙에서도 SRP 즉, 하나의 클래스는 하나의 책임을 갖는 단일 책임 원칙이 있다. 이는 스프링을 배웠다면 당연하게 여길 것이다. 실제 하나의 클래스에 많은 책임이 있다면 유지보수하기가 굉장히 어려워진다. (그래서 Layer를 분리한 것도 있다.)서랍으로 비유하면 아래 선택지에서 어떤 것을 선호하는가?많은 서랍이 있고, 각 서랍별로 물건들을 분류해놓은 상태하나의 서랍이 있고, 하나의 서랍안에 모든 물건들을 .. 2024. 4. 26.
[클린코드] 9장. 단위 테스트 9장. 단위 테스트 단위 테스트란 자기 프로그램이 '돌아간다'는 사실만 확인하는 일회성 코드에 불과했다. (90년대까지만 해도..) 현재는 단위 테스트를 자동화하는 경우까지 생기면서 단위 테스트의 중요성이 점점 커지는 추세다. 하지만 단순히 테스트 케이스를 작성한다고 되는 것이 아니라 제대로 작성하는 것이 중요하다. TDD 법칙 세 가지 TDD는 실제 코드를 작성하기 전에 테스트부터 짜는 것을 말하는데, 정확히는 아래 세 가지 법칙이 있다. 실패하는 단위테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 이렇게 일하면 매일 수십, 수백, 수천 개에 달하.. 2024. 4. 23.
[클린코드] 8장. 경계 8장. 경계 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다. 때로는 패키지를 사고, 오픈 소스를 이용하고, 라이브러리를 이용한다. 때로는 사내 다른 팀이 제공하는 컴포넌트를 사용한다. 어떤 식으로든 이 외부 코드를 우리 코드에 깔끔하게 통합해야만 한다. 외부 코드 사용하기 인터페이스 제공자와 인터페이스 사용자 사이에는 특유의 긴장이 존재한다. 제공자는 적용성을 최대한 넓히려 애쓴다. 더 많은 환경에서 돌아가야 더 많은 고객이 구매하기 때문이다. 반면에 사용자는 자신의 요구에 집중하는 인터페이스를 바란다. 예를 들어, Map은 저장할 때 객체 유형을 제한하지 않는다. 따라서 Map이 반환하는 Object를 올바른 유형으로 변환할 책임은 Map을 사용하는 클라이언트에 있다. 또한 Map을 .. 2024. 4. 22.
[클린코드] 7장. 오류 처리 7장. 오류 처리 오류처리는 프로그램에 반드시 필요한 요소 중 하나이다. 오류처리는 프로그램 내의 코드가 여기저기 흩어져 있으면 실제 코드가 하는 일을 파악하기가 거의 불가능하다. 따라서 오류 처리 코드로 인해 프로그램 논리를 이해하기 어렵다면 클린코드라 부르기 어렵다. 오류코드보다 예외를 사용하라 오류코드를 사용하면 호출자 코드가 복잡해진다. 함수를 호출한 즉시 오류를 확인해야 하기 떄문이다. 그래서 오류가 발생하면 예외를 던지는 편이 낫다. (자바에서 예외처리는 던지거나(throws) 잡을 수 있다.(try-catch)) Try-Catch-Finally 문부터 작성하라 Try-Catch-Finally문을 통해 try 블록에서 무슨 일이 생기든지 호출자가 기대하는 상태를 정의하기 쉬워진다. 자바에서는 .. 2024. 4. 19.