Advanced Search
Search Results
17 total results found
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 나쁜 코드 우리는 모두 나쁜 코드를 짠 경험이 있을 것이다. 이유는 아마 급해서, 코드 짤 시간이 없어서 등등 많은 이유가 있겠지만, 결국 나중에 수정하겠지라는 가벼운 생각을 가졌을 것이라고 생각한다. 나중이라는 것은 없었다. 나쁜 코드는 개발 속도를 크게 떨어트린다. 매번 코드를 고칠 때마다 엉뚱한 곳에서 문제가 생기고, 얽힌 코드에서 또다시 얽힌 코드를 덭붙인다. 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 생산층은 ...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 의도를 분명히 밝혀라 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다. 따로 주석이 필요하다면 의도를 분명히 드러내지 못했다는 것이다. 예시1 변경 전 int d; // 경과 시간 (단위: 날짜) 이름 d는 아무 의미도 드러나지 않는다. 변경 후 int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification;...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 의도를 분명히 표한하는 함수를 어떻게 구현할 수 있을까? 함수에 어떤 속성을 부여해야 처음 읽는 사람이 프로그램 내부를 직관적으로 파악할 수 있을까? 작게 만들어라! 함수를 만드는 첫째 규칙은 '작게!' 이다. 함수를 만드는 둘째 규칙은 '더 작게!'이다. 얼마나 짧아야 좋을까? 블록과 들여쓰기: if문, else문, while문 등에 들어가는 블록은 한 줄이어야 한다는 의미다. 이 말은 중첩 구조가 생길 만큼 함수...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 나쁜 코드에 주석을 달지 마라. 새로 짜라. 우리는 코드로 의도를 표현하지 못해, 그러니까 실패를 만회하기 위해 주석을 사용한다. 주석은 언제나 실패를 의미한다. 이유란? 프로그래머들이 주석을 유지하고 보수하기란 현실적으로 불가능하니까. 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 표현력이 풍부하고 깔끔하고 주석이 거의 없는 코드가 주석이 많은 코드보다 훨씬...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 형식에 맞추는 목적 코드 형식은 의사소통의 일환이기 때문에 중요하다. 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 매우 높다. 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 원래 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. 적절한 행 길이를 유지하라 세로길이(지금은 파일 크기만 고려) 500줄을 넘지 않고 200줄 정도인 파일로도 커다란 시스템을 구축할 수 ...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 변수를 비공개로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶기 때문이다. 그렇다면 어째서 수많은 프로그래머가 조회 함수와 설정 함수를 당연하게 공개해 비공개 변수를 외부에 노출할까? 자료 추상화 변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다. 그저 조회 함수와 설정 함수로 변수를 다룬다고 클래스가 되지는 않는다. 그보다는 추상 인터페이스를 제공해...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다. 때로는 패키지를 사고, 때로는 오픈소스를 이용한다. 어떤 식으로든 이 외부 코드를 우리 코드에 깔끔하게 통합해야만 한다. 외부 코드 사용하기 패키지 제공자와 인터페이스 사용자 사이에는 특유의 긴장이 존재한다. 패키지 제공자나 프레임워크 제공자는 적용성을 최대한 넓히려 애쓴다. 반면, 사용자는 자신의 요구에 집중하는 인터페이스를 바란다. 이런 긴장으로 인해 ...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 상당수 코드 기반은 전적으로 오류 처리 코드에 좌우된다. 여기서 좌우된다는 표현은 코드 기반이 오류만 처리한다는 의미가 아니다. 여기저기 흩어진 오류 처리 코드 때문에 실제 코드가 하는 일을 파악하기가 거의 불가능하다는 의미다. 오류 코드보다 예외를 사용하라 예외를 지원하지 않는 프로그래밍 언어가 많았었는데, 오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 방법이...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 TDD 법칙 세 가지 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙: 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 위 세가지 규칙을 따르면 개발과 테스트가 대략 30초 주기로 묶인다. 테스트 코드와 실제 코드가 함께 나올뿐더러 테스트 코드가 실제 코드보다 불과 몇 초 전에...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 클래스 체계 정적 공개 상수가 있다면 맨 처음에 나온다. 다음으로 정적 비공개 함수가 나오며, 이어서 비공개 인스턴스 변수가 나온다. 공개 변수가 필요한 경우는 거의 없다. 변수 목록 다음에는 공개 함수가 나온다. 비공개 함수는 자신을 호출하는 공개 함수 직후에 넣는다. 즉, 추상화 단계가 순차적으로 내려간다. 캡슐화 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 때로는 변...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 도시를 세운다면? 도시를 세운다면? 온갖 세세한 사항을 혼자서 직접 관리할 수 있을까? 불가능하다. 수도 관리 팀, 전력 관리 팀, 교통 관리 팀, 치안 관리 팀, 건축물 관리 팀 등 각 분야를 관리하는 팀이 있기 때문에 잘 돌아간다. 도시가 잘 돌아가는 또 다른 이유는 적절한 추상화와 모듈화 때문이다. 그래서 큰 그림을 이해하지 못할지라도 개인과 개인이 관리하는 구성요소는 효율적으로 돌아간다. 시스템 제작과 시...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 각자 해당 챕터에서 중요하다고 느낀 개념이나 아이디어를 간략하게 정리하고 개선 전, 후에 대한 예시 코드를 비교하며 개념을 설명합니다. 창발적 설계로 깔끔한 코드를 구현하자 대다수는 켄트 벡이 제시한 단순한 설계 규칙 네가지가 소프트웨어 설계 품질을 크게 높여준다고 믿는다. 켄트 벡은 다음 규칙을 따르면 설계는 단순하다고 말한다 모든 테스트를 실행한다 중복을 없앤다 프로그래머 의도를 표현한다 클래스와 메서드 수를 최소로...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 동시성과 깔끔한 코드는 양립하기 어렵다. 동시성이 필요한 이유? 동시성은 결합을 없애는 전략이다. 즉, 무엇과 언제를 분리하는 전략이다. 스레드가 하나인 프로그램은 무엇과 언제가 서로 밀접하다. 무엇과 언제를 분리하면 애플리케이션 구조와 효율이 극적으로 나아진다. 따라서 시스템을 이해하기가 쉽고 문제를 분리하기도 쉽다. 예를 들어, 웹 애플리케이션이 표준으로 사용하는 서블릿 모델을 살펴보자. 서블릿은 웹 혹은 EJB 컨테...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 프로그램을 짜다 보면 종종 명령행 인수의 구문을 분석할 필요가 생긴다. 편리한 유틸리티가 없다면 main 함수로 넘어오는 문자열 배열을 직접 분석하게 된다. 내 사정에 딱 맞는 유틸리티가 없다면? 직접 짜겠다고 결심한다. 새로 짤 유틸리티를 Args라 부르겠다. Args 구현 잘 짜여진 Args 예시 package com.objectmentor.utilities.args; import static com.objec...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 JUnit 프레임워크 문자열 비교 오류를 파악할 때 유용한 코드. Com-parisonCompactior라는 모듈로, 영리하게 짜인 코드이다. 아래는 테스트 코드이다. ComparisonCompactorTest.java package junit.tests.framework; import junit.framework.ComparisonCompactor; import junit.framework.TestCase; pub...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 첫째, 돌려보자 SerialDateTests라는 클래스는 단위 테스트 케이스 몇 개를 포함한다. 돌려보면 실패하는 케이스는 없다. 하지만 테스트 케이스를 훑어보면 모든 경우를 점검하지 않는다는 사실이 드러난다. 코드 커버리지 분석 도구인 클로버를 이용해 단위 테스트가 실행하는 코드와 실행하지 않는 코드를 조사했다. 대략 50% 정도였다. 클래스를 철저히 이해하고 리팩터링하려면 훨씬 높은 테스트 커버리지가 필요했다. ...
진소희
1. 📌 핵심 개념 정리 ✅ 요약하기 주석 c1: 부적절한 정보 다른 시스템에 (예를 들어, 소스 코드 관리 시스템, 버그 추적 시스템, 이슈 추적 시스템, 기타 기록 관리 시스템에) 저장할 정보는 주석으로 적절하지 못하다. 일반적으로 작성자, 최종 수정일, SPR번호 등과 같은 메타 정보만 주석으로 넣는다. 주석은 코드와 설계에 기술적인 설명을 부연하는 수단이다. c2: 쓸모 없는 주석 쓸모 없어질 주석은 아예 달지 않는 편이 가장 좋다. 코드와 무...