달력

12

« 2019/12 »

  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  

   

JSON-RPC 자바용 라이브러리 jar 파일 (Server)


gson-2.2.4.jar


jsonrpc-1.0-server.jar


slf4j-nop-1.6.1.jar


slf4j.api-1.6.1.jar


Posted by codedragon codedragon

댓글을 달아 주세요

   

JSON-RPC 자바용 라이브러리 .jar 파일 (Client)

   


gson-2.2.4.jar


jsonrpc-1.0-client.jar


slf4j-android-1.6.1-RC1.jar


Posted by codedragon codedragon

댓글을 달아 주세요

   

   

JSON-RPC

JSON으로 인코딩된 원격 프로시저 호출 라이브러리

http://json-rpc.org/

more implementations 클릭

   

Java로 이동

   

   

Google Web Engine을 이용해서 json-rpc를 사용하기 위해서 필요한 라이브러리 파일

Server

Client

gson-2.2.4.jar

jsonrpc-1.0-server.jar

slf4j-nop-1.6.1.jar

slf4j.api-1.6.1.jar

gson-2.2.4.jar

slf4j-android-1.6.1-RC1.jar

jsonrpc-1.0-client.jar

   

JSON-RPC 자바용 라이브러리 jar 파일 (Client)

http://codedragon.tistory.com/1344

   

JSON-RPC 자바용 라이브러리 jar 파일 (Server)

http://codedragon.tistory.com/1345

   

   

sl4j

java에서 로그를 출력하기 위한 Library입니다.

http://www.slf4j.org/

   

Posted by codedragon codedragon

댓글을 달아 주세요

 

SW 업데이트 체계 보안 가이드라인 및 코드서명 검증모듈

SW 업데이트 체계의 취약점을 악용해 악성코드를 대량으로 확산시키는 것을 예방하기 위한 'SW 업데이트 체계 보안 가이드라인' 및 코드서명 검증모듈 배

 

 

내용

  • SW 업데이트 체계 보안 가이드라인 : SW 자동 업데이트 기능 개발 시 준수해야 할 보안 항목 및 주의사항,
    준수하지 않을 경우 발생 할 수 있는 위험성, 그 밖에 해킹에 악용된 사례 및 해결 방안 제시
  • 코드서명 검증모듈 : WindowsTM 환경에서 코드서명된 모듈을 검증하기 위한 라이브러리 API 및 코드서명
    검증모듈 개발자 가이드
    • 코드서명 검증모듈 라이브러리
    • 코드서명 검증모듈 샘플
    • 코드서명 검증모듈 개발자 가이드

 

 

목차

1. 개요

1) 목적

2) 적용대상

3) 구성

2. SW 업데이트 체계 정의 및 현황

1) 정의

2) 현황

3. SW 업데이트 체계 보안위협

1) 보안위협 유형

2) 보안위협 사례

3) 기존 SW 업데이트 체계의 문제점

4. 대응방안

1) 파일보호

2) 채널보호

5. SW 업데이트 체계 보안 십계명

[부록] SW 업데이트 체계 보안 십계명 요약

 

 

직접다운받기

SW 업데이트체계보안가이드라인.pdf

코드서명 검증모듈.zip


 

 

 

 

출처

http://www.boho.or.kr/kor/data/guideView.jsp?p_bulletin_writing_sequence=20544#none

Posted by codedragon codedragon

댓글을 달아 주세요

   

보안 입출력 라이브러리

   

버퍼 오버플로우의 가장 좋은 보안 대책

  • 개발자 자신의 프로그래밍 습관 변화
  • 적용하는 문제에 적합한 라이브러리 구축
  • 버퍼 오버플로우관련 보안 라이브러리 사용: Libsafe

   

Libsafe

입출력 함수에 보안성을 부여할 수 있는 대표적인 라이브러리

현재 없어짐

http://www.research.avayalabs.com/project/libsafe

   

사용법

$ tar zxvf libsafe-2.0-16.tgz

cd libsafe-2.0-16

make

su

make install

   

직접다운로드

ver.2.0-16(2002년)

libsafe-2.0-16.tgz

Posted by codedragon codedragon

댓글을 달아 주세요

2014. 12. 6. 00:15

SQLite Development/Database

   

http://www.sqlite.org/

   

   

   

SQLite

내장된 관계형 데이터베이스

   

   

   

SQLite의 특징

  • 오픈 소스
  • 최소한의 라이브러리만으로 동작
  • 관리유저나 설정파일 등이 불필요
  • 원자성(atomicity), 일관성(consistency), 독립성(isolation), 영속성(durabilitiy)이라는 데이터베이스에 필요한 특성을 갖추고 있습니다.
  • SQL92에서 정의된 명령어의 대부분 이용가능
  • 하나의 데이터베이스가 하나의 파일로 저장
  • MS Access보다 좀 더 유연하고 성능이 뛰어남

   

   

*SQL92

SQL92는 표준SQL(ANSI/ISO SQL)을 지칭합니다.

http://en.wikipedia.org/wiki/SQL-92

   

   

데이터베이스

데이터를 영속적으로 저장할 수 있는 공간

   

테이블

  • 데이터베이스에서 데이터가 모이는 집합공간
  • SELECT, INSERT, UPDATE, DELETE같은 쿼리문으로 제어할 수 있습니다.

   

데이터 베이스 특성

원자성(atomicity)

하나의 트랜젝션이 하나의 작업 단위로 처리.

여러 단계에 걸쳐 수행되더라도 트랜젝션이 실패가 되면 모든 상태가 트랜젝션 수행 상태 전으로 rolled back되어, 이전 상태를 유지하게 됩니다.

즉, 트랜젝션이 완전히 수행되거나, 아무것도 수행되지 않은 상태(All or Nothing)을 의미합니다.

일관성(consistency)

트랜잭션 수행후 완전한 데이터만 저장이 됩니다.

독립성(isolation)

격리성이라고도 합니다.

트랜젝션 수행 완료되기전까지의 변경되는 내용이 다른 트랜젝션에 영향을 주지 않습니다.

영속성(durabilitiy)

비휘발성으로 사라지지 않게 하는 것.

스마트폰 전원이 꺼져도 데이터가 계속 저장되어 있습니다.

   

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

2014. 11. 27. 08:38

python Development/Python

 

 

파이썬(python) 특징


가독성

  • 간결하여 가독성이 좋습니다.
  • 들여쓰기(indentaton)으로 코드 블록 구분합니다.
  • C 언어에서처럼 {} 등의 괄호를 넣지 않기 때문에 프로그램을 좀더 깔끔하게 만들어줍니다. 파이썬은 들여쓰기를 안 할 경우 error 발생하여 들여쓰기 강제합니다.

 

 

풍부한 라이브러리

  • 매우 광범위한 라이브러리가 기보으로 포함외더 여러 기능을 사용할 있습니다.
  • 개발된 외부라이브러기가 많아 확장이 용이 합니다.
  • 코딩 시 필요한 모듈 끌어와 사용 가능
  • 직접 만든 모듈도 다른 사람에게 제공 가능(파이썬 코드를 재사용하기가 쉽다)

 

 

접착성

  • 쉽게 라이브러리를 추가할 있습니다.
  • 파이썬에서 C 구현된 코드를 사용할 수도 있고, C에서도 python 코드를 사용할 있습니다.

 

무료 (Free; 공짜)

  • python 파이썬 소프트웨어 재단(Python Software Foundation)에서 관리고 있습니다.
  • 무료와 다름없는 Python Software Foundation License 채택하고 있습니다.

 

유니코드

  • 파이썬의 모든 문자열들은 유니코드입니다.
  • 한글을 출력하기 위해 특별한 작업을 하지 않고 바로 사용할 있습니다.

 

동적 타이핑(동적인 데이터 타입 결정 지원)

  • 런타임시에 타입 체크를 하는 동적 타이핑을 지원합니다.

 

 

플랫폼 독립적 언어

, 리눅스, 윈도우에서 개발한 것을 모두 동일하게 수행가능 합니다.

C언어의 경우 소스코드를 해당 운영체제에 가져온 컴파일을 다시 진행해야 해야 해당 머신으로 프로그램을 생성해야 합니다. 이미 OS에서 인터프리터가 설치가 되어 있기 때문입니다.

 

 

짧아지는 코드

C언어 또는 Java 100라인, 파이썬 5~10라인



'Development > Python' 카테고리의 다른 글

Python(파이썬) 장점  (0) 2015.01.22
Python을 사용한 프로그램, 프로젝트  (0) 2014.12.28
Python 종류  (0) 2014.12.21
python  (0) 2014.11.27
Python Basic Tutorial  (0) 2014.09.08
python 홈페이지  (0) 2014.08.29
Posted by codedragon codedragon

댓글을 달아 주세요

   

안드로이드(Android)

  • 안드로이드는 구글을 중심으로 한 OHA(Open Handset Alliance) 컨소시엄에서 만든 최초의 오픈 소스 모바일 애플리케이션 플랫폼입니다.
  • 휴대전화와 모바일 디바이스를 위한 운영체제, 미들웨어 그리고 핵심 애플리케이션을 포함한 소프트웨어 스택
  • , 구글에서 개발한 스마트폰 OS입니다.
  • 구글은 2005년, 모바일 소프트웨어 개발업체인 ‘안드로이드(Android)’사를 인수하여 본격적인 모바일 운영체제의 개발에 나섰으며
  • 2007년 10월에는 삼성전자, LG전자, 모토로라, HTC, NTT도코모, T모바일, 퀄컴, 브로드컴 등과 함께 OHA(Open Handset Alliance: 개방형 휴대전화 연합)’을 결성하고 오픈 모바일 운영체제인 ‘안드로이드(Android)’를 발표하였습니다.

 

*스마트폰

카메라, 인터넷, mp3 다양한 멀티미디어을 제공할 있는 핸드폰

 

 

 

안드로이드의 기능

  • 리눅스 커널을 기반으로 한 운영체제로
  • 풍부한 UI(user Interface),
  • 다양한 애플리케이션,
  • 안드로이드 SDK 많은 라이브러리, 애플리케이션 프레임워크
  • 모바일 기기에 최적화된 달빅(Dalvik) 또는 아트(ART:Android Run Time)제공
  • 2D 그래픽 3D 그래픽을 최적화하여 표현,
  • 모바일용 데이터베이스인 SQLite 제공,
  • 멀티미디어 지원 등의 구성 요소들을 포함
  • 모바일 기기에 내장된 각종 하드웨어(블루투스, 카메라, 나침반, WiFi 등) 지원
  • 휴대전화 기능도 포함하고 있습니다.

 

 

 

안드로이드의 특징

특징

설명

자바

    • 안드로이드 애플리케이션 개발 언어는 Java를 사용
    • 자바 언어를 기반으로 APP을 작성 있습니다.

오픈소스

    • 오픈 소스를 통해 여러 제조사에서 쉽게 디바이스 개발을 할수 있습니다.
    • 오픈된 환경인만큼 개발툴과 관련 문서들 모두 무료제공 받을 있습니다.
    • 업데이트를 통한 완벽하고 최신의 서비스를 제공합니다.

공개 운영체제

    • 운영체제의 핵심이라고 할 수 있는 커널은 공개 운영체제인 리눅스에 기반하고 있습니다.

안드로이드 SDK

    • 안드로이드 SDK에 많은 라이브러리를 포함하고 있어 개발이 용이합니다.
    • 다양한 기능과 컴포넌트 제공
    • 지속적인 업그레이드를 제공

오픈마켓

    • 콘텐츠의 유통을 쉽고 빠르게 만드는 서비스

다양한 단말기

    • 안드로이드 플랫폼을 탑재한 제조사들의 다양한 기종의 단말 출시되고 있습니다.
    • 이동 통신사의 지원

 

Posted by codedragon codedragon

댓글을 달아 주세요

SQLite의 특징

  • 오픈 소스
  • 최소한의 라이브러리만으로 동작
  • 관리유저나 설정파일 등이 불필요
  • 원자성(atomicity), 일관성(consistency), 독립성(isolation), 영속성(durabilitiy)이라는 데이터베이스에 필요한 특성을 갖추고 있습니다.
  • SQL92에서 정의된 명령어의 대부분 이용가능
  • 하나의 데이터베이스가 하나의 파일에 저장

   

   

데이터베이스

데이터를 영속적으로 저장할 수 있는 공간

   

테이블

  • 데이터베이스에서 데이터가 모이는 집합공간
  • SELECT, INSERT, UPDATE, DELETE같은 쿼리문으로 제어할 수 있습니다.

   

데이터 베이스 특성

원자성(atomicity)

하나의 트랜젝션이 하나의 단위로 처리.

어려 단계에 걸쳐 수행되더라도 트랜젝션이 실패가 되면 모든 상태가 트랜젝션 수행 상태 전으로 rolled back되어, 이전 상태를 유지하게 됩니다.

즉, 트랜젝션이 완전히 수행되거나, 아무것도 수행되지 않은 상태(All or Nothing)을 의미합니다.

일관성(consistency)

트랜잭션 수행후 완전한 데이터만 저장이 됩니다.

독립성(isolation)

격리성이라고도 합니다.

트랜젝션 수행 완료되기전까지의 변경되는 내용이 다른 트랜젝션에 영향을 주지 않습니다.

영속성(durabilitiy)

비휘발성으로 사라지지 않게 하는 것.

스마트폰 전원이 꺼져도 데이터가 계속 저장되어 있습니다.

   

   

DatabaseAdapter

데이터베이스와 데이터를 불러오는 기능 수행시 중계역할을 수행하는 클래스

DatabaseHelper

SQLiteOpenHelper클래스를 상속받다 데이터베이스에 접근하게 하는 사용자 정의 클래스

Cursor

Select쿼리문으로 데이터를 읽으면 Cursor을 이용하여 데이터의 위치를 가리키고 ArrayList에 정하는 역할을 하는 클래스

SQLiteOpenHelper

데이터베이스에 접근할 수 있도록하는 클래스

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

데이터베이스 접근 방법

   

   

ListView에 데이터베이스의 저장된 데이터를 표시하는 도식도

   

   

어플리케이션 개발시 SQLite 사용

  • 애플리케이션이 작성한 SQLite의 데이터베이스는 /data/data/<패키지명>/databases 디렉토리에 생성됩니다.
  • 하나의 애플리케이션에 대해서 하나의 디렉토리가 할당됩니다.
  • 데이터베이스는 다른 애플리케이션에서 읽고 쓰기 할 수 없습니다. (다른 애플리케이션에서 사용 가능하게 하고 싶을 경우 Content provider 구성해야 합니다.)
  • 애플리케이션이 작성한 데이터베이스를 조작하고자 할 때는 /system/xbin 디렉터리에 있는 sqlite3 명령어를 사용합니다.

   

   

SQLite 사용시 기본 사항

테이블의 작성과 삭제

 

Create [TEMP] TABLE <테이블명> (Column정의, [테이블제약]);

  • TEMP(또는 TEMPORARY) 키워드를 지정하면 임시 테이블을 작성할 수 있습니다.
  • 이 테이블은 데이터베이스를 close했을 때에 자동적으로 삭제됩니다.

   

 

SQLite에서 지원하는 컬럼 타입

컬럼타입

설명

text,

varchar

문자열

smallint,

integer

정수(2바이트 또는 4바이트)

real,

float,

double

부동소수(4바이트 또는 8바이트)

boolean

true 또는 false

date,

time,

timestamp

시간(날짜, 시간, 날짜 + 시간)

blob,

binary

바이너리

   

 

테이블의 작성 예

Create table contact_list(

_id integer primary key autoincrement,

name text not null,

tel text not null default 'unknown',

unique (name, tel),

check(length(tel)>=3));

);

_id: primary key라는 걸 알려주기 위해 일반적으로 _id형태로 표시

*외래키는 지원하지 않음

   

* 외래키(Foreign Key 참조키): 테이블과 테이블이 관계를 갖고 연결할때 참조하는 속성으로 다른 테이블의 기본키가 됩니다.

   

   

테이블 삭제 Drop 명령어 사용

drop table 테이블명;

   

 

테이블명의 변경과 컬럼 추가

테이블 명의 변경에는 ALTER 명령어의 RENAME TO를 사용

alter table 테이블명 rename to 새로운 테이블명;

 

테이블의 column추가에는 alter 명령어의 add column을 사용

alter table 테이블명 add column 컬럼 정의;

 

   

 

SQLite의 내장 함수(Built-in Function)

 

내장함수(Built-in Function)

함수

개요

min(X,Y,…,)

최소값을 반환합니다.

max(X,Y,…,)

최대값을 반환합니다.

typeof(X)

데이터의 형을 반환합니다.

length(X)

문자열의 길이를 반환합니다.

substr(X,Y,Z)

X의 문자열의 Y번째에서 Z문자의 길이의 문자열을 반환합니다.

abs(X)

절대값을 반환합니다.

round(X,Y)

X의 수치를 소수점 이하 Y에서 반올림합니다.

upper(X)

대문자로 변환합니다.

lower(X)

소문자로 변환합니다.

coalesce(X,Y,…,)

최초의 NULL이 아닌 값을 반환합니다.

hex(X)

문자열을 16진수 표기로 반환합니다.

Ifnull00,Y,…(X)

최초의 NULL이 아닌 값을 반환합니다.

random()

Radom한 값을 반환합니다.

randomblob(X)

X바이트의 random한 값의 열을 반환합니다.

nullif(X,Y)

2개의 값이 다르면 최초의 값을 반환합니다. 같다면 NULL을 반환합니다.

sqlite_version()

SQLite의 버전을 반환합니다.

quote(X)

문자열을 SQL의 문자열로 삽입할 수 있도록 escape처리를 실행합니다.

last_insert_rowid()

마지막에 삽입한 레코드의 ID를 반환합니다.

sum(X,Y,…,)

NULL이 아닌 행의 값의 합계를 반환합니다.

행이 없는 경우 NULL을 반환합니다.

total(X,Y,…,)

NULL이 아닌 행의 값의 합계를 반환합니다.

행이 없는 경우 0를 반환합니다.

avg(X,Y,…,)

NULL이 아닌 행의 값의 평균을 반환합니다.

행이 없는 경우 NULL을 반환합니다.

count(X)

그륩 안에서 X가 NULL이 아닌 행의 행수를 반환합니다.

count(*)

그룹 별의 행수를 반환합니다.

 

   

SQLite 데이터베이스 이용하기

 

SQLiteOpenHelper

  • 데이터베이스를 생성하고 오픈하거나 닫기를 하려면 SQLiteOpenHelper 객체를 사용해야 합니다.(데이터베이스에 접근할 수 있게 해주는 클래스)
  • SQLiteOpenHelper 클래스는 애플리케이션에서 요구하는 내용에 따라 데이터베이스를 생성하거나 업그레이드하는 기능 제공합니다.
  • DatabaseHelper클래스는 SQLiteOpenHelper클래스를 상속받아 데이터베이스에 접근하게 하는 사용자 정의 클래스

   

public class DatabaseHelper extends SQLiteOpenHelper{

 

// 생성자

public DatabaseHelper (Context context){

super(context, "dbtest", null, 1);

//context: Activity등의 Context 인스턴스

//dbtest: 데이터베이스의 이름

//null: 커서 팩토리(보통 null지정)

//1: 데이터베이스 스키마 버전

}

public void onCreate(SQLiteDatabase db){

//테이블을 생성하고 초기 데이터를 추가

String table_sql = "create Table test( _id INTEGER PRIMARY KEY

AUTOINCREMENT, name TEXT NOT NULL);";

db.execSQL(table_sql);

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

// 버전 번호를 확인해서 새로운 스키마로 적절하게 업그레이드 함

db.execSQL("DROP TABLE IF EXISTS test");

onCreate(db); //onCreate 메소드를 호출해서 새로 table 셋팅

}

}

  

   

   

INSERT - 데이터 추가

데이터베이스에 데이터를 저장하는 명령어

ContentValues cv = new ContentValues();

cv.put("title", "해피 데이");

cv.put("name", "홍길동");

db.insert("member", "title", cv);

   

SELECT - 데이터 가져오기

db.query(TABLE_NAME,        //테이블병

String[] {"name", "member"},        //컬럼 명세

null,                                 //WHERE 절

null,                                 //WHERE절에 전달될 데이터

null,                                 //groupBy절

null,                                 //having절

MEMO_ID + " DESC"         //ORDER BY

);

   

UPDATE - 데이터 업데이트

데이터베이스에 저장된 데이터를 수정하는 명령어

ContentValues cv = new ContentValues();

cv.put("name", "홍길동");

 

String[] params = new String[] {"dragon"};

db.update("member", cv, "userid=?", params);

 

   

DELETE - 데이터 삭제

데이터베이스에 저장된 데이터를 삭제하는 명령어

String[] params = new String[]{userid};

db.delete("member", "userid=?", params);

 

   

 

데이터 불러오기

rawQuery() 메소드를 사용해 SELECT 구문을 직접 실행

Cursor c = db.rawQuery("SELECT name FROM sqlite_master where type='table' AND name='constants'", null);

   

query() 메소드를 인자로 각 부분의 값을 넘겨 실행

public Cursor query(String table, String[] columns, String selection, String[] selcetionArgs, String groupBy, String having, String orderBy, String limit)

 

설명

table

대상 테이블 이름

columns

값을 가져올 컬럼 이름의 배열 (null : 모든 열)

selection

WHERE 구문. 물음표를 사용해 인자의 위치를 지정할 수 있음 (null : 모든 레코드)

selectionArgs

WHERE 구문에 들어가는 인자값

groupBy

GROUP BY 구문 (null : 미사용)

orderBy

ORDER BY 구문 (null : 미사용)

limit

레코드수 지정 (null : 미사용)

 

SQLiteQueryBuilder 클래스의 query() 메소드 이용

   

 

   

   

커서(Cursor)

  • 데이터베이스나 내용 제공자(Content Provider)의 데이터를 쿼리하여 가져올 때 사용됩니다.
  • 결과값을 가지고 있는 포인터입니다.
  • 즉, Select쿼리문으로 데이터를 읽으면 Cursor을 이용하여 데이터의 위치를 가리키고 ArrayList 같은 배열에 데이터베이스에서 읽은 데이터를 저장해주는 역할을 하는 클래스입니다.

   

커서의 활용

moveToFirst

가장 처음에 위치한 레코드로 커서를 이동

moveToNext

커서를 다음 행으로 옮김

moveToLast

가장 마지막에 위치한 레코드로 커서를 이동

moveToPrevious

이전 레코드로 커서를 이동

moveToPosition

특정 레코드로 커서를 이동

getPosition

커서가 현재 가리키고 있는 위치를 반환

getCount

전체 결과 건수가 몇 개인지 확인

getColumnCount

컬럼들의 전체 개수를 반환

getColumnIndex

특정 컬럼 번호 조회

getColumnName

특정 인덱스 값에 해당하는 컬럼 이름을 반환

getColumnNames

결과에 포함된 전체 컬럼 이름

isFirst

커서가 첫번째 레코드에 위치하는지를 반환

isLast

커서가 마지막 레코드에 위치하는지를 반환

isBeforeFirst

커서가 첫번째 레코드의 앞에 위치하는지를 반환

isAfterLast

커서가 마지막 레코드의 뒤에 위치하는지를 반환

getString()

getInt()

컬럼값 반환

requery()

쿼리를 재실행

close()

커서가 확보한 자원을 모두 해제

 

 

트랜잭션(Transaction) 다루기

여러 데이터베이스 연산이 반드시 모두 성공해야 하는 경우가 있습니다.

이런 경우, 연산들 중 하나라도 실패하면 연산 모두를 없던 일로 철회해야 합니다.

모든 연산이 성공한다면, 비로소 연산 결과가 데이터베이스에 실제로 반영됩니다. 이와 같이 데이터베이스의 무결성이 보장되는 상태에서 요청된 연산들을 완수하기 위한 기본 작업 단위를 "트랜잭션(Transaction)"이라고 한다.

 

mDatabase.beginTransaction();

try{

 

mDatabase.setTransactionSuccessful();

}catch(Exception e){

}finally{

mDatabase.endTransaction();

}

 

Posted by codedragon codedragon

댓글을 달아 주세요

즉시 실행 함수(immediate funtions)

함수를 정의함과 동시에 바로 실행되는 함수

익명함수를 응용한 형태

즉시 실행함수는 한번 수행 후, 다시 호출할 수 없습니다.

이런, 특성으로 최초 한 번의 실행만을 필요로 하는 초기화 코드부분에 패턴으로 사용되어 집니다.

   

즉시 실행 함수 형식

( function( ) {

코드

})( )

괄호 ( ) 로 함수리터럴을 사용한 함수 정의 부분을 감쌉니다. 그런 다음 함수가 바로 호출될 수 있게 ( ) 괄호 쌍을 추가합니다.

   

즉시 실행 함수 패턴

라이브러리 코드가 처음 로드되어 초기화할 때, 즉시 실행 함수 패턴이 많이 사용되어 집니다.

라이브러리 코드를 즉시 실행 함수 내부에 정의하게 되면 라이브러리 내의 변수들은 함수 외부에서 접근할 수 없게 됩니다. 이렇게 함으로써 이후 다른 자바스크립트 라이브러리들을 동시에 로드하더라도 라이브러리간 변수 이름 충돌 같은 문제를 방지할 수 있습니다.

   

라이브러리

즉시 실행 함수

설명

jQuery 1.11.1

(function( global, factory ) {

…………….

})(window);

window를 즉시실행함수의 인자로 넘기며 호출합니다.

Underscore 1.3.3

(function(){

var root=this;

var previousUnderscore=root._;

…………….

}).call(this);

call함수를 this인자와 함께 사용하였습니다. 실행시 this가 즉시 실행함수 내부의 this에 연결되어 root라는 함수 내부 변수에 저장되어 사용되어 집니다.

Sugar 1.2

(function(){

………………

buildObject();

buildFunction();

initializeClass(date);

})( );

특별한 인자 없이 즉시 실행함수를 호출합니다.

   

   

소스 코드

<html>

<head>

<meta charset="UTF-8">

<title>즉시 실행 함수</title>

<script type="text/javascript">

(function (name) {

            document.write(name + ' 실행되었습니다.');

})('즉시실행함수');

</script>

</head>

<body>

</body>

</html>

   


   

출력 결과

('즉시실행함수')로 즉시 실행 함수를 호출 했으며, 이 때 '즉시실행함수' 라는 문자열을 인자로 념겨 호출하였습니다. 이 값은 즉시 실행 함수의 name매개 변수에 넘겨져서 출력되게 됩니다.

   

Posted by codedragon codedragon

댓글을 달아 주세요

  1. 준티 2017.02.12 13:48 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다~