캡슐화 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙이 없다. 그러나 비공개 상태를 유지할 온갖 방법을 강구해야 한다. 캡슐화를 풀어주는 결정은 언제나 최후의 보루이기 때문이다. 클래스는 작아야 한다? 함수의 경우 물리적인 행 수로 크기를 측정했지만, 클래스의 경우는 '클래스가 맡은 책임'을 세는 것이다. 클래스의 이름은 해당 클래스 책임을 기술해야 하며 실제로 작명은 클래스의 크기를 줄이는 첫 번째 관문이다. 간결한 이름이 떠오르지 않는다면 필경 클래스의 크기가 큰 것인데, Processor, Manager 등과 같이 모호한 단어가 있다면 클래스에다 여러 책임을 떠안겼다는 증거이다. 또한 클래스의 설명은 if, and, or, but을 사용하지 않고서 25단어 내외..
제대로 된 실제 코드, 그리고 필수적인 제대로 된 테스트 코드 TDD 제 3원칙 1. 실패하는 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 이렇게 작성하게 되면 많은 테스트 코드가 발생하면서 실제 코드와도 맞먹을 수준이 되며 많은 문제를 야기할 수 있다. 단위테스트를 그럼 마구잡이로 작성하게 된다면 어떤 문제가 생길까? 실제 코드의 테스트 속도를 빨라진다. 그러나! 일회성으로만 짰기 때문에 자동화된 단위 테스트를 짜기 쉽지 않다. 왜냐하면 실제 코드가 변화하면 테스트도 변화해야 하는데 테스트 코드가 엉망진창이면 답도 없어지게 된다. 그리고 테스트 통..
인터페이스 제공자와 인터페이스 사용자 간에 긴장이 존재한다. 패키지나 프레임워크 제공자는 적용성을 넓히려고 하지만, 사용자는 자신의 요구를 충족하는 인터페이스만 집중한다. 이러한 경계에서 시스템 경계 충돌이 일어난다. 한 예로 java.util.Map을 살펴보면, Map은 굉장히 다양한 인터페이스로 수많은 기능을 제공한다. 기능성과 유연성이 커 유용하지만 위험도가 큰 편. 그런데 이러한 인터페이스가 프로그램을 만들면서 여러곳으로 넘기고 받게 되면 clear 메서드를 사용해 데이터를 삭제할 수도 있는 것이다. 그 밖에도 삽입 수정 등의 제한도 사라진다는 의미다. 해결 방안으로 캡슐화가 있다. public class Sensors{ private Map sensors = new HashMap(); publi..
변수를 private로 정의하는 이유는 남들이 변수에 의존하지 않게 만드는 것이다. 그런데 우리는 get, set메서드를 통해 당여하게 공개하여 비공개 변수를 외부에 노출하는 것일까? public class Point{ double x; double y; } , public interface Point{ double getX(); double getY(); void setCartestian(double x, double y); ... } interface Point의 경우 자료 구조 이상을 표현하며 클래스 메서드가 접근 정책을 강제한다. 좌표를 읽을 때는 각 값을 개별적으로 읽으나, 좌표 설정 시 두 값을 한번에 설정한다. 반면에 class Point의 경우 개별적으로 읽고 설정이 가능하게 한다. 이를 ..
함수의 라인은 최대한 작게만드는 것이다. 블록과 들여쓰기 다시 말해, if문 else문 while문 등에 들어가는 블록은 한 줄이어야 한다는 의미이며 대부분 이곳에서 함수를 호출한다. 바깥을 감싸는 함수가 작아질 뿐만 아니라, 블록 안에서 호출하는 함수 이름을 적절히 짓는다면 코드의 가독성은 좋아진다. 즉 중첩 구조가 생길만큼 함수를 커지게 해서는 안되며 함수에서 들여쓰기 수준은 1,2단을 넘어서면 안 좋다. 함수는 한가지만 하는 것이 원칙이다.(SRP) 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다. 함수가 확실히 한 가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다. 코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 한 함수 다음에는..
이름은 추상적이나 구체적으로 상상하게 만들고 정형화되게 생각을 묘연하게 만드는 특징이 있다. 코드에서의 이름짓기는 나 뿐만 아니라 모든 사람들에게 쉽게 이해하도록 하는 것이 목표다. 클린 코드 저자는 이름을 잘 짓는 간단한 규칙을 설명한다. **** 1) 의도를 분명히 밝혀라 코드의 함축성 public List getThem(){ List list1 = new ArrayList(); for(int x[] : theList){ if(x[0] == 4) list.add(x); } return list1; } 복잡한 문장은 없지만 맥락 자체가 명시적으로 들어나지 않는다. theList, list1, x, x[0] == 4의 의미의 정보를 모른다. 하지만 지뢰찾기 게임을 만든다는 정보를 제공한다면, theLis..
- Total
- Today
- Yesterday
- Co
- https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
- ㄴ
- https://react.vlpt.us/basic/11-render-array.html
- https://wikidocs.net/68
- https://react.vlpt.us/
- https://jwprogramming.tistory.com/52
- https://velog.io/@juno7803/React%EA%B0%80-%ED%83%9C%EC%96%B4%EB%82%9C-%EB%B0%B0%EA%B2%BD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |