Swift 공부방법

iOS/Tip&Tech 2016.02.02 16:13

개발서적 굳이 사지말자.

돈을 아끼겠다는게 아니라 책은 언제나 느리다.

애플 개발자 사이트는 읽을 수만 있다면(..) 책보다 정확하고 친절하다.

개발자로 먹고살거면 그냥 영어로 된 개발문서정도는 보고 이해할수 있어야 하니깐 애플문서를 보러가자.

개발자 문서는 대부분 자주보는 단어들에 문법도 직관적이고 코드로 예시를 보여주기때문에 읽기 쉽다.

필자도 수능이후로 영어공부해본적없고 토익도 쳐본적도 없지만 그래도 대충 보면 이해가 가니 두려워하지말자.



1. 앱 개발을 시작하자.

일단 시작하자. 

언어에 대해 A부터 Z까지 다 공부하고 시작하면 재미도 없고 머리에도 안들어온다.

혹시 단순히 언어만 공부하겠다거나하면 2번으로 넘어가시라.

아래 사이트는 정말 친절하게 앱개발 시작하면서 개발하는법 순서대로 잘 되어있다.

일부 책들은 이거 순서대로 샘플코드 베껴서 책이라고 내놓은것도 봤다.


Learn the Essentials of Swift를 일단 보자

언어에 대해 모두 공부할 필요는 없지만 핵심적인 부분은 알고 넘어가야겠지.. 

튜토리얼 잘만들어놨다.

적혀있는 학습목표보고 다 숙지했으면 넘어가면 된다.

* 앱개발시에 Storyboard에 관한 내용은 언어와는 무관하다.

기존 스토리보드 개발방법을 안다면 크게 변하는 부분은 없는데

기존 개발 방법을 모른다면 그냥 유투브 강의찾아서 보면 좋다. 

책으로는 아무리봐도 이해가 안되더라..

개인적으로 스토리보드로 개발하면 자유도가 좀 떨어지고 하다보면 시간이 더 많이 걸려서 하드코딩하는데..

iOS9이후로 스택뷰가 생기고나서부터 본격적으로 쓸거같다.


2. 언어를 공부하자

대한민국 IT발전을 위해 번역해주시는 분들 정말 너무 감사합니다.

나도 영어 못해서 하다 막히면 보러가는데 약간의 오타나 오역이 있으니 ㅎㅎ

일단 원본 사이트보다 막히면 보는걸 추천


iBooks에도 해당 문서가 다있다.

목차이동도 쉽고 글자크기 조절도 되고 아이폰6 플러스로 보기에 무리가 없었다.

출퇴근중에 버스에 자리잡고 앉아서 읽고있으면 좀 지적으로 보일 수있는 부가효과가 있다.


앱으로 공부하는데 알아야하는부분과 핵심을 잘 잡아준다.

전강의 3.29$인데 살만한거같다.

1,2강은 공짜니깐 한번 해보면 좋다.

신고

[펌]Mysql설계시 고려사항

DB 2014.11.20 19:53

테이블 설계 시 유의 사항

1. 반드시 Primary Key를 정의하고 최대한 작은 데이터 타입을 선정한다.

  • 로그 성 테이블에도 기본적으로 PK 생성을 원칙으로 함
  • InnoDB에서 PK는 인덱스와 밀접한 관계를 가지므로 최대한 작은 데이터 타입을 가지도록 유지

2. 테이블 Primary Key는 auto_increment를 사용한다.

  • InnoDB에서는 기본 키 순서로 데이터가 저장되므로, Random PK 저장 시 불필요한 DISK I/O가 발생 가능
  • InnoDB의 PK는 절대 갱신되지 않도록 유지
    (갱신 시 갱신된 행 이후 데이터를 하나씩 새 위치로 옮겨야 함)

3. 데이터 타입은 최대한 작게 설계한다.

  • 시간정보는 MySQL데이터 타입 date/datetime/timestamp 활용
  • IP는 INET_ATON(‘IP’), INET_NTOA(int) 함수를 활용
  • 정수 타입으로 저장 가능한 문자열 패턴은 최대한 정수 타입으로 저장

4. 테이블 내 모든 필드에 NOT NULL 속성을 추가한다.

  • NULL을 유지를 위한 추가 비용 발생
    (NULL 허용 칼럼을 인덱싱 할 때 항목마다 한 바이트 씩 더 소요)

5. Partitioning을 적절하게 고려하여 데이터를 물리적으로 구분한다.

  • 데이터 및 인덱스 파일이 커질수록 성능이 저하되므로Partitioning 유도
  • PK 존재 시 PK 내부에 반드시 Partitioning 조건이 포함되어야 함

인덱스 설계 시 유의 사항

1. 인덱스 개수를 최소화 한다.

  • 현재 인덱스로 Range Scan이 가능한지 여부를 사전에 체크
  • 인덱스도 서버 자원을 소모하는 자료구조이므로 성능에 영향을 줌

2. 인덱스 칼럼은 분포도를 고려하여 선정한다.

  • 인덱스 칼럼 데이터의 중복이 줄어들수록 인덱스는 최대의 효과를 가짐
  • 하단 쿼리 결과 값이 1에 가까울수록(0.9이상 권고) 인덱스 컬럼으로 적합함
    1
    2
    
    SELECT count(distinct INDEX_COLUMN)/count(*)
    FROM TABLE;

3. 커버링 인덱스(Covering Index)를 활용한다.

4. 스토리지 엔진 별 INDEX 특성을 정확히 인지한다.

  • InnoDB에서 데이터는 PK 순서로 저장되고, 인덱스는 PK를 Value로 가짐
  • MyISAM은 PK와 일반 인덱스의 구조는 동일하나, Prefix 압축 인덱스를 사용
    (MyISAM 엔진에서 ORDER BY 시 DESC는 가급적 지양)

5. 문자열을 인덱싱 시 Prefix 인덱스 활용한다.

  • 긴 문자열 경우 Prefix 인덱스(앞 자리 몇 글자만 인덱싱)를 적용
    1
    
    CREATE INDEX IDX01 ON TAB1(COL(4), COL(4))
  • Prifix Size는 앞 글자 분포도에 따라 적절하게 설정
    (하단 결과가 1에 가까울 수록 최적의 성능 유지, 0.9이상 권고)

    1
    2
    
    SELECT count(distinct LEFT(INDEX_COLUMN,3))/count(*)
    FROM TABLE;

6. CRC32함수 및 Trigger를 활용하여 인덱스 생성한다.

  • URL/Email같이 문자 길이기 긴 경우 유용
  • INSERT/UPDATE 발생 시 Trigger로 CRC32 함수 실행 결과 값을 인덱싱
  • CRC32 결과값을 저장할 칼럼 추가 및 인덱스 생성
    1
    2
    
    alter table user_tbl add email_crc int unsigned not null;
    create index idx01_email_crc on user_tbl (email_crc);
  • Insert Trigger 생성
    1
    2
    3
    4
    5
    6
    
    create trigger trg_user_tbl_insert
    before insert on user_tbl
    for each row
    begin
    set new.email_crc = crc32(lower(trim(new.email)));
    end$$
  • Update Trigger 생성
    1
    2
    3
    4
    5
    6
    7
    8
    
    create trigger trg_user_tbl_update
    before update on user_tbl
    for each row
    begin
    if old.email <> new.email then
    set new.email_crc = crc32(lower(trim(new.email)));
    end if;
    end$$
  • 검색 쿼리
    1
    2
    3
    4
    
    select *
    from user_tbl
    where email_crc = crc32(lower(trim('mail@domain.com')))
    and email= 'mail@domain.com'

    CRC32 결과가 중복되어도, email값을 직접 비교하는 부분에서 중복이 제거됩니다.

7. 중복 인덱스 생성 회피

  • MySQL은 동일한 인덱스를 중복 생성해도 에러를 발생하지 않음
  • Primary Key로 구성된 칼럼과 동일한 인덱스를 생성하지 않도록 주의



출처 : http://gywn.net/2012/05/matters-require-attention-with_mysql/

신고

'DB' 카테고리의 다른 글

[펌]Mysql설계시 고려사항  (1) 2014.11.20
MYSQL 테이블 복사  (0) 2014.09.13
테이블복사  (1) 2011.11.23
MSSQL - ROW_NUMBER  (0) 2011.11.01
ERROR : Conversion failed when converting date and/or time from character string.  (0) 2011.04.19

[JAVASCRIPT] undefined, null

분류없음 2014.10.08 12:54

자바스크립트에서 가장 많은 혼돈을 주는 것중의 하나가 바로 null과 undefiend이다. 다른 언어의 경우는 보통 null로 통일되어 있기 때문에 이 두 가지 타입에 대해 구분하는 것이 쉽지 않다.

  그렇다면, 먼저 undefined에 대해서 알아보자.

  변수가 선언된 적이 없거나, 선언이 되었더라도 아직 값이 할당되지 않았다면 undefined 인 상태이다. 즉, 특별한 값이 할당되기 전에 자동으로 설정하는 값이 undefined라고 생각하면 된다.

  1. // a 를 선언하지 않음  
  2. //console.log( a );  -- Exception 발생!!  
  3. console.log( typeof a );  // "undefined", typeof 연산자는 아래 참조  
  4.   
  5. // b 를 선언하였으나 값을 할당하지 않음  
  6. var b;  
  7. console.log( b );   // undefined  
  8. console.log( typeof b ); // "undefined"  
  9.   
  10. console.log( window.xxx );  // Exception 발생하지 않음, undefined  

  일단, 변수가 선언된 적이 없으면 Exception이 발생되고 스크립트 실행이 멈춘다. 특이하게도 객체(object)에 없는 속성을 참조할 때는 Exception이 발생하진 않는다. (물론, window.xxx() 처럼 객체에 존재하지 않는 메소드를 직접 호출하는 경우에는 Exception이 발생한다.)

     typeof  typeof는 연산자에 해당한다. 즉, +, -와 같은 연산자로 typeof val 로 해당 val의 타입을 문자열로 리턴하게 된다. 

      이 연산자는 메소드나 함수를 호출할 때, 특정 인자값이 존재하는지 검사하기 위해서 작성하는 다음과 같은 if문으로 인해 Exception이 발생하여 코드실행 자체가 멈추는 것을 방지하는 효과가 있다. (물론 null인지 여부는 다시 검사를 해야 한다.)

    if ( val != undefined ) { .. } 대신, if ( typeof val != "undefined" ) { ... }

      typeof연산자의 리턴 문자열은 다음과 같다.
    Type of valUndefinedNullBooleanNumberStringObjectFunction
    Result"undefined""object""boolean""number""string""object""function"



  그에 반해서 null은 명시적으로 개발자가 빈 값(empty)임을 지정하기 위해서 사용된다.

  1. var a = 10;    
  2. console.log( typeof a );    // number   
  3.     
  4. a = null;    
  5. console.log( typeof a );    // object    
  6.     
  7. a = undefined;    
  8. console.log( typeof a );    // undefined    

  그러나, 단순비교(==) 연산자는 null과 undefined를 동일하게 취급한다는 점을 기억하는 것이 좋겠다. 다음의 예에서 대부분의 결과값은 true이다.

  1. var a = null;  
  2.   
  3. console.log( a == null );  
  4. console.log( a == undefined );  
  5. console.log( a === null );  
  6. console.log( a === undefined ); // false  
  7.   
  8. var b = undefined;  
  9.   
  10. console.log( b == null );  
  11. console.log( b == undefined );  
  12. console.log( b === null );      // false  
  13. console.log( b === undefined );  
  14.   
  15.   
  16. console.log( typeof a );    // object  
  17. console.log( typeof b );    // undefined  
  18.   
  19. console.log( typeof x ); // 미선언변수, undefined  

  null과 undefined를 완벽히 구분하고자 한다면 동치비교(Strict Equal, ===)을 사용하는 것이 좋다. 우리가 기억해야 할 것은 의도를 담았느냐 그렇지 않으냐로 구분해야 된다는 점과, undefined 변수나 함수를 호출하면 Exception이 발생하므로 주의해야 한다는 점이다.

  따라서, 변수를 사용하기 전에 항상 var로 명시적으로 선언하여 사용하는 것이 좋은 코딩 습관이라 하겠다. - See more at: 


출처 : http://www.deadfire.net/jscript/projscript006.html#sthash.iHP2K1e7.dpuf

신고
1 2 3 4 5 ... 26


티스토리 툴바