2015년 4월 21일 화요일

[Clean Code] Chapter06-09


Clean Code ch.06 ~ 09

Chapter.06 객체와 자료구조

  • 변수를 private 선언을 하더라도 각 값마다 get,set 함수를 제공한다면 구현을 외부로 노출하는 셈이다. 변수 사이에 함수라는 계층을 넣는다고 구현이 감춰지지는 않는다. 구현을 감추려면 추상화가 필요하다. 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정의 의미의 클래스다.

    구체적인 Vehicle 클래스

      public interface Vehicle{
          double getFeulTankCapacityInGallons();
          double getGallonsOfGasoline();
      }
    

    추상적인 Vehicle 클래스

      public interface Vehicle{
          double getPercentFuelRemaining();
      }
    
  • 객체와 자료구조

    • 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개
    • 자료구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.

      객체 지향적인 도형 클래스

      public class Squae implements Shape{
        private Point topLeft;
        private double side;
      
        public double area(){
        return side*side;
        }
      }
      
      public class Rectangle implements Shape{
        private Point topLeft;
        private double height;
        private double width;
      
        public double area(){
        return height*width;
        }
      }
      
    • 자료구조를 사용하는 절차적인 코드는 기존 자료구조를 변경하지 않으면서 새 함수를 추가 하기 쉽지만 새로운 자료구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다.
    • 객체지향코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다. 새로운 함수를 추가하기 어렵다. 그러면 모든 클래스를 고쳐야 한다.
  • 디미터 법칙

    • 한 객체가 다른 객체의 구조를 알지 못하도록 한다.
    • 객체의 모든 메소드는 다음에 해당하는 메소드만 호출 할 수 있다
      • 객체 자신의 메소드
      • 메소드의 매개변수로 넘어온 인자의 메소드
      • 메소드 내부에서 생성 된 객체의 메소드
      • 메소드가 포함하고 있는 객체의 메소드
  • 자료전달 객체

    • 자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스다. 이런 자료 구조체를 때로는 자로 전달 객체 Data Transfer Object라 한다.
  • 객체는 동작을 공개하고 자료를 숨긴다. 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기는 쉬운 반면, 기존 객체에 새 동작을 추가하기는 어렵다.
  • 자료구조는 별다른 동작 없이 자료를 노출한다. 그래서 새 동작을 추가하기는 쉬우나 기존 함수에 새 자료구조를 추가하기는 어렵다.

Q.객체와 자료구조?
여기서 말하는 자료구조는 C언어에서의 자료구조.
Q.디미터법칙 : 디미터 버칙에서 허용된 메서드가 반환하는 객체의 메서드는 호출하면 안된다?
최근에는 라이브러리 정리가 잘 처리됨에 따라서 괜찮음..


Chapter 07. 오류처리

  • 오류 코드보다 예외(try-catch)를 사용
  • 미확인 예외를 사용

    • 확인된 예외는 OCP open closed principle 원칙을 위반. (OCP: 소프트웨어 개발 작업에 이용된 많은 모듈 중에 하나에 수정을 가할 때 그 모듈을 이용하는 다른 모듈을 줄줄이 고쳐야 한다면, 이와 같은 프로그램은 수정하기가 어렵다. 개방-폐쇄 원칙은 시스템의 구조를 올바르게 재조직(리팩토링)하여 나중에 이와 같은 유형의 변경이 더 이상의 수정을 유발하지 않도록 하는 것이다. 개방-폐쇄 원칙이 잘 적용되면, 기능을 추가하거나 변경해야 할 때 이미 제대로 동작하고 있던 원래 코드를 변경하지 않아도, 기존의 코드에 새로운 코드를 추가함으로써 기능의 추가나 변경이 가능하다.)
  • 예외에 의미를 제공

    • 오류메시지에 정보를 담에 예외와 함께 던진다. 실패한 연산 이름과 실패 유형 언급
  • 호출자를 고려해 예외 클래스를 정의

    • 호출하는 라이브러리 API를 감싸면서 예외 유형 하나를 반환.
  • null 반환 하지 마라

    • null을 반환하고 싶다면 그 대신 예외를 던지거나, 특수 사례 객체를 반환한다. 사용하려믄 외부 API가 null을 반환한다면 감싸기 메서드를 구현해 예외르 던지거나 특수 사례 객체를 반환하는 방식을 고려

감싸기메서드?


Chapter 08. 경계

외부 코드를 우리코드에 깔끔하게 통합해야한다. 이 장에서는 소프트웨어의 경계를 깔끔하게 처리하는 기법.

  • 외부라이브러리를 사용하려면 문서를 읽으며 사용법을 결정한다.
  • 외부라이블러리를 테스트한다.
  • 경계에 위치하는 코드는 깔끔히 분리한다. 통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는편이 좋다.
  • 외부패키지를 호출하는 코드를 가능한 줄여 경계를 관리하자. 새로운 클래스로 경계를 감싸거나 아니면 ADAPTER패턴을 사용해 우리가 원하느 인터페이스를 패키지가 제공하는 인터페이스로 변환하자.

Chapter 09. 단위테스트

  • TDD의 세가지 법칙

    • 실패하는 단위 테스트를 작성할때까지 실제 코드를 작성하지 않는다
    • 컴파일은 실패하지 않으면서 실행이 실패하는 정도만 단위테스트 작성한다
    • 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.
  • 테스트는 FIRST

    • Fast
    • Independent
    • Repeatable
    • Self-Validating
    • Timely
  • Test 당 assert 하나

출저 클린코드. by밥아저씨

2015년 4월 14일 화요일

우분투 나눔고딕코딩 설치



네이버 문서 참조!

     * http://dev.naver.com/projects/nanumfont/wiki/Install



나와같은 경우에는 defoma (폰트매니져) 가 없다고 에러가 났는데.. 설치는 되어있다.. 뭐지...
보아하니 defoma 라는 패키지는 우분투 12.04 버전 혹은 11 . 버전에서 있었던것같은데..
ㅠㅠ 정말 무지해서 괴롭다.. 

2015년 4월 13일 월요일

우분투14.04. virtualbox 4.3.10 USB 연결


우분투 14.04 virtualbox 4.3.10 usb 인식

  1. extention 설치

extention설치하면 enable usb~~ 가면 자동으로 인식되야 하는게 맞는데, 그게 안된다면 2번으로.

  1. 그래도 usb 인식이 안된다면

[클린코드] chapter01~06 정리


Clean Code

chapter 01.깨끗한 코드

이 장에서는 깨끗한 코드에 대한 명사들의 생각과 저자인 밥아저씨의 견해를 담았다.

  • C++창시자인 비야네 스트롭스트룹

    • 나는 우아하고 효율적인 코드를 좋아한다. 논리가 간단해야 버그가 숨어들지 못한다. 의존성을 최대한 줄여야 유지보수가 쉬워진다. 오류는 명백한 전략에 의거해 철저히 처리한다. 성능을 최적으로 유지해야 사람드이 원칙없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다 깨끗한 코드는 한 가지를 제대로 한다
  • 그래디 부치

    • 깨끗한 코드는 단순하고 직접적이다. 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.
  • Big 데이븐 토마스

    • 깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다. 단위 테스트 케이스와 인수 테스트 케이스가 존재한다. 깨끗한 코드에는 의미있는 이름이 붙는다. 특정 목적을 달성하는 방법은 하나만 제공한다. 의존송은 최소이며 각 의존성을 명확히 정의한다. API는 명확하며 최소로 줄였다. 언어에 따라 필요한 모든 정보를 코드만으로 명확히 표현할 수 없기 대문에 문학적으로 표현해야 마땅하다.
  • 마이클 페더스

    • 깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다. 고치려고 살펴봐도 딱히 손 댈 곳이 없다. 작성자가 이미 모든 사항을 고려했으므로.
  • 론 제프리스

    • 모든테스트를 통과한다
    • 주옥이 없다
    • 시스템 내 모든 설계 아이디어를 표현한다
    • 클래스, 메서드, 함수 등을 최대한 줄인다.
  • 워드 커닝햄

    • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다. 코드가 그 문제를 풀기위한 언어처럼 보인다면 아름다운 코드라 불러도 되겠다.
  • 저자 밥아저씨(로버트 C 마틴)

    • 이 책에서 말하겠다..ㅎㅎ
  • 보이스카우트 법칙 : 캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라!

Chapter02. 의미 있는 이름
  • 의도를 분명히 밝혀라.
    • 가장 쉬워보이지만 어려운 규칙이라고 생각. 이름만으로 내가 하고자하는 것을 분명히 밝히는것.
  • 클래스 이름은 명사, 메서드 이름은 동사
Chapter03. 함수
  • 함수는 작게

    • 중첩구조가 생길만큼 함수가 커지면 안된다. : 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다.
  • 한가지만 해라

    • 함수를 만드는 이유는 큰 개념을 다름 추상화 수준에서 여러단계로 나눠 수행하기 위함.
  • 함수당 추상화 수준은 하나로

    • 함수가 한가지 작업만 하려면 함수 내 문장이 추상화 수준이 동일 해야한다.
  • 위에서 아래로, 내려가기 규칙

    • 코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다. 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한번에 한 단계칙 낮아진다. 이런걸 내려가기 규칙.
  • switch문

    • switch문을 저차원 클래스에 숨기고 절대로 반복하지 않는 방법은 다형성을 이용하는 것.
  • 서술적인 이름 사용

  • 함수인수

    • 이상적인 인수 개수는 0개다. 다음은 1개, 다음은 2개다. 3개 이상은 피하는 것이 좋다. 4개 이상은 특별한 이유가 필요하다.

    • 플래그 인수는 안좋다. 왜냐면 함수가 한가지만 하는 규칙을 위반하는것이기 때문이다. 나누는게 좋다?

  • 부수효과를 만들지 말아라(함수가 결과값 외에 다른 상태로 변경하는 것)

  • 명령과 조회를 분리

    • 함수는 뭔가를 수행하거나 답하거나 둘 중 하나만 한다.
    • 객체 상태를 변경하거나, 객체 정보를 반환하거나 해야한다. 둘다하면 안된다.
  • 오류코드 보다 예외를 사용.

  • 반복하지 마라!!!! 객체지향 프로그래밍은 코드를 부모 클래스로 몰아 중복을 없앤다.
  • 구조적 프로그래밍. 함수는 return문이 하나여야 하며, 루프 안에서 break, continue 를 사용해선 안된다. (함수를 작게 만드면 간혹 가능하다)
  • 함수를 어떻게 짜죠?
    • 소프트웨어 짜는 행위는 글짓기와 비슷하다. 논문이나 기사를 작성할때는 먼저 생각을 기록한 후 읽기 좋게 다듬는다. 초안은 대개 서투르고 어수선 하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리하다.
    • 처음에는 길고 복잡하고 들여쓰기 단계도 많고 중복 르푸도 많고, 인수 목록도 길다 하지만 나는 그 서투른 코드를 빠짐없이 테스트 하는 단위테스트 케이스도 만든다. 그런다음 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거하고, 메스드를 줄이고 순서를 바꾼다. 때로는 전체 클래스를 쪼갠다. 이와중에도 코드는 항상 단위 테스트를 통과한다.
Chapter04. 주석

주석이 필요없는 것이 가장 좋다. 주석을 다는 것은 실패를 만회하는 거나 다름 없다. 그러므로 주석이 필요한 상황에 처하면 곰곰히 생각하라. 상황을 역전해 코드로 의도를 표현할 방법이 없는지 생각한다.

그래도 주석을 달아야 한다면,

  • 법적인 주석 : 저작권
  • 의미를 명료하게 밝히는 주석
  • TODO주석
  • 중요성 강조하는 주석
Chapter05. 형식맞추기
  • 적절한 행길이 : 짧을수록 좋고 200줄을 넘지 앟는다 (더 짧아야하는걸로 알고 있는데..)
  • 신문기사처럼 작성 : 최 상단에는 큰 개념, 내려갈수록 작은 개념으로.
  • 서로 밀접한 개념은 세로로가까이.
  • 변수는 최대한 가까이.
    • 인스턴스 변수는 처음에
    • 종속함수는 호출하는 함수를 호출되는 함수보다 먼저 배치
  • 가로 형식 맞추기. 120자 정도.
  • 들여쓰기.

<출저: 클린코드, 로버트 C. 마틴, 인사이트>