Dec 26, 2017 - codespitz73_part1

코드스피츠73 part1

코드짤때 LINT TIME(IDE에서 에러를 보여줌) 컴파일 할때 COMPILE TIME(컴파일 시에 에러를 보여줌) 런타임 RUN TIME(실행중일때 에러)

현대 패러다임 런타임 스크립트(자바 스크립트..)

복잡성을 정복하는것은 격리

lexical grammar

  • control character 제어문자
  • white space 공백문자
  • line terminators 개행문자
  • comments 주석
  • keyword 예약어
  • literals 리터럴

language element

  • statements 문(공문, 식문, 제어문, 선언문 단문, 중문)
  • expression 식(값식, 연산식, 호출식)
  • identifier 식별자(기본형, 참조형 변수 메모리 복사, 상수 메모리 참조)

공문

;;;;

식문

3-4;

3;2;1;

연산식

연산자의 목적 - 자바스크립트 11가지

단항,이항,삼항,다항연산자(1,2,3,4), 우선순위 연산자, 호출식 연산자

FLOW

폰노이만 머신이 한번에 적재되어 있는 메모리에 적제되어 있는 프로그램이 한번에 실행 되는것

SYNC FLOW

동기화 되서 한번에 소모 되고 있는 상황 멈출수 없음

연산자 우선순위

수학적 지식을 기반으로 오판하는 코드를 만들지 말아라 35/24

((35)/2)4

(35)/(24)

루틴(Routine) vs 코루틴(Coroutine)

루틴은 엔트리 포인트가 하나인 서브루틴이다.

코루틴은 엔트리 포인트가 여러개인 서브루틴이다.

제어문에서 여러가지 표현이 있는경우

굴러만 간다고 코드가 아니다. 자신의 의도를 잘표현 하기 위해서 여러가지 문법이 존재함 자신의 의도를 섬세하게 표현하자

참조


Dec 26, 2017 - POP_part4

원칙 프로그래밍 가이드 라인

OCP(Open-Closed Principle)

코드는 확장에 열려 있고 수정에 대해서는 닫혀있는 2가지 속성을 동시에 충족하도록 설계한다. 확장에 대해서 열려있다는 말은 코드의 동작을 확장할 수있다는 의미이다. 수정에 대해서 닫혀 있다는 말은 코드의 동작을 확장하더라도 그 밖의 코드는 전혀 영향을 받지 않는다는 의미이다.

코드의 변경에 유연하게 대응한다.

어떤 소프트웨어든 계속 살아 있는 한 변화한다. 더구나 소프트웨어의 수명은 예상보다 길어지는 경향이 있다. 변화의 노출 되어도 장기적으로 안정된 소프트웨어를 설계해야 한다. 경직된 설계는 깨지기 쉬운설계 코드에 인터페이스를 사용해서 설계하자

OCP의 적용범위

모든부분에 적용을 하는것은 코드만 복잡해 진다.

OCP를 구현하는 대표적인 기술이 객체지향의 다형성이다.

GRASP (General Responsibility Assignment Software Patterns or Principles) 책임할당 패턴? 원칙?

패턴인가 원칙인가?

  1. Controller
  2. Creator
  3. High cohesion
  4. Indirection
  5. Information expert
  6. Low coupling
  7. Polymorphism
  8. Protected variations
  9. Pure fabrication

Naming is important

코드에서 명명은 가장 중요한 과제

적절한 이름을 붙일수 있으면 해당 요소가 달성 해야할 역활에 대해서 프로그래머 자신이 충분히 이해 했다는 뜻. 코드는 읽는 사람이 작성한 사람의 대화이다 이름이 적절하지 않으면 코드상의 대화가 성립되지 않는다. 이름은 코드를 읽는 사람의 UI다.(코드 암호화에 이름을 이상하게 바꾸는 경우도 있다)

코드를 작성하기 전에 이름을 먼저 정하자

  1. 이름을 짧은 주석이라고 생각하자.
  2. 이름을 오해받지 않도록한다. 오해를 줄이기 위해 프로그래밍 언어의 관행을 알고 거기에 익숙해지는것이 필요
  3. 이름이 효과와 목적을 설명하도록한다. 수단으로는 언급하지 않는다.
  4. 이름을 스스로 점검해보고 싶으면 테스트 코드를 작성하자.
  5. 이름은 발음 가능한것으로 한다.
  6. 이름은 검색 가능하도록 붙인다.

마인트 매핑을 회피

한글자 짜리 이름을 정하면 해당 이름이 어떤 정보를 가지고 있는지 코드를 가지고 계속 생각해야 하는데 그런것이 읽는 사람을 과부화 시킨다.

루프백 확인

명명에 이름 가역성이라는 개념이 있다. 이름이란 명명의 기반이 된 내용의 설명문을 복원할수 있어야 된다.

설명 -> 이름 -> 설명순으로 한바퀴 돌았을때 그래도 이름이 설명과 일치하면 좋은 이름이다.

참조


Dec 22, 2017 - POP_part3

원칙 프로그래밍 가이드 라인

SLAP(Single Layer of Abstraction Principle)

추상화 수준의 통일

코드수준을 맞춘다.

코드에서 추상화 수준을 분리할 때는 상하 2계층이 아니라 기능 복잡도에 따라서 여러계층으로 분리된다. 각각의 계층에서 자신의 계슻에 속하는 요소에 대해 추상화 수준을 일치시킨다. 추상화수준을 일치시킨 코드는 훌륭한 책과 같다. 훌륭한책은 구성이 면밀하다. 세션에 대한 분활이나 레이아웃에 세심한 배려가 녹아들어 있다. 최고수준이 목차가 되고 최저수준이 본문의 내용이 된다.

아래 코드는 예제 코드 이다.


public boolean isValid(User user) {
         return isUnique(user.username) && containsSpecialCharacters(user.password);
}

public boolean isUnique(String str) {
		Map<Character, Integer> map = new HashMap<Character, Integer>();
		for(int i=0; i<str.length(); i++) {
			char currChar = str.charAt(i);
			if(map.get(currChar) == null){
			    map.put(currChar, 1);
			} else {
			    return false;
			}
		}
		
		return true;
}
	
public boolean containsSpecialCharacter(String s) {
    return (s == null) ? false : s.matches("[^A-Za-z0-9 ]");
}

코드에 요약성과 열람성을 가져다준다.

코드가 수준이 일치된 함수로 분활되어 있으면 요약성과 열람성을 동시에 충족한다. 같은 추상도를 처리하는 식으로 코드가 통일되어 있으면 코드는 막힘없이 흐르고 이해하기 쉽다.

합수를 구조화 하자.

추상화 수준을 일치시킨 작은 단계의 함수로 변환하자. 함수를 구조화하면 각 함수는 자신보다 한단계 낮은 수준의 함수를 호출하는 처리가 중심이 된다. 이처럼 다른 함수를 호출하는 코드로 구성된 함수를 composed method 라고 한다. composed method는 최대한 작은 단위로 쪼갠다. 처리가 한라인일지언정 함수로 만들어도 된다.

SLAP의 적용 범위

SLAP는 함수 뿐만 아니라 모듈등에도 적용이 된다. 높은 수준의 개념은 추상 클레스에서 낮은 수준의 개념은 상속클래스에서 갖게 하는 방법을 취할수도 있다.

SLAP의 순서

SLAP의 작업은 글을 쓸 때의 순서를 참고해 볼 수 있다. 글을 쓸때 ‘내용을 쓰는 것’ 과 ‘내용을 이해하기 쉽게 전하기 위한 구성을 생각하는 것’을 별개로 작업하는 데 있다. 이런 작업 구분은 코드를 작성할때도 마찬가지이다.

코드와 책의 유사성

책의 각구성 요소가 코드에서 어디에 해당하며, 훌륭한 코드를 만들려면 어떻게 해야 될지 고찰해본다

  • 서문

    서문에서는 책의 요지가 제시되며 거시적인 관점에서 책이 어떤 위치에 자리매김헀는지가 설명된다. 이는 코드에서 파일 첫머리의 주석에 해당한다. 주석에는 코드에 기술한 내용을 설명하고 해당 코드가 어느 프로젝트에 속하는지 명기한다.

  • 목차

    목차는 코드에서 함수의 일람에 해당한다. 그렇기 때문에 코드 첫머리에 함수 일람을 나열해야 한다는 주장도 있는데 요즘 IDE에서 잘 지원을해주고 있다.(인텔리제이의 Structure 와 이클립스에서 Outline 에서 볼수있다.)

  • 섹션

    책은 대개 여러 개의 섹션으로 구분된다. 코드에선 패키지명으로 섹션을 구분할수도 있겠다

  • 책의 장은 자기 완결된 한 덩어리의 내용에 적절한 제목을 붙인 것이다. 이는 코드에 함수에 해당한다.

  • 단락

    책의 단락은 코드의 블록에 해당한다. 책의 단락처럼 논리적인 묶음을 공백 구분으로 표현한다.

  • 문장

    책의 각 문장은 코드 하나하나의 구문에 해당한다. 책의 문장이 그렇듯이, 읽기 쉽게 하기 위해 하나의 문장은 가능한 짧고 하나의 사항만 작성하자.

  • 상호 참조 및 색인

    책의 상호 참조나 색인에 해당하는 것을 코드에서 작성할 필요는 없다 IDE나 편집기의 컨너뛰기 기능, 검색기능이 담당하는 영역이다.

참조