데이터중심 애플리케이션 설계 - 3장 [저장소와 검색] 리뷰 - 1

    3장을 읽으며 발췌 및 정리하면 좋을 내용들에 대해서만 정리하였다. DB의 작업 data 저장 data 요청시, 제공 개발자가 DB 내 저장 및 검색 처리 방법을 주의해야 하는 이유 : - 처음부터 저장소 엔진을 구현하는 것이 아닌, 사용 가능한 여러 저장소 엔진 중 가장 적합한 엔진을 선택해야 하기 때문 ex_ transaction 작업 부하에 맞추어 최적화된 저장소 엔진과 분석을 위해 최적화된 엔진 간의 차이는 크다. 로그 구조 계열 저장소 엔진(Log-structured) - ex) B-tree 페이지 지향 계열 저장소 엔진(Page-Oriented) DB 를 강력하게 만드는 데이터 구조 일반적으로 많은 DB는 내부적으로 추가 전용(append-only) 데이터 파일인 로그(log)를 사용 로그 -..

    데이터중심 애플리케이션 설계 - 2장 [데이터 모델과 질의 언어]

    데이터 모델과 질의 언어 데이터 모델 소프트웨어 개발에서 제일 중요한 부분 SW가 어떻게 작성되었는지, 해결하려는 문제를 어껗게 생각해야하는 지에 대한 영향 대부분의 어플리케이션 : 하나의 데이터 모델을 다른 데이터 모델 위에 계층을 둬서 생성 각 계층의 핵심적인 문제 : 하위 계층 관점에서 데이터 모델을 표현하는 방법 ex: 개발자는 현실을 통해 객체/자료구조/데이터 구조를 다루는 API를 모델링 -> 이러한 구조는 어플리케이션에 특화 데이터 구조 저장 : JSON, XML, RDB Table, Graph Model과 같은 범용 데이터 모델로 표현 각 계층은 명확한 데이터 모델을 제공하여 하위 계층의 복잡성을 숨긴다. 추상화 다양한 데이터 모델 -> 각 데이터 모델은 사용 방법에 대한 가정을 나타낸다...

    객체는 인터페이스를 사용해 참조하라

    cf) Item.51 : 매개변수 타입으로 클래스가 아닌, 인터페이스를 사용하라 → 객체는 클래스가 아닌 인터페이스로 참조하라로 확장 적합한 인터페이스만있다면 매개변수뿐 아니라, return, 변수, 필드를 전부 인터페이스 타입으로 선언하자 실제 클래스를 사용해야 할 상황은 오직 생성자로 생성할 때뿐이다. 인터페이스를 타입으로 사용하는 습관은 프로그램을 훨씬 유연하게 만들어 준다 // Good Set sonSet = new LinkedHashSet(); Set sonSet = new HashSet(); //유연하게 변경가능 // Bad LinkedHashSet sonSet = new LinkedHashSet(); 인터페이스를 타입으로 사용하면 이후 구현 클래스를 교체할 때 새 클래스의 생성자(혹은 다른 ..

    문자열 연결은 느리니 주의하라

    String + String 에서의 + : 문자열 연결 연산자는 여러 문자열을 하나로 합쳐주는 편리한 수단 단 한 줄짜리 출력값 혹은 작고 크기가 고정된 객체의 문자열을 표현할 때만 사용하자 문자열은 불변이기 때문에 두 문자열을 연결할 경우에는 양쪽의 내용을 모두 복사해야하므로, 문자열 연결 연산자를 통한 문자열 n개의 연산은 O(n^2)이다. 예시 // 청구서의 item을 전부 하나의 문자열로 연결하는 메서드 // 문자열 연결을 잘못 사용한 예 - 아이템이 많아지면 많아질수록 성능저하 public String statement() { String result = ""; for (int i = 0; i < numItems(); i++) { result += lineForItem(i); } return r..

    다른 타입이 적절하다면 문자열 사용을 피하라

    String(문자열) - Text를 표현하도록 설계되고, 자바가 잘 지원해주는 타입 하지만 워낙 자바에서 너무 잘 지원해주어서, 원래의 의도대로 사용되지 않는 경향이 있으며, 이럴 때 문자열 사용을 피해야할 사례에 대해서 이야기한다. # 문자열을 쓰지 않아야할 사례 1. 다른 값 타입을 대신해서 문자열을 사용하는 경우 받는 데이터가 수치형 - int, float, BigInteger ... 적당한 수치를 타입으로 변환해서 사용할 것 Y/N 를 나타낼 수 있다면 적절한 열거 타입 혹은 boolean 타입을 사용할 것 즉 기본 타입이든 참조 타입이든 적절한 값 타입이 있다면 그것을 사용하고, 없다면 새로 하나 작성할 것 2. 열거 타입을 대신하여 문자열을 사용할 경우 아이템 34(int 상수 대신 열거 타입..

    박싱된 기본 타입 vs 기본 타입

    Java Data Type 기본 타입 : int , double, boolean .. 참조 타입 : String, List ... 기본 타입과 참조 타입의 차이에 대해서 설명해주세요 더보기 1. 각 타입에 따라 저장되는 값이 다르다. A. 기본 타입 - 변수에는 실제 값이 저장된다. B. 참조 타입 - 배열, 열거, 클래스, 인터페이스를 이용해서 선언된 변수는 메모리 주소 값을 가지게 된다. 2. 해당 값이 저장되는 위치 A. 기본 타입 - Stack B. 참조 타입 - Heap 기본 타입과 박싱된 기본 타입의 차이에 대해서 설명해주세요 더보기 기본타입 : int, double , boolean ... 박싱된 기본 타입 : Integer, Double , Boolean ... 차이점 기본 타입은 값만 ..

    정확한 답과 계산을 해야한다면 float와 double은 피하라

    float, double 과학과 공학 계산용으로 설계된 타입 이진 부동소수점 연산에 사용되며, 넓은 범위의 수를 빠르고 정밀한 "근사치" 계산을 위해 세심하게 설계 → 따라서 float과 double 타입은 특히 금융 관련과 같은 정확한 답이 필요한 계산에서는 사용하기 적절치 않다. ex) 정확한 값을 구해야할 때 double, float을 사용하는 경우 // Q1. 1.03달러가 있을 때 그중 42센트를 사용할 경우 얼마가 남았을까? System.out.println(1.03 - 0.42); // -> result : 0.6.10000000000000001 // Q2. 1달러로 10센트짜리 사탕 9개를 살 경우에 얼마가 남았을까? System.out.println(1.00 - 9 * 0.10); // ..

    CleanCode - 17.냄새와 휴리스틱

    휴리스틱 불충분한 시간이나 정보로 인해 합리적인 판단을 할 수 없거나, 체계적이면서 합리적인 판단이 굳이 필요하지 않은 상황에서 사람들이 빠르게 사용할 수 있도록 보다 용이하게 구성된 간편 추론의 방법 문제의 답을 경험 법칙, 경험에 의한 추측, 직관적 판단, 상식, 시행착오 등의 방법을 사용하여 구하는 것 알고리즘 (논리적 해답) 여기서 나쁜 냄새가 난다 주석 (Comment) C1 - 부적절한 정보 다른 시스템에 저장할 정보는 주석으로 작성하지 말자 주석은 코드와 설계에 기술적인 설명을 부연하는 수단 C2 - 쓸모 없는 주석 오래되거나 엉뚱하거나, 잘못된 주석은 과감하게 버리고, 재빨리 삭제하자 C3 - 중복된 주석 클린코드 앞서서도 언급한 것처럼 주석이 아닌 코드로 표현하려고 노력하는 것이 좋다. ..