들어가며
- 습관을 들이기 위해 하루 하루 일지를 작성할 예정
Code, 하드웨어와 소프트웨어에 숨어 있는 언어 [찰스 펫졸드]
점자 부호
점자 부호 또한 볼록하거나 평평하거나 로 표현되는 6가지 점이 조합된 단어가 하나의 부호 code
를 의미한다. 여기에서 흥미를 끄는 것은 볼록
하거나 평평
하거나 두가지로 표현되는 2진 binary
라는 것이다. 2진 binary
가 6개가 조합되어 한 단어를 이루므로 2^6=64
가지의 부호 code
를 나타낼 수 있다. 또한 64가지의 부호 Code
는 문맥
에 따라 그 의미가 다르게 표현도 가능하다. 중요한 것은 이 점자 부호에 시프트 shift
개념이 존재하는데, 이 부호들은 부호 뒤에 나오는 부호의 의미를 숫자에서 문자로 문자에서 숫자로 전환 시킨다. 이처럼 2진 binary
개념이 곳곳에서 사용되고 쓰이는 것을 보며, 좀 놀라웠다. 단순히 0과 1의 세계가 흥미롭게 활용되는 부분을 보며…
전등을 분해해 봅시다.
- 전자론, 전기란 전자의 움직임으로 발생한다.
- 으악… 회로 이야기가 나온다…
- 회로 또한 스위치가 존재하며, 끈다 켠다의 이분법
2진 binary
가 존재한다.
다른 방법을 찾아 봅시다.
전선과 전구, 스위치를 이용해 친구의 집과 연결하고, 모스 부호를 통해 통신한다. 통신의 기원에 대한 설명, 그리고 기술의 발전에 대한 설명
전신과 릴레이
전신 telegraph; 사전적 의미는 원격 기록
의 개념 자체는 1800년대에 널리 퍼져 있었음. 전선으로 연결된 한쪽 끝에 어떤 일을 하면 그것이 전선의 맞은편에서 어떤 일을 유발 시킬 수 있다.
는 전기의 원리를 이용한다.
강철 막대기에 얇은 전선을 수백 번 감고 전선에 전류를 흘리면, 강철 막대기가 자석처럼 동작한다. 이런 장치를 전자석이라 한다.
호오… 참으로 사소한 것, 몰랐던 것, 무심코 그냥 지나쳤던 것들을 모두 엮어내 부호 Code
에 대한 큰 그림을 설명하고 있는 것 같다.
새뮤얼 모스는 1844년 5월 24일 전신을 이용해 워싱턴 DC와 메릴랜드 주 볼티모어 사이에 연결된 전선으로
놀라운 하나님의 작품;민수기 23장 23절의 일부
를 전달한다.
전신의 발명은 본격적으로 현대적인 통신이 시작되었음을 알리는 사건.
여기서 사용된 전선은 구리선으로 무한정 늘릴수 없기 떄문에 **릴레이** 시스템이 사용된다.
그림과 같이 봐야 정상적으로 이해되는 내용으로 이 중계기 또는 릴레이 시스템은 리피터 repeater
라 부르거나 릴레이 relay 또는 계전기
라고도 한다.
이 릴레이는 매우 중요한 장치인데, 일종의 스위치 이지만, 사람의 손이 아닌 전류에 의해 스위치를 제어하며, 이 장치를 이용해 컴퓨터
또한 만들어 낼 수 있다.
테스트 주도 개발로 배우는 객체 지향 설계와 실천 [스티브 프리먼, 냇 프라이스]
객체 간의 의사 소통 기법을 얘기하는데 메시지를 따르라
라고 한다. 이 메시지를 따르라라는 내용이 이해가 안돼 몇번 읽었다. 시점에 따라, 시야에 따라 이러한 메시지를 따르는
의사소통 기법 및 구현 기법이 달라진다. 즉, 설계도 달라질 수도 있다는 얘기를 했다.
역할, 책임, 협력자
객체를 역할, 책임, 협력자라는 측면에서 생각하라. - 워프 브록, 맥킨 객체는 하나 이상의 역할을 구현한 것이며, 역할은 관련된 책임의 집합이며, 책임은 어떤 과업을 수행하거나 정보를 알아야할 의무를 말한다. 인덱스 카드를 활용하라.
묻지 말고 말하라, 디미터의 법칙
객체를 분리해서 구분하고, 서로 메시지를 따르게끔, 구현하는 것은 이해가 되는데, 묻지 말고 말하라는 얼추 한번에 이해가 되지 않아, 머리를 싸맷다. 흔히 볼수 있는 메소드 호출의 예로
father.giveMeOneDolar()
을 보면 되겠다. 아버지에게 1달러를 달라고 호출 하는 것이다.
목 (Mock)
목 객체를 사용만 할 뿐이지, 왜 어떻게 얼마나 잘 활용할수 있는지에는 관심이 없었다. 이 장에서는 기초적인 목 객체의 사용법을 이론적으로 풀어내고 있는데, Stub
개념은 아직까지는 잘 모르겠고, 모조 객체
를 이용해 실제 객체를 생성하고 실제 객체의 테스트할 부분은 이렇게 동작할 것이다. 라고 단정
지은 후 실제로 모조 객체가 단정문으로 호출이 되었는지 검사할 수 있다.
3장 도구 소개
jUnit과 JMock2를 기반으로 햄크레스트 등등 단정문 사용법, 애노테이션을 이용해 Exception 발생 테스트 기법등을 소개하고 있다. 또한 JMock2를 소개하고 있는데, JMock2의 핵심 개념은 모조 객체
, 목 객체
, 예상 구문
이다.
4장 테스트 주도 주기 시작
내가 필요로 했던 부분이 나왔다. 자세하게는 나오지 않았지만, 기존 시스템
을 대상으로 한 개발에 대한 짧은 코멘트 이다. 기존 시스템을 대상으로 TDD를 시작하는 절차는 새 시스템에 TDD를 적용하는 것과 근본적으로 다르지 않다는 코멘트이다. 만약 회귀성을 파악할만한 테스트가 없다고 해서 시스템을 뜯어 고쳐 테스트를 추가하는 것은 굉장히 위험한 일이라고 얘기한다. 가장 안전하게 시작하는 방법은 빌드, 배포 과정을 자동화 한 뒤 변경 하고자 하는 전 구간 테스트를 추가하는 것이다.
이렇게 해서 코드 영역을 보호해 두면 좀더 확신을 갖고 기능을 추가할때마다 코드를 리팩터링하고 단위 테스트를 도입하면서 내부 품질 문제를 해결해 나갈수 있을거라고 얘기한다.
실용주의 프로그래머 [앤드류 헌트, 데이비드 토머스]
중복의 해악, 직교성 Orthogonality, 가역성 Reversibility, 예광탄 Tracer Bullets, 프로토 타입과 포스트잇, 도메인 언어 Domain Language, 추정 Estimating
중복의 해악
강요된 중복, 부주의한 중복, 참을성 없는 중복, 개발자간의 중복
직교성
독립성 independence
,결합도 분리 decoupling
- 하나가 바뀌어도 나머지에 어떤 영향도 주지 않으면 서로 직교한다.
- 직교성은 변화가
국소화 localize
된다. 재사용을 촉진한다.
벤더 의존
벤더사에 의존적인 코드는 인터페이스를 통해 깨끗하게 분리하라.
개발은 슈뢰딩거의 고양이이다. 최종 결정이란 것은 없으며, 미리 방지하라.
Reference
- 찰스 펫졸드, 『 Code, 하드웨어와 소프트웨어에 숨어있는 언어 』, 인사이트(2010 10 11), 인용.
- 스티브 프리먼, 냇 프라이스 지음, 이대엽 옮김, 『 테스트 주도 개발로 배우는 객체 지향 설계와 실천 』, 인사이트(2013 06 20), 인용.
- 앤드류 헌트, 데이비드 토머스 지음, 김창준, 정지호 옮김, 『 실용주의 프로그래머 』, 인사이트(2005 08 02), 인용.