ATOM 단축키

Posted by
2015. 10. 29. 11:16 Etc

CTRL + \    TOGGLE TREE VIEW


CTRL-/        TOGGLE-LINE-COMMENTS             주식 처리

CTRL-G        GO-TO-LINE:TOGGLE                특정 라인으로 이동

CTRL-J        JOIN-LINES                       라인 삽입

CTRL-L        SELECT-LINE                      라인 선택

CTRL-DOWN      MOVE-LINE-DOWN                   라인 아래로 바꾸기

CTRL-UP        MOVE-LINE-UP                     라인 위로 바꾸기

ALT-D          DELETE-TO-END-OF-WORD            커서 뒷단어 삭제

ALT-H          DELETE-TO-BEGINNING-OF-WORD      커서 앞단어 삭제


CTRL-SHIFT-D  DUPLICATE-LINES                  라인 복사

CTRL-SHIFT-K  DELETE-LINE                      라인 삭제

CTRL-SHIFT-M  EMMET:MERGE-LINES                라인 합치기

CTRL-K CTRL-U  UPPER-CASE                       대문자

CTRL-K CTRL-L  LOWER-CASE                       소문자


CTRL-ALT-[    FOLD-CURRENT-ROW                 현재 열 접기

CTRL-ALT-]    UNFOLD-CURRENT-ROW               현재 열 펴기

CTRL-ALT-{    FOLD-ALL                         전체 접기

CTRL-ALT-}    UNFOLD-ALL                       전체 펴기

CTRL-ALT-F    FOLD-SELECTION                   선택 된 열 접기

CTRL-ALT-UP    ADD-SELECTION-ABOVE              블럭선택

CTRL-ALT-DOWN  ADD-SELECTION-BELOW              블럭선택

CTRL-ALT-M    SELECT-INSIDE-BRACKETS           선택된 BRACKETS 영역선택

CTRL-M        :GO-TO-MATCHING-BRACKET          매치 되는 브래킷으로 이동


F11            TOGGLE-FULL-SCREEN               전체화면

ALT-\          TREE-VIEW:TOGGLE-FOCUS           



Airbnb JavaScript 스타일 가이드

Posted by
2015. 10. 16. 15:35 JavaScript

원문:https://github.com/airbnb/javascript

Airbnb JavaScript 스타일 가이드() {

목차

  1. Types
  2. Objects
  3. Arrays
  4. Strings
  5. Functions
  6. Properties
  7. Variables
  8. Hoisting
  9. Conditional Expressions & Equality
  10. Blocks
  11. Comments
  12. Whitespace
  13. Commas
  14. Semicolons
  15. Type Casting & Coercion
  16. Naming Conventions
  17. Accessors
  18. Constructors
  19. Events
  20. Modules
  21. jQuery
  22. ES5 Compatibility
  23. Testing
  24. Performance
  25. Resources
  26. In the Wild
  27. Translation
  28. The JavaScript Style Guide Guide
  29. Contributors
  30. License

Types 원문

  • Primitives: primitive type은 그 값을 직접 조작합니다.

    • string
    • number
    • boolean
    • null
    • undefined
    var foo = 1,
        bar = foo;
    
    bar = 9;
    
    console.log(foo, bar); // => 1, 9
  • Complex: 참조형(Complex)은 참조를 통해 값을 조작합니다.

    • object
    • array
    • function
    var foo = [1, 2],
        bar = foo;
    
    bar[0] = 9;
    
    console.log(foo[0], bar[0]); // => 9, 9

    [↑]

Objects 원문

  • Object를 만들 때는 리터럴 구문을 사용하십시오.

    // bad
    var item = new Object();
    
    // good
    var item = {};
  • 예약어(reserved words)를 키로 사용하지 마십시오. 이것은 IE8에서 동작하지 않습니다. More info

    // bad
    var superman = {
      default: { clark: 'kent' },
      private: true
    };
    
    // good
    var superman = {
      defaults: { clark: 'kent' },
      hidden: true
    };
  • 예약어 대신 알기 쉬운 동의어(readable synonyms)를 사용하십시오.

    // bad
    var superman = {
      class: 'alien'
    };
    
    // bad
    var superman = {
      klass: 'alien'
    };
    
    // good
    var superman = {
      type: 'alien'
    };
    

    [↑]

Arrays 원문

  • 배열을 만들 때 리터럴 구문을 사용하십시오.

    // bad
    var items = new Array();
    
    // good
    var items = [];
  • 길이를 알 수없는 경우는 Array#push를 사용하십시오.

    var someStack = [];
    
    
    // bad
    someStack[someStack.length] = 'abracadabra';
    
    // good
    someStack.push('abracadabra');
  • 배열을 복사 할 필요가있는 경우 Array#slice를 사용하십시오. jsPerf

    var len = items.length,
        itemsCopy = [],
        i;
    
    // bad
    for (i = 0; i < len; i++) {
      itemsCopy[i] = items[i];
    }
    
    // good
    itemsCopy = items.slice();
  • Array와 비슷한(Array-Like)한 Object를 Array에 변환하는 경우는 Array#slice를 사용하십시오.

    function trigger() {
      var args = Array.prototype.slice.call(arguments);
      ...
    }

[↑]

Strings 원문

  • 문자열은 작은 따옴표''를 사용하십시오.

    // bad
    var name = "Bob Parr";
    
    // good
    var name = 'Bob Parr';
    
    // bad
    var fullName = "Bob " + this.lastName;
    
    // good
    var fullName = 'Bob ' + this.lastName;
  • 80 문자 이상의 문자열은 문자열 연결을 사용하여 여러 줄에 걸쳐 기술 할 필요가 있습니다.

  • Note : 문자열 연결을 많이하면 성능에 영향을 줄 수 있습니다. jsPerf & Discussion

    // bad
    var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
    
    // bad
    var errorMessage = 'This is a super long error that \
    was thrown because of Batman. \
    When you stop to think about \
    how Batman had anything to do \
    with this, you would get nowhere \
    fast.';
    
    
    // good
    var errorMessage = 'This is a super long error that ' +
      'was thrown because of Batman.' +
      'When you stop to think about ' +
      'how Batman had anything to do ' +
      'with this, you would get nowhere ' +
      'fast.';
  • 프로그램에서 문자열을 생성 할 필요가 있는 경우 (특히 IE는) 문자열 연결 대신 Array#join을 사용하십시오. jsPerf.

    var items,
        messages,
        length,
        i;
    
    messages = [{
        state: 'success',
        message: 'This one worked.'
    },{
        state: 'success',
        message: 'This one worked as well.'
    },{
        state: 'error',
        message: 'This one did not work.'
    }];
    
    length = messages.length;
    
    // bad
    function inbox(messages) {
      items = '<ul>';
    
      for (i = 0; i < length; i++) {
        items += '<li>' + messages[i].message + '</li>';
      }
    
      return items + '</ul>';
    }
    
    // good
    function inbox(messages) {
      items = [];
    
      for (i = 0; i < length; i++) {
        items[i] = messages[i].message;
      }
    
      return '<ul><li>' + items.join('</li><li>') + '</li></ul>';
    }

    [↑]

Functions 원문

  • 함수식(Function expressions)

    // 익명함수식(anonymous function expression)
    var anonymous = function() {
      return true;
    };
    
    // 명명된 함수식(named function expression)
    var named = function named() {
      return true;
    };
    
    // 즉시실행 함수식(immediately-invoked function expression (IIFE))
    (function() {
      console.log('Welcome to the Internet. Please follow me.');
    })();
  • (if 및 while 등) 블록 내에서 변수에 함수를 할당하는 대신 함수를 선언하지 마십시오. 브라우저는 허용하지만 (마치 'bad news bears'처럼) 모두 다른 방식으로 해석됩니다.

  • Note: ECMA-262에서는block은 statements의 목록에 정의되어 있습니다 만, 함수 선언은 statements가 없습니다. 이 문제는 ECMA-262의 설명을 참조하십시오. .

    // bad
    if (currentUser) {
      function test() {
        console.log('Nope.');
      }
    }
    
    // good
    var test;
    if (currentUser) {
      test = function test() {
        console.log('Yup.');
      };
    }
  • 매개 변수(parameter)에 arguments를 절대 지정하지 마십시오. 이것은 함수 범위로 전달 될arguments객체의 참조를 덮어 쓸 것입니다.

    // bad
    function nope(name, options, arguments) {
      // ...stuff...
    }
    
    // good
    function yup(name, options, args) {
      // ...stuff...
    }

    [↑]

Properties 원문

  • 속성에 액세스하려면 도트.를 사용하십시오.

    var luke = {
      jedi: true,
      age: 28
    };
    
    // bad
    var isJedi = luke['jedi'];
    
    // good
    var isJedi = luke.jedi;
  • 변수를 사용하여 속성에 접근하려면 대괄호[]을 사용하십시오.

    var luke = {
      jedi: true,
      age: 28
    };
    
    function getProp(prop) {
      return luke[prop];
    }
    
    var isJedi = getProp('jedi');

    [↑]

Variables 원문

  • 변수를 선언 할 때는 항상 var를 사용하십시오. 그렇지 않으면 전역 변수로 선언됩니다. 전역 네임 스페이스를 오염시키지 않도록 Captain Planet도 경고하고 있습니다.

    // bad
    superPower = new SuperPower();
    
    // good
    var superPower = new SuperPower();
  • 여러 변수를 선언하려면 하나의 var를 사용하여 변수마다 줄바꿈하여 선언하십시오.

    // bad
    var items = getItems();
    var goSportsTeam = true;
    var dragonball = 'z';
    
    // good
    var items = getItems(),
        goSportsTeam = true,
        dragonball = 'z';
  • 정의되지 않은 변수를 마지막으로 선언하십시오. 이것은 나중에 이미 할당된 변수 중 하나를 지정해야하는 경우에 유용합니다.

    // bad
    var i, len, dragonball,
        items = getItems(),
        goSportsTeam = true;
    
    // bad
    var i, items = getItems(),
        dragonball,
        goSportsTeam = true,
        len;
    
    // good
    var items = getItems(),
        goSportsTeam = true,
        dragonball,
        length,
        i;
  • 변수의 할당은 스코프의 시작 부분에서 해주십시오. 이것은 변수 선언과 Hoisting 관련 문제를 해결합니다.

    // bad
    function() {
      test();
      console.log('doing stuff..');
    
      //..other stuff..
    
      var name = getName();
    
      if (name === 'test') {
        return false;
      }
    
      return name;
    }
    
    // good
    function() {
      var name = getName();
    
      test();
      console.log('doing stuff..');
    
      //..other stuff..
    
      if (name === 'test') {
        return false;
      }
    
      return name;
    }
    
    // bad
    function() {
      var name = getName();
    
      if (!arguments.length) {
        return false;
      }
    
      return true;
    }
    
    // good
    function() {
      if (!arguments.length) {
        return false;
      }
    
      var name = getName();
    
      return true;
    }

    [↑]

Hoisting 원문

  • 해당 스코프의 시작 부분에 Hoist된 변수선언은 할당되지 않습니다.

    // (notDefined가 전역 변수에 존재하지 않는다고 가정했을 경우)
    // 이것은 동작하지 않습니다.
    function example() {
      console.log(notDefined); // => throws a ReferenceError
    }
    
    // 그 변수를 참조하는 코드 후에 그 변수를 선언 한 경우
    // 변수가 Hoist된 상태에서 작동합니다.
    // Note : `true`라는 값 자체는 Hoist되지 않습니다.
    function example() {
      console.log(declaredButNotAssigned); // => undefined
      var declaredButNotAssigned = true;
    }
    
    // 인터 프린터는 변수 선언을 스코프의 시작 부분에 Hoist합니다.
    // 위의 예는 다음과 같이 다시 작성할 수 있습니다.
    function example() {
      var declaredButNotAssigned;
      console.log(declaredButNotAssigned); // => undefined
      declaredButNotAssigned = true;
    }
  • 익명 함수의 경우 함수가 할당되기 전에 변수가 Hoist될 수 있습니다.

    function example() {
      console.log(anonymous); // => undefined
    
      anonymous(); // => TypeError anonymous is not a function
    
      var anonymous = function() {
        console.log('anonymous function expression');
      };
    }
  • 명명 된 함수의 경우도 마찬가지로 변수가 Hoist될 수 있습니다. 함수 이름과 함수 본체는 Hoist되지 않습니다.

    function example() {
      console.log(named); // => undefined
    
      named(); // => TypeError named is not a function
    
      superPower(); // => ReferenceError superPower is not defined
    
      var named = function superPower() {
        console.log('Flying');
      };
    }
    
    // 함수이름과 변수이름이 같은 경우에도 같은 일이 일어납니다.
    function example() {
      console.log(named); // => undefined
    
      named(); // => TypeError named is not a function
    
      var named = function named() {
        console.log('named');
      }
    }
  • 함수 선언은 함수이름과 함수본문이 Hoist됩니다.

    function example() {
      superPower(); // => Flying
    
      function superPower() {
        console.log('Flying');
      }
    }
  • 더 자세한 정보는 Ben Cherry의 JavaScript Scoping & Hoisting를 참조하십시오.

    [↑]

Conditional Expressions & Equality(조건식과 등가식)원문

  • == 나 != 보다는 === 와 !== 를 사용해 주십시오
  • 조건식은ToBoolean 메소드에 의해 엄밀하게 비교됩니다. 항상 이 간단한 규칙에 따라 주십시오.

    • Objects 는 true 로 평가됩니다.
    • undefined 는 false 로 평가됩니다.
    • null 는 false 로 평가됩니다.
    • Booleans 는 boolean형의 값 으로 평가됩니다.
    • Numbers 는 true 로 평가됩니다. 하지만 +0, -0, or NaN 의 경우는 false 입니다.
    • Strings 는 true 로 평가됩니다. 하지만 빈문자 '' 의 경우는 false 입니다.
    if ([0]) {
      // true
      // Array는 Object 이므로 true 로 평가됩니다.
    }
  • 짧은형식을 사용하십시오.

    // bad
    if (name !== '') {
      // ...stuff...
    }
    
    // good
    if (name) {
      // ...stuff...
    }
    
    // bad
    if (collection.length > 0) {
      // ...stuff...
    }
    
    // good
    if (collection.length) {
      // ...stuff...
    }
  • 더 자세한 정보는 Angus Croll 의 Truth Equality and JavaScript를 참고해 주십시오.

    [↑]

Blocks 원문

  • 복수행 블록은 중괄호 ({})를 사용하십시오.

    // bad
    if (test)
      return false;
    
    // good
    if (test) return false;
    
    // good
    if (test) {
      return false;
    }
    
    // bad
    function() { return false; }
    
    // good
    function() {
      return false;
    }

    [↑]

Comments 원문

  • 복수행의 코멘트는 /** ... */ 를 사용해 주십시오. 그 안에는 설명과 모든 매개 변수와 반환 값에 대한 형식과 값을 설명합니다.

    // bad
    // make() returns a new element
    // based on the passed in tag name
    //
    // @param <String> tag
    // @return <Element> element
    function make(tag) {
    
      // ...stuff...
    
      return element;
    }
    
    // good
    /**
     * make() returns a new element
     * based on the passed in tag name
     *
     * @param <String> tag
     * @return <Element> element
     */
    function make(tag) {
    
      // ...stuff...
    
      return element;
    }
  • 한 줄 주석에는//를 사용하십시오. 코멘트를 추가하고 싶은 코드의 상단에 작성하십시오. 또한 주석 앞에 빈 줄을 넣어주십시오.

    // bad
    var active = true;  // is current tab
    
    // good
    // is current tab
    var active = true;
    
    // bad
    function getType() {
      console.log('fetching type...');
      // set the default type to 'no type'
      var type = this._type || 'no type';
    
      return type;
    }
    
    // good
    function getType() {
      console.log('fetching type...');
    
      // set the default type to 'no type'
      var type = this._type || 'no type';
    
      return type;
    }
  • 문제를 지적하고 재고를 촉구하거나 문제에 대한 해결책을 제시하는 등 의견의 앞에 FIXME 나TODO를 붙이는 것으로 다른 개발자의 빠른 이해를 도울 수 있습니다. 이러한 어떤 액션을 동반한다는 의미에서 일반 코멘트와는 다릅니다. 액션은 FIXME - 해결책이 필요 또는 TODO - 구현이 필요 입니다.

  • 문제에 대한 코멘트로 // FIXME :를 사용하십시오.

    function Calculator() {
    
      // FIXME: 전역 변수를 사용해서는 안됩니다.
      total = 0;
    
      return this;
    }
  • 문제 해결책에 대한 코멘트로 // TODO :를 사용하십시오.

    function Calculator() {
    
      // TODO: total은 옵션 매개 변수로 설정되어야 함.
      this.total = 0;
      return this;
    }

    [↑]

Whitespace 원문

  • 탭에는 공백 2개를 설정하십시오.

    // bad
    function() {
    ∙∙∙∙var name;
    }
    
    // bad
    function() {
    ∙var name;
    }
    
    // good
    function() {
    ∙∙var name;
    }
  • 중괄호({})의 앞에 공백을 하나 넣어주십시오.

    // bad
    function test(){
      console.log('test');
    }
    
    // good
    function test() {
      console.log('test');
    }
    
    // bad
    dog.set('attr',{
      age: '1 year',
      breed: 'Bernese Mountain Dog'
    });
    
    // good
    dog.set('attr', {
      age: '1 year',
      breed: 'Bernese Mountain Dog'
    });
  • 파일의 마지막에는 빈 줄을 하나 넣어주십시오.

    // bad
    (function(global) {
      // ...stuff...
    })(this);
    // good
    (function(global) {
      // ...stuff...
    })(this);
    
  • 메소드 체인이 길어지는 경우 적절히 들여쓰기(indentation) 하십시오.

    // bad
    $('#items').find('.selected').highlight().end().find('.open').updateCount();
    
    // good
    $('#items')
      .find('.selected')
        .highlight()
        .end()
      .find('.open')
        .updateCount();
    
    // bad
    var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
        .attr('width',  (radius + margin) * 2).append('svg:g')
        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
        .call(tron.led);
    
    // good
    var leds = stage.selectAll('.led')
        .data(data)
      .enter().append('svg:svg')
        .class('led', true)
        .attr('width',  (radius + margin) * 2)
      .append('svg:g')
        .attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
        .call(tron.led);

    [↑]

Commas 원문

  • 선두의 comma는 하지마십시오.

    // bad
    var once
      , upon
      , aTime;
    
    // good
    var once,
        upon,
        aTime;
    
    // bad
    var hero = {
        firstName: 'Bob'
      , lastName: 'Parr'
      , heroName: 'Mr. Incredible'
      , superPower: 'strength'
    };
    
    // good
    var hero = {
      firstName: 'Bob',
      lastName: 'Parr',
      heroName: 'Mr. Incredible',
      superPower: 'strength'
    };

 - 말미의 불필요한 쉼표도 하지 마십시오. 이것은 IE6/7과 quirksmode의 IE9에서 문제를 일으킬 수 있습니다. 또한 ES3의 일부 구현에서 불필요한 쉼표가 있는 경우, 배열 길이를 추가합니다. 이것은 ES5에서 분명해졌습니다.(source):

제 5 판에서는 말미의 불필요한 쉼표가 있는 ArrayInitialiser (배열 초기화 연산자)라도 배열에 길이를 추가하지 않는다는 사실을 명확히하고 있습니다. 이것은 제 3 판에서 의미적인 변경은 아닙니다만, 일부의 구현은 이전부터 이것을 오해하고 있었을지도 모릅니다.

```javascript
// bad
var hero = {
  firstName: 'Kevin',
  lastName: 'Flynn',
};

var heroes = [
  'Batman',
  'Superman',
];

// good
var hero = {
  firstName: 'Kevin',
  lastName: 'Flynn'
};

var heroes = [
  'Batman',
  'Superman'
];
```

**[[↑]](#TOC)**

Semicolons 원문

  • 네!(Yup.)

    // bad
    (function() {
      var name = 'Skywalker'
      return name
    })()
    
    // good
    (function() {
      var name = 'Skywalker';
      return name;
    })();
    
    // good
    ;(function() {
      var name = 'Skywalker';
      return name;
    })();

    [↑]

Type Casting & Coercion(강제) 원문

  • 문의 시작 부분에서 형을 강제합니다.
  • Strings:

    //  => this.reviewScore = 9;
    
    // bad
    var totalScore = this.reviewScore + '';
    
    // good
    var totalScore = '' + this.reviewScore;
    
    // bad
    var totalScore = '' + this.reviewScore + ' total score';
    
    // good
    var totalScore = this.reviewScore + ' total score';
  • 숫자는parseInt를 사용하십시오. 항상 형변환을 위한 기수(radix)를 인수로 전달하십시오.

    var inputValue = '4';
    
    // bad
    var val = new Number(inputValue);
    
    // bad
    var val = +inputValue;
    
    // bad
    var val = inputValue >> 0;
    
    // bad
    var val = parseInt(inputValue);
    
    // good
    var val = Number(inputValue);
    
    // good
    var val = parseInt(inputValue, 10);
  • 어떤 이유에 의해 parseInt 가 병목이 되고, 성능적인 이유로 Bitshift를 사용할 필요가 있을 경우, 하려고 하는것에 대해, why(왜)와 what(무엇)의 설명을 코멘트로 남겨주십시오.

      // good
      /**
       * parseInt가 병목을 일으키므로
       * Bitshift로 문자열을 수치로 강제적으로 변환하는 방법으로
       * 성능을 개선시킵니다.
       */
      var val = inputValue >> 0;
  • Booleans:

    var age = 0;
    
    // bad
    var hasAge = new Boolean(age);
    
    // good
    var hasAge = Boolean(age);
    
    // good
    var hasAge = !!age;

    [↑]

Naming Conventions 원문

  • 한문자 이름은 피하십시오. 이름에서 의도를 읽을 수 있도록 하십시오.

    // bad
    function q() {
      // ...stuff...
    }
    
    // good
    function query() {
      // ..stuff..
    }
  • Object, 함수, 그리고 인스턴스로는 camelCase를 사용하십시오.

    // bad
    var OBJEcttsssss = {};
    var this_is_my_object = {};
    var this-is-my-object = {};
    function c() {};
    var u = new user({
      name: 'Bob Parr'
    });
    
    // good
    var thisIsMyObject = {};
    function thisIsMyFunction() {};
    var user = new User({
      name: 'Bob Parr'
    });
  • Class와 생성자에는 PascalCase를 사용하십시오.

    // bad
    function user(options) {
      this.name = options.name;
    }
    
    var bad = new user({
      name: 'nope'
    });
    
    // good
    function User(options) {
      this.name = options.name;
    }
    
    var good = new User({
      name: 'yup'
    });
  • private 속성 이름은 밑줄 _ 을 사용하십시오.

    // bad
    this.__firstName__ = 'Panda';
    this.firstName_ = 'Panda';
    
    // good
    this._firstName = 'Panda';
  • this의 참조를 저장할 때 _this 를 사용하십시오.

    // bad
    function() {
      var self = this;
      return function() {
        console.log(self);
      };
    }
    
    // bad
    function() {
      var that = this;
      return function() {
        console.log(that);
      };
    }
    
    // good
    function() {
      var _this = this;
      return function() {
        console.log(_this);
      };
    }
  • 함수에 이름을 붙여주십시오. 이것은 stack traces를 추적하기 쉽게하기 때문입니다.

    // bad
    var log = function(msg) {
      console.log(msg);
    };
    
    // good
    var log = function log(msg) {
      console.log(msg);
    };

    [↑]

Accessors 원문

  • 속성을 위한 접근자(Accessor) 함수는 필요 없습니다.
  • 접근자 함수가 필요한 경우 getVal() 이나 setVal('hello') 라고 사용합니다.

    // bad
    dragon.age();
    
    // good
    dragon.getAge();
    
    // bad
    dragon.age(25);
    
    // good
    dragon.setAge(25);
  • 속성이 boolean의 경우 isVal() 이나 hasVal() 라고 사용합니다.

    // bad
    if (!dragon.age()) {
      return false;
    }
    
    // good
    if (!dragon.hasAge()) {
      return false;
    }
  • 일관된다면 get() 이나 set() 이라는 함수를 작성해도 좋습니다.

    function Jedi(options) {
      options || (options = {});
      var lightsaber = options.lightsaber || 'blue';
      this.set('lightsaber', lightsaber);
    }
    
    Jedi.prototype.set = function(key, val) {
      this[key] = val;
    };
    
    Jedi.prototype.get = function(key) {
      return this[key];
    };

    [↑]

Constructors 원문

  • 새 Object에서 프로토타입을 재정의하는 것이 아니라, 프로토타입 객체에 메서드를 추가해 주십시오. 프로토타입을 재정의하면 상속이 불가능합니다. 프로토타입을 리셋하는것으로 베이스 클래스를 재정의 할 수 있습니다.

    function Jedi() {
      console.log('new jedi');
    }
    
    // bad
    Jedi.prototype = {
      fight: function fight() {
        console.log('fighting');
      },
    
      block: function block() {
        console.log('blocking');
      }
    };
    
    // good
    Jedi.prototype.fight = function fight() {
      console.log('fighting');
    };
    
    Jedi.prototype.block = function block() {
      console.log('blocking');
    };
  • 메소드의 반환 값으로 this를 반환함으로써 메소드 체인을 할 수 있습니다.

    // bad
    Jedi.prototype.jump = function() {
      this.jumping = true;
      return true;
    };
    
    Jedi.prototype.setHeight = function(height) {
      this.height = height;
    };
    
    var luke = new Jedi();
    luke.jump(); // => true
    luke.setHeight(20) // => undefined
    
    // good
    Jedi.prototype.jump = function() {
      this.jumping = true;
      return this;
    };
    
    Jedi.prototype.setHeight = function(height) {
      this.height = height;
      return this;
    };
    
    var luke = new Jedi();
    
    luke.jump()
      .setHeight(20);
  • 독자적인 toString()을 만들 수도 있지만 올바르게 작동하는지, 부작용이 없는 것만은 확인해 주십시오.

    function Jedi(options) {
      options || (options = {});
      this.name = options.name || 'no name';
    }
    
    Jedi.prototype.getName = function getName() {
      return this.name;
    };
    
    Jedi.prototype.toString = function toString() {
      return 'Jedi - ' + this.getName();
    };

    [↑]

Events

  • (DOM 이벤트나 Backbone events와 같은 고유의) 이벤트 탑재체(payloads)의 값을 전달하는 경우 원시 값(raw value) 대신 해시 인수(hash)를 전달합니다. 이렇게하는 것으로 나중에 개발자가 이벤트와 관련된 모든 핸들러를 찾아 업데이트 하지 않고 이벤트 탑재체(payloads)에 값을 추가 할 수 있습니다. 예를 들어, 이것 대신 :

    // bad
    $(this).trigger('listingUpdated', listing.id);
    
    ...
    
    $(this).on('listingUpdated', function(e, listingId) {
      // do something with listingId
    });

    이쪽을 선호합니다.:

    // good
    $(this).trigger('listingUpdated', { listingId : listing.id });
    
    ...
    
    $(this).on('listingUpdated', function(e, data) {
      // do something with data.listingId
    });

    [↑]

Modules 원문

  • 모듈의 시작은 ! 로 시작하십시오. 이것은 문말에 세미콜론을 넣는것을 잊은 모듈을 연결할때 런타임 오류가 발생하지 않기 때문입니다.
  • 파일 이름은 camelCase를 사용하여 같은 이름의 폴더에 저장해주십시오. 또한 단독으로 공개할 경우 이름을 일치시켜주십시오.
  • noConflict() 라는 명칭으로 (이름이 겹쳐 덮어 써지기 전의) 모듈을 반환하는 메서드를 추가해주십시오.
  • 항상 모듈의 시작 부분에서'use strict';를 선언해주십시오.

    // fancyInput/fancyInput.js
    
    !function(global) {
      'use strict';
    
      var previousFancyInput = global.FancyInput;
    
      function FancyInput(options) {
        this.options = options || {};
      }
    
      FancyInput.noConflict = function noConflict() {
        global.FancyInput = previousFancyInput;
        return FancyInput;
      };
    
      global.FancyInput = FancyInput;
    }(this);

    [↑]

jQuery 원문

  • jQuery Object의 변수 앞에는 $을 부여해 주십시오.

    // bad
    var sidebar = $('.sidebar');
    
    // good
    var $sidebar = $('.sidebar');
  • jQuery 쿼리결과를 캐시해주십시오.

    // bad
    function setSidebar() {
      $('.sidebar').hide();
    
      // ...stuff...
    
      $('.sidebar').css({
        'background-color': 'pink'
      });
    }
    
    // good
    function setSidebar() {
      var $sidebar = $('.sidebar');
      $sidebar.hide();
    
      // ...stuff...
    
      $sidebar.css({
        'background-color': 'pink'
      });
    }
  • DOM 검색은 Cascading $('.sidebar ul') 이나 parent > child $('.sidebar > ul') 를 사용해주십시오. jsPerf

  • jQuery Object 검색은 스코프가 붙은 find를 사용해주십시오.

    // bad
    $('ul', '.sidebar').hide();
    
    // bad
    $('.sidebar').find('ul').hide();
    
    // good
    $('.sidebar ul').hide();
    
    // good
    $('.sidebar > ul').hide();
    
    // good
    $sidebar.find('ul');

    [↑]

ECMAScript 5 Compatibility 원문

Testing 원문

  • 네!(Yup.)

    function() {
      return true;
    }

    [↑]

Performance 원문

Resources 원문

Read This

Other Styleguides

Other Styles

Further Reading

Books

Blogs

In the Wild

This is a list of organizations that are using this style guide. Send us a pull request or open an issue and we'll add you to the list.

Translation

This style guide is also available in other languages:

The JavaScript Style Guide Guide

Contributors

License

(The MIT License)

Copyright (c) 2012 Airbnb

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

[↑]

};


'JavaScript' 카테고리의 다른 글

object type JSON 변환  (0) 2017.04.09

JAVA 강좌

Posted by
2015. 10. 16. 15:00 Java
이곳은 50001.COM 주인장의 강좌와 주옥같은 JAVA고수님들의 강좌를 모아 놓은 곳입니다.
질문은 Q&A 게시판에 주세요.

들어가는 글 :: "시작하는 JAVA프로그래머를 위해" (특히 비 전공자분들께)
 김상욱의 awt 멀티채팅강좌 :: 
방개설, 귓말/쪽지, 방장기능, 캐릭터 및 글자색 기능, 이미지넣기, 관리자모드, 그림 및 음악 보내기 등 기술분석적 강의 (진행중)
 김상욱의 db 이용한 awt 그래프 출력강좌 :: 
db와 socket을 이용 3-Tier, 스크롤가능 그래프출력 강좌 (1차완료)
 김상욱의 LIVECONNECTION :: 애플릿과 자바스크립트와의 통신강좌 (완료)
 김상욱의 자바툴 강좌 :: Editplus, UltraEditor, Kawa, JCreator 등의 다운로드와 설정 (완료)
 김상욱의 웹스타트(webstart) 강좌 (기본 완료응용 진행중)
 김상욱의 Vector, Hashtable 클래스 성능 실험 외 (완료)
 진은영 (50001.com javaside 시삽) 강사님의 자바 기초강좌 (진행중)
 자바Side(50001.com) 온라인 자바 스터디 1기 채팅 소스 분석 스터디 정리(완료)
 Java Basic
처음 입문하신 분들은 이리로
 J2SE(Core/Desktop)
Java2 Standard Edition. 
애플릿/애플리케이션 등 일반적인 자바 
프로그램을 만들 수 있는 기본 패키지
J2EE(Enterprise/Server)
Java2 Enterprise Edition
엔터프라이즈급 프로그램을 만들 때 
사용하는 패키지.
웹프로그래밍JSP :: servlet ::taglibrary/customtag
웹서비스

웹서비스 
JAXP/JAXR/JAX-RPC

SOAP 
Component

Enterprise JavaBeans(EJB)
Java Message Service(JMS)
기타

application server
Java Data Objects(JDO) 
JavaMail
Transaction(JTA/JTS)
J2EE 기타

J2ME(Mobile/Wireless)
Java2 Micro Edition. 
휴대폰 등에 들어있는 소형 시스템에서 
사용할 프로그램을 만들 수 있는 패키지.

모바일(J2ME)

(강사님별 / 기기별 강좌)

 XMLXML
 IDEIDE
 Other Java Technologies준비중...
 ETC매뉴얼 :: 디자인패턴 :: 객체지향 UML :: 
자바스크립트 :: XP(Extreame Programming):: 기타 


자바기본 (영문튜토리얼)

 박용우님의 자바강좌 :: 자바 전반에 대한 문법 및 도움말 (강추!)
 윤경구의 자바튜토리얼 :: '지나'시리즈로 유명한 저자의 기초~고급
 최종명의 몽땅강좌 :: 기초부터 고수까지
 최희창님의 자바클래스 소개
 Java 전문 용어 이해하기 :: Sun사 문서 (오광신 님 번역)
 원돈희님의 SCJP에 맞춘 자바강좌 :: 시험 유형에 맞춰 헷갈리기 쉬운 부분을 알기쉽게 강의
 Sun의 자바기초강좌 SL275(한글문서) :: 김동학님 제공
 자바 초보자를 위한 강좌 :: javanuri
 corejava [1권] [2권] :: 번역판
 Think In Java 2nd Ed (MS WORD버전)
 자바기초에서 애플릿(바둑,채팅)까지 :: JSTORM
 자바기초(당연히 알아야함에도 불구하고 그냥 지나치기 쉬운) :: JSTORM
 JVM의기본 원리 및 클래스로더의 기초 :: JSTORM
 제네럴 프로그래밍 애플릿에서 웹 서비스까지 [첨부파일] :: 박용우
 GarbageCollection :: 오광신
 JVM의 가비지 컬렉션 (영문) :: IBM
 가비지 컬렉션과 퍼포먼스 (영문) :: IBM
 이것은 무엇의 객체인가 (영문) :: IBM
 추상클래스 :: 자바스터디
 정적 유형 (Static type) (영문) :: IBM
 final 사용 가이드라인 (영문) :: IBM
 자바 속성 [1] [2] [3] [4] :: IBM
 클래스와 클래스 로딩 (영문) :: IBM
 Java Web Start 1.0 개발자 가이드 (번역) :: JSTORM
 자바 네트워크 구동 프로토콜(JNLP)과 참조 구현, 자바 웹 스타트 :: 자바스터디
 JAVA WEBSTART문서 [소스] :: 오광신
 EMPOWER YOUR APPLICATIONS WITH JAVA™ WEB START - Sun사 문서 (오광신 님 번역)
 자바프린팅모델 [1] [2] :: JSTORM
 JDK 1_4의 프린팅 (printing), Part 1_새로운 Java Print Service API :: IBM
 JDK 1_4의 프린팅 (printing), Part 2_프린트 관련 이벤트를 듣고 그래픽을 직접 프린트 :: IBM
 표명(assertion) 기능 이용하기 :: IBM
 J2SE 1_5_Tiger의 미래와 언어 차원의 변화 :: IBM
 숫자와 currency 포맷 (영문) :: IBM
 자바 어플리케이션에서 환경에 접근하기 :: 자바스터디
 쓰레드 풀과 작업 큐(queue) (영문) :: IBM
 쓰레드 보안 (영문) :: IBM
 김세곤님의 클래스패스와 환경 변수, 그것이 알고 싶다. :: 패키지 및 클래스패스설정 총정리
 classpath에 등록안된 클래스의 dynamic reload :: javapattern.info
 Multiprocess JVM Implemetation_1 :: javapattern.info
 Multiprocess JVM Implemetation_2 :: javapattern.info
 native method 정의 및 구현 :: javapattern.info
 StringBuffer class Optimization :: javapattern.info
 Using java debugger :: javapattern.info
 Java 2 레퍼런스 클래스 사용 가이드라인 (영문) :: IBM

애플릿 (영문튜토리얼)

 Dubuilder로 Signed Applet 만들기 [소스] / [MakeRayCab.bat ] :: 오광신
 Explore에서 Signed Applet만들기 :: 오광신
 넷스케이프 브라우저에서의 사인 애플릿 작성 :: 핸디소프트 윤동빈
 네트워크 가위바위보게임(+채팅) [소스] :: 박용우

그래픽(awt,JFC/swing,SWT) (영문튜토리얼)

 AWT와 스윙 [1] [2] :: JSTROM
 스윙(SWING)의 안쪽 탐험 :: JSTORM
 Swinging audio_사용자 인터페이스 향상을 위한 소리 신호 구현하기 :: IBM
 지능형 데이터로 Swing을 간단히!_(iData 기법) :: IBM
 SWT: native 크로스플랫폼 GUI 애플리케이션 만들기 (영문) :: IBM
 Create native, cross-platform GUI applications(GCJ, 리눅스, SWT):: IBM
 Equipping SWT 애플리케이션에 content assistants 추가하기 (영문) :: IBM
 Fullscreen Exclusive Mode 와 draw directly to video RAM(영문) :: IBM
 Java Web Start로 SWT 애플리케이션 전개하기 (영문) :: IBM
 GUI의 접근성 높이기 (영문) :: IBM

자료구조(Collection) (영문튜토리얼)

 콜렉션 개요와 Collection 클래스, MAP, Iterator, Comparator, 콜렉션 알고리즘:: 자바스터디

국제화(한글화) (영문튜토리얼)

네트웍(IO/NET)
 파일과 네트웍 [01] [02] :: JSTORM
 자바 I/O 성능 향상기법 :: JSTORM
 네트웍 코드를 쉽게 테스트 하자 [소스] :: JSTORM
 비 블록 소켓으로 가는 길 (영문) :: IBM
 Merlin으로 자바 플랫폼에 nonblocking 입출력 가능_새롭게 추가된 기능들 :: IBM
 JDK1.4의 New I/O에 대하여 [1] [2] :: 한빛미디어
 스트림 완전히 바꾸기, Part 1 (영문) :: IBM
 스트림 완전히 바꾸기, Part 2 내부 Java IO 최적화 (영문) :: IBM
 자바 네트워킹 강화 (영문) :: IBM
 Java NIO (Ron Hitchens 지음) (영문) :: IBM
 Merlin의 new IO 버퍼의 모든 것 (영문) :: IBM
 NIO Channel :: javapattern.info
 NIO Reactor Pattern의 사용 :: javapattern.info
 PushbackReader의 사용방법과 예제 :: javapattern.info
 Multicast IP address를 이용한 채팅 :: javapattern.info
 Extracting zip or jar file :: javapattern.info
 Servlet과 Applet간의 HTTP 통신_1 :: javapattern.info
 Servlet과 Applet간의 HTTP 통신_2 :: javapattern.info
 Servlet과 Applet간의 HTTP 통신_3 :: javapattern.info
 Servlet과 Applet간의 HTTP 통신_4 :: javapattern.info
 SocketPool Implementation Source code Example_1 :: javapattern.info
 SocketPool Implementation Source code Example_2 :: javapattern.info
 DatagramSocket의 정의 및 샘플 :: javapattern.info
 HttpURLConnection 사용예와 개념 :: javapattern.info
 jNetServer Socket Framework :: javapattern.info
 Lightweight Web Server Implementation :: javapattern.info

분산객체(RMI) (영문튜토리얼)

 Java Distributed Computing Technology :: 자바스터디
 자바 RMI 사용하기
 차승욱님의 RMI강좌 :: 자바스터디
 문영진님의 RMI강좌 :: 자바스터디
 자바에서의 원격객체통신(RMI와 CORBA) :: 윤경구
 RMI의 기초 :: JSTORM 박준용님
 기업에서의 RMI-IIOP_IIOP상에 RMI 실행시키기 :: IBM

IDL(CORBA) (영문튜토리얼)

 JBuilder를 이용한 코바(Corba)프로그래밍 :: Javastudy
 코바와 자바 연동 (PDF) :: Javastudy
 JAVA와 CORBA연동 (PDF) :: Javastudy
 JBuilder에서 코바 프로그래밍 (MS_WORD) :: Javastudy
 코바 이것만을 알고 개발하자!!(PDF) :: Javastudy
 VisiBroker 설치 방법 (코바사랑) :: Javastudy
 비지브로커의 이모저모.. (PDF) :: Javastudy
 IDL에 대해서.. (PDF) 코바사랑 제공 :: Javastudy
 JAVA에서 IDL 매핑 (PDF) 코바사랑 제공:: Javastudy
 콜백 서비스에 대해.. (MS-WORD) 코바사랑 제공 :: Javastudy
 CORBA & Next Generation :: Javastudy

보안(Security) (Security in 1.2 영문튜토리얼)

 Globus Grid Security Infrastructure와 자바 (영문) :: IBM
 JAAS와 JSSE를 이용한 자바 보안 (영문) :: IBM
 대칭암호화알고리즘 소개 및 DES, Blowfish샘플코드 :: javapattern.info
 Java Security Model Evaluation :: javapattern.info
 MD5를 이용한 스트링 변환 :: javapattern.info

JDBC(데이터베이스)
 데이타베이스와 자바(JDBC소개) :: 자바스터디
 JDBC 팁 (영문) :: IBM
 JDBC 쿼리 로깅을 쉽게_고급 PreparedStatement를 사용하여 JCBC 코드에 로깅 추가 :: IBM
 JDBC와 ORACLE :: 자바스터디
 JDBC와 MSQL :: 자바스터디
 Database접속 Pool관리 :: 자바스터디
 JDBC API를 이용한 프로그래밍 강좌 :: http://www.aboutjsp.com
 JDBC 기초 강좌 :: http://cs.sookmyung.ac.kr
 JDBC 다국어 처리법 :: http://www.ejavaschool.com.ne.kr
 JDBC 설정 :: 자바스터디
 PostgreSQL JDBC 활용 :: http://www.junghyun.pe.kr
 자바 초보자를 위한 DB강좌 :: javanuri
 SQL2000 강의자료 :: 김하나님 자료
 Object Pool 패턴을 이용 구현한 JDBC Connection Pool :: JSTORM
 oracle8i JDBC(Oracle 8i 와 Java) :: Javastudy
 Informix 데이터베이스연결 :: javapattern.info
 MySQL JDBC Connection_1 :: javapattern.info
 MySQL JDBC Connection_2 :: javapattern.info
 MySQL JDBC Connection_3 :: javapattern.info
 Java JDBC Performance Tip(1)-Select Speed up! :: javapattern.info
 Java JDBC Performance Tip(2)-Insert, Delete Speed up!.htm :: javapattern.info
 JDBC DataConversion(Using Metadata) :: javapattern.info

JAR (영문튜토리얼)

 JAR 파일 (영문) :: IBM

Extention Mechanism (영문튜토리얼)

2D Graphics (영문튜토리얼)

 2D 애니메이션과 이미지 기반 경로 (영문) - IBM
 롤오버(rollover) 효과를 위한 Java2D 합성 (영문) - IBM

Sound (영문튜토리얼)

JavaBeans (영문튜토리얼)

 자바 빈으로 테트리스 게임의 구성 요소들을 재사용 가능한 컴포넌트로:: IBM
 JavaBeans 컴포넌트와 JSP 기술의 결합 (영문) :: IBM

JNI (영문튜토리얼)

 자바와 C/C++ 연동하기 :: 마이크로소프트웨어
 Java Native Interface(JNI) :: 윤경구
 자바 네이티브 인터페이스로 피어 클래스 사용하기 :: 자바스터디

Reflection (영문튜토리얼)

 reflection (영문) :: IBM
 리플렉션(reflection) 적용하기 (영문) :: IBM

Optional Packages(JMF/JMX/commAPI/3D/JAI/SpeechAPI/Help System etc)

 자바멀티미디어 JMF [01] [02] [03] :: JSTORM
 JavaHelp 소프트웨어로 헬프셋 만들기 :: 자바스터디
 JAVAHELP로 애플리케이션에 도움말 추가하기 :: 자바스터디
 블랙박스에서 엔터프라이즈 까지, JMX 1.1 style (영문) :: IBM
 블랙 박스에서 엔터프라이즈 까지, JMX 1.1 스타일 (영문):: IBM
 블랙박스에서 엔터프라이즈 까지, JMX 통합_JMX Agent를 네트워크 관리 시스템에 연결:: IBM
 자바 애플리케이션에서 USB 장치에 접근하기 (영문) :: IBM

J2SE 기타

 클래스 변형하기 (영문) :: IBM
 보다 나은 HashMap 구현하기 (영문) :: IBM
 변이(mutate)할 것인가 말것인가 (영문) :: IBM
 무한정 progress bars (영문) :: IBM
 다중 스레드 애플리케이션 프로그래밍을 쉽게 구현. Consumer 클래스:: IBM
 안전한 구조 기술 (영문) :: IBM
 자바 애플리케이션에서의 회귀 태스크 스케줄링 (영문) :: IBM
 자바 최적화 기술_자바 애플리케이션의 퍼포먼스 향상을 위한 실질 가이드 :: IBM
 패턴 매칭 :: 자바스터디
 정규식을 위한 추상 자바 API 구현하기_Perl5 regexp 라이브러리를 사용 :: IBM
 새로운 regex 라이브러리를 이용한 문자 시퀀스 파싱하기 (영문) :: IBM
 패키지 의존성 줄이기 (영문) :: IBM
 해시(hash) 해부 (영문) :: IBM
 캐릭터 세트(Character set) (영문) :: IBM
 내 쓰레드는 어디에_서버 애플리케이션에서 쓰레드 유출 피하기 :: IBM
 Preferences API를 사용하여 객체 저장하기 (영문) :: IBM
 SpringLayout 매니저 (gridbagLayout으로 부족할 때)(영문) :: IBM
 String 클래스의 오타(mistyping) 방지하기 (영문) :: IBM
 Shutdown hook클래스 작성방법 및 샘플 :: javapattern.info
 Comparator클래스의 객체비교를 통한 sorting :: javapattern.info
 Deep Copy, Shallow Copy에 관한 Perfomance Test 및 고려사항 :: javapattern.info
 Property Utility Examples_1 :: javapattern.info
 Property Utility Examples_2 :: javapattern.info
 Reflection을 이용한 Value Object비교 :: javapattern.info
 박용우님의 '스노우크래프트'자바강좌 :: 자바스터디

JSP

1.JSP 란? MS의 ASP처럼 java로 구현된 서버 스크립트입니다.

2.프로그램? java.sun.com/products/servlet/index.html

3.매뉴얼? java.sun.com/products/jsp/tags/tags.html

4.자세한 정보 java.sun.com/products/jsp

5.JSP FAQ www.esperanto.org.nz/jsp/jspfaq.html

6.JSP Developer's Guide java.sun.com/products/jsp/docs.html

 JSP강좌 [01] [02] [03] :: JSTORM
 JSP기초JSP이론 [01] [02] [03] [04] [05] [06] [07] :: 자바스터디강좌 by 파란공책
 http://www.jabook.org/jbjsp/jbjsp_20000_0_0.html :: jabook의 JSP강좌 링크
 JSP기초(Java Server Programming 번역일부) :: JSTORM

 INSTALL 

Tomcat4 설치하기 Windows NT/2K/XP, 98/ME :: okjsp

Tomcat4 Apache1.3.22연동 (mod_jk이용) (mod_webapp이용) :: okjsp

Tomcat 가상호스트 설정하기 :: okjsp

Apache 가상호스트 설정하기 ::okjsp

win98+apache+tomcat (win98과 winMe Tomcat 3.2.1, apache 1.3.14) :: okjsp

윈98 + 아파치 + 톰켓 설치 :: kimho.pe.kr

Tomcat 4.0 설치 (Windows 2000) :: kimho.pe.kr

apache + Tomcat설치하기 :: 자바스터디

리눅스에서 Tomcat 4.0 + 아파치 설치 :: kimho.pe.kr

Apache와 Tomcat4.0.1의연동(윈도2000) :: 김성박

Tomcat-apache 연동 :: okjsp

linux + apache + Tomcat설치하기 :: 자바스터디 

Tomcat 3.2의 루트디렉토리 (Tomcat의 기본디렉토리 변경) :: okjsp

Tomcat 4.1의 루트디렉토리 (+ Context 추가) :: okjsp

win2k server + IIS + tomcat 3.2.3 (이미지 캡쳐) :: okjsp

IIS + tomcat 3.2.3 Context추가 (conf/uriworkermap.properties 변경) :: okjsp

IIS에서 자카르타톰캣 돌리기 :: 최종명

oracle 9i + jdbc + tomcat 4.0.3 연동 :: 하이텔 김현규(pasome)

일반계정으로 JSP 돌리기 :: kimho.pe.kr

Tomcat 서비스 설치하기 (NT, Tomcat 3.2.2 ) :: okjsp

win2000+apache+tomcat :: 자바스터디 

win2000+IIS5+Resin (Resin 1.2.1) :: okjsp

resin install :: 자바스터디

Win2000에서 resin설치하기 :: 자바스터디

IIS에서 RESIN설치하기 :: 중앙정보기술 정원희

Resin 루트디렉토리 (Resin 1.2.1 기본디렉토리를 변경) :: okjsp

Apache1.X or 2.X+Resin 2.1.6 installed on Linux or Unix :: javapattern.info

자바 서비스를 위한 리눅스 보안 (영문) :: IBM

 응용

Eclipse 시작하기 :: okjsp

Form study #1 :: okjsp

Tomcat 4 Manager 사용하기 :: okjsp

jsp에서 log() 이용하기 :: okjsp

WAR (Web ARchive jsp로 만든 웹 어플리케이션을 쉽게 배포) :: okjsp

한글처리 (일반적인 한글처리) :: okjsp

한글처리 빈 (빈에서의 한글처리) :: okjsp

useBean :: okjsp

톰켓에서 useBean 사용하기 :: kimho.pe.kr

session bean :: okjsp

bean 활용[1] [2] :: okjsp

FileUpload :: okjsp

JspSmartUpload 설치 :: okjsp

JspSmartUpload F&Q :: okjsp

jsp 에러잡기 :: okjsp

include 집중분석 :: okjsp

수학 내용을 포함하는 동적 웹 사이트 구축하기(JSP 기술과 LateX) :: IBM

패킹(Packing) (영문) :: IBM

The expression language_JSP 애플리케이션용 MA 단순화하기 :: IBM

Echo 웹 프레임웍으로 작업하기 [1] [2] :: IBM

include를 이용한 동적 콘텐트 조작 (영문) :: IBM

JSP 코드로 이미지 관리하기_동적 서블릿 이미지 메이킹을 마음대로! :: IBM

JSP best practices 외부 사이트에서 콘텐트를 가져오는 JSTL 태그 :: IBM

JSTL primer 프리젠테이션 (영문) :: IBM

JSTL을 이용한 JSP 페이지 업데이트 (영문) :: IBM

JSTL 기초 핵심에 접근하기_커스텀 태그를 이용한 플로우 제어와 URL 관리 :: IBM

JSTL 기초, Part 4 SQL과 XML 콘텐트에 접근하기 (영문) :: IBM

JSP best practices 타임 스탬프의 힘_JSP 페이지에 타임 스탬프 만들기 :: IBM

JSP best practices JSP 태그용 커스텀 애트리뷰트 만들기 :: IBM

JSP include 메커니즘으로 “look and feel”을 더욱 좋게 (영문) :: IBM

Struts, Tiles, JavaServer Faces 통합하기 :: IBM

Struts와 Tiles, 컴포넌트 기반의 개발 도우미 (영문) :: IBM

JSP Model 1 vs JSP Model 2 Architecture overview :: javapattern.info

URL Rewriting을 이용한 session tracking_1 :: javapattern.info

URL Rewriting을 이용한 session tracking_2 :: javapattern.info

 [ JSP 기본 강좌 ] (http://www.ihelpers.co.kr)

“안녕하세요. 00 님!!!” 과 JSP 동작원리에 대하여

JSP Comment

JSP Directive

Scripting Elements

iimplicit object
Implicit Object - Request
Implicit Object - Response,Out 
Implicit Object - Session, Application 

공지사항 만들기 (1) (2) (3) (4) (5) 

게시판 만들기 (1) (2) (3) (4) (5)

메일 발송 (1) (2)

 진민님의 JSP 간단 강좌 ( http://myhome.shinbiro.com/~jimmy/ )

1. JSP 강좌1(jsp 기본구성) 

2. JSP 강좌2(get,post처리 및 내장 인스턴트사용) 

3. JSP 강좌3(외부 클래스 사용하는 방법) 

4. JSP 강좌4(JDBC를 사용하는 방법) 

5. JSP 강좌5(Cookie를 사용하는 방법) 

6. JSP 강좌6(session을 사용하는 방법) 

7. JSP 강좌7(session사용시 주의점) 

 김호님의 게시판 만들기 강좌 (http://www.kimho.pe.kr/)

JSP 게시판(방명록) 만들기 (글 내용보기)

JSP 게시판(방명록) 만들기 (글 삭제하기)

JSP 게시판(방명록) 만들기 (글 수정하기)

JSP 게시판(방명록) 만들기 (글 올리기)

JSP 게시판(방명록) 만들기 (리스트 출력하기)

JSP 게시판(방명록) 만들기 (페이징 기법)

JSP 게시판(방명록) 만들기 (또 다른 페이징 기법 1회)

JSP 게시판(방명록) 만들기 (또 다른 페이징 기법 2회)

JSP 게시판(방명록) 만들기 (글 삭제하기)

JSP 게시판(방명록) 만들기 (글 수정하기)

답변형 게시판 만들기 1회 - 답변형 게시판 로직

답변형 게시판 만들기 2회 - 글 올리기

답변형 게시판 만들기 3회 - 글 리스트 보기

답변형 게시판 만들기 4회 - 글 내용 보기

servlet

 http://www.jabook.org/jbjsp/jbjsp_10000_0_0.html :: jabook의 서블릿강좌 링크

 자바 서블릿 프로그래밍 :: 박용우
 자바 서블릿(Java ServletTM) 아키텍처 :: 박용우
 Java Servlets 2.4를 이용한 필터링 (영문) :: IBM
 Servlet API와 NIO 완벽한 결합 (영문) :: IBM
 쿠키에 한글이 들어갈 경우 예제 서블릿 :: javapattern.info
 Making the Http WebServer(Java로 web server를 구현하는 방법)_1:: javapattern.info
 Making the Http WebServer(Java로 web server를 구현하는 방법)_2:: javapattern.info
 Making the Http WebServer(Java로 web server를 구현하는 방법)_3:: javapattern.info
 Servlet2.3 API Filter interface Implementation :: javapattern.info
 Servlet과 Applet간의 TCP_IP 통신_1 :: javapattern.info
 Servlet과 Applet간의 TCP_IP 통신_2 :: javapattern.info
 Servlet의 각종 Listener 사용방법 및 샘플 :: javapattern.info
 Web Tier Java Techonology :: javapattern.info

 INSTALL

JSP의 INSTALL 참고

taglibrary/customtag

 JSP Tag Library 기초강좌 :: okjsp

 커스텀 태그로 JSP 페이지 제어하기_커스텀 태그 라이브러리 통신의 모든 것 :: IBM

 Custom Tag Library (1) (2) (3) (4) (5) (6) :: http://www.ihelpers.co.kr

 커스텀 태그에서의 에러 핸들링 (영문) :: IBM

 JSP 커스텀 태그를 구현하는 다섯 단계 (영문) :: IBM

 InvokeEJB Custom Tag Library implementation_1 :: javapattern.info

 InvokeEJB Custom Tag Library implementation_2 :: javapattern.info

 InvokeEJB Custom Tag Library implementation_3 :: javapattern.info

 Struts 1.1 Tiles-framework에 대한 개요 및 사용방법 :: javapattern.info

 taglib (영문) :: IBM

웹서비스

 웹 티어 클러스터링, Part 1 JavaGroups로 웹 서비스와 애플리케이션 설계 :: IBM

JAXP/JAXR/JAX-RPC

SOAP

 아파치 SOAP 유형 매핑, Part 1 아파치의 직렬화 API 검토하기 :: IBM

 아파치 SOAP 유형 매핑, Part 2 정의된 직렬자와 비직렬자를 작성 :: IBM

Enterprise JavaBeans(EJB)
 J2EE 환경 소개 :: 자바스터디
 오라이온 서버 설치 및 J2EE 애플리케이션 배치 :: 자바스터디
 J2EE 신기술의 해설 :: 자바스터디

 [ EJB 기본문서 ]

Java Enterprise edition tutorial :: SUN

썬 사의 EJB 규약

Enterprise Java Beans란 무엇인가? [01] [02] [03] [04] [05] :: JSTORM

EJB 한글자료 

EJB 실전프로그래밍 (Persistence PowerTier for EJB) :: 자바스터디

Java Enterprise [PDF] :: 김국현님 

EJB 성능향상을 위한 Best Practice [1] [2] :: JSTORM

Writing Enterprise Application [01] [02] [03] [04] [05] [06] [07] :: JSTORM

EJB 디자인 패턴 ↓

 [ EJB 응용 ]

EJB의 트랜잭션 :: JSTORM 박지훈님

J2EE 애플리케이션에서의 XML :: JSTORM 한제택님 

자바 서버상에서 서블렛의 활용 :: 핸디소프트 윤동빈님 

J2EE에서의 작업 스케쥴링 :: JSTORM 윤준호님 

J2EE 신기술 해설 :: 한국오라클(주) 안병문님 

Component Architecture(CORBA, EJB, COM) :: 김국현님 

Grady Report - EJB, Design Pattern, XP 강좌 문서 :: 박현철(hpark@kebi.com) 

이런 J2EE프로젝트는 위험하다 :: JSTORM

LDAP 소개 :: database.sarang.net 부산대학교 컴공과 박근오님 (MS WORD)

분산 관리 솔루션 (영문) :: IBM

상태보존형(stateful) 네트워크용 J2EE (영문) :: IBM

싱글사인온 솔루션 구현 (영문) :: IBM

싱글사인온 GSS-API와 Kerberos 티켓을 사용하여 SSO를 구현 :: IBM

EJB 예외 처리 실전 (영문) :: IBM

타당성검사(Validation) 헬퍼(helper) 클래스_데이터-포맷 타당성 검사에서 코드 중복 없애기 :: IBM

데이터 타당성검사(validation) (영문) :: IBM

동적 delegate_Java reflection을 이용하여 보다 일반적인 business delegate 구현하기 :: IBM

보다 나은 예외 처리 프레임웍 구현하기 (영문) :: IBM

엔터티 빈 보호_Session Facade 패턴으로 데이터를 안전하게 관리하기 :: IBM

Business Delegate 패턴_EJB 디자인에서의 추상 비지니스, 구현, 애플리케이션 로직 :: IBM

delegation의 한계_business delegate의 대안 :: IBM

JNDI의 산업용 최적화 (영문) :: IBM

JNDI 미로 통과하기 (영문) :: IBM

value 객체를 사용하여 RMI 트랜잭션 속도 높이기 (영문) :: IBM

EJB State와 SOAP 헤더 (영문) :: IBM

JavaSpaces로 적응력 있고 광범위한 솔루션 구현하기 (영문) :: IBM

J2EE 1.2에 다중 애플리케이션 전개하기 (영문) :: IBM

J2EE 내부 객체 사용 (영문) :: IBM

J2EE 영속적인 데이터 관리, Part 1 (영문) :: IBM

J2EE 영속적인 데이터 관리, Part 2 (영문) :: IBM

J2EE를 이용한 서비스 지향 아키텍쳐 프레임웍 설계 (영문) :: IBM

stateful 웹 애플리케이션의 구현과 관리 (영문) :: IBM

stateless 네트워크용 J2EE 기술 (영문) :: IBM

Java Message Service(JMS)

 벤더로부터 독립된 JMS 솔루션 구현하기 :: IBM

 메시지 큐잉이 기업 애플리케이션의 유연성과 확장성을 향상시키는 방법:: IBM

 JMS를 이용한 엔터프라이즈 메시징 (영문) :: IBM

application server

 JEUS 기반의 J2EE - from TmaxSoft 
JEUS EJB Server의 관리와 이를 이용한 EJB 개발 (PDF) 
JEUS JTS의 구조와 이를 이용한 개발 (PDF) 
JDBC의 개념과 프로그래밍하는 방법 (PDF) 
XML 소개와 XML APPLICATION 개발 (PDF) 
JEUS JMS의 구조와 이를 이용한 개발 (PDF) 
JEUS JNDI의 구조와 이를 이용한 개발 (PDF) 
WebtoB Web Server의 소개 (PDF)

 HP Netaction Application Server 기반의 J2EE - from Nicstech 
HP Netaction Application Server 설치 방법(WIN 환경) [MS-Word] 
HP Netaction Application Server 설치 방법(UNIX/LINUX 환경) [MS-Word] 
HP Netaction Application Server 에서 웹서버 세팅 방법 [MS-Word] 
HP Netaction Application Server 기반의 JSP, Servlet 개발 방법 [MS-Word] 
HP Netaction Application Server기반에서 EJB사용을 위한 Tutorial[PDF] 
RADPAK 개발툴 사용방법 [MS-Word]

 Ea Server 기반의 J2EE - from Sybase 
EA Server 소개 (PDF) 
EJB-CORBA 개발 (PDF) 
분산어플리케이션 (PDF) 
EAServer & PowerJ Installation Guide (ZIP)

 PowerJ 연재 강좌 (PDF) 
Simple Application | 웹 어플리케이션 | EJB 컴포넌트 작성 | 컴포넌트 사용하기 
완벽한 J2EE Application 구축방법 (PDF)

 javapattern.info 강좌

IBM Webshpere 5.0 의 서버시작, 중지 및 EJB Deploy ANT Build

Web Application Framework개발방법(1)-Framework의 개요

Web Application Framework개발방법(2)-LifeCycle,Controller

Web Application Framework개발방법(3)-View page Composing

Web Application Framework최종 소스 및 인스톨

Weblogic 7에서 JMS Queue Browser 활용 1

Weblogic 7에서 JMS Queue Browser 활용 2

Weblogic EJB Deploy using ANT build

Java Data Objects(JDO)

 Castor JDO 시작하기(영문) :: IBM

 Castor를 이용한 데이터 바인딩 (영문) :: IBM

JavaMail

 JavaMail 설치 :: 자바스터디

 JavaMail 기본설치 :: okjsp

 JavaMail 폼메일 :: okjsp

 JavaMail 파일첨부메일 :: okjsp

 JavaMail 메일링리스트 :: okjsp

 Apache의 James 엔터프라이즈 이메일 서버 (영문) :: IBM

 javapattern의 java WebMail 구현

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

Transaction(JTA/JTS)

 트랜잭션에 대한 소개_트랜잭션은 신뢰성 있는 애플리케이션을 위한 구성 요소 :: IBM

 장막 뒤의 마법_J2EE 컨테이너가 트랜잭션 관리의 복잡성을 숨기는 방법:: IBM

 보안과 퍼포먼스 균형맞추기_트랜잭션 경계설정과 고립화 가이드라인 :: IBM

 WS-AtomicTransaction과 JTA를 이용한 분산 트랜잭션 (영문) :: IBM

J2EE 기타

 Authenticator클래스를 통한 서버인증 메일전송 :: javapattern.info

 Distributed Transaction Introduce :: javapattern.info

 JRMP, IIOP type의 RMI분산 객체(RMI over IIOP) :: javapattern.info

 MarshalledObject and Deserialization :: javapattern.info

 RMI Peering System Construct :: javapattern.info

 RMI programming, The Lifecycle of server :: javapattern.info

 WebLogic WLSPool Size변경 application :: javapattern.info

모바일(J2ME) :

 J2ME와 mobile device :: 김종원

 핸드폰 단말기용 자바 애플리케이션의 구현 :: 배준현

 네덜란드의 무선 기술 (영문) :: IBM

 모바일 장치 디텍션(detection) (영문) :: IBM

 P2P 네트워크 모바일 디바이스를 JXTA와 Jabber 클라이언트로 전환하기 :: IBM

 기존의 네트워크 경계를 넘어 확장되는 P2P 시스템 설계 :: IBM

 JXTA 2 고성능 P2P 네트워크 (영문) :: IBM

 무선 J2ME 보안 (영문) :: IBM

 EPOC에서 자바 애플리케이션 만들기 (영문) :: IBM

 J2ME 101, Part 3 Record Management System (영문) :: IBM

 J2ME 101, Part 4 Generic Connection Framework (영문) :: IBM

 J2ME 기록 관리 저장 (영문) :: IBM

 J2ME 애플리케이션과 Kerberos, Part 3 (영문) :: IBM

 J2ME를 무선 메시지교환으로 확장하기 (영문) :: IBM

 J2MEMIDP 애플리케이션 보안 (영문) :: IBM

 MIDlets 클래스_모든 J2ME 프로그램의 기반하에 구축하기 :: IBM

 Secrets of the wireless elite Jason Loia (영문) :: IBM

 Secrets of the wireless elite Nancy Lehrer(영문) :: IBM

 J2ME를 이용한 모바일 결제(m-payments)-모바일 장치에서 결제까지 :: IBM

 강사님별 강좌

 배준현님 마소 강의


무선단말을 위한 자바플랫폼 : CLDC/MIDP 
핸드폰에는 나만의 자바 애플리케이션을! 
OSGi로 여는 임베디드 자바 세상

 이경범님 마소 강의

알라딘 기반의 상용만화 애플리케이션 만들자

 김종원님 프세 강의

MIDP를 사용한 휴대폰 프로그래밍
J2MEWTK를 사용한 MIDlet Httpconnection 프로그래밍
SK-Aladdin VM(virtual machine)을 이용한 멀티 플렛폼 채팅 프로그램 작성
&J2ME와 embedded device

 유제정님 모바일 DB 강의

1. 모바일데이터베이스를 이용한 MIDP Sample 프로그램 구현

 김준동님 모바일 강의

소형기기를 위한 프로그래밍 전략

 정성권님 번역 자료

Introduction to Wireless Application Development

 권기경님 번역 자료

Using XML in Wireless Applications
Connected Limited Device Configuration (CLDC) (CLDC API) (KJAVA API)

 권기경님 자료

컴파일에서 사전 검증, 실행까지 
이미지 사용 예제 분석
[번역] Connection Framework


 기기별 강좌

 Mobile Information Device Profile (MIDP) (MIDP-FCS API)
권기경님 자료

컴파일에서 사전 검증, 실행까지 
웹서버에 midp 응용프로그램을 올려 놓고 실행하기 

[번역] 
MIDP Inter-Communication with CGI and Servlets 
HTTP를 사용하는 MIDP Network Programming과 Connection Framework (정창수님번역) 
MIDP GUI Programming Programming the Phone Interface (오용석님번역)
Quick Start Guide: JavaTM 2 Platform Micro Edition, Wireless Toolkit (오광신님 번역)
MIDP Database Programming using RMS: a Persistent Storage for MIDlets (번역)

 PALM Pilot PDA (Palm OS) (PALM API)

권기경님 자료 :: 컴파일에서 사전 검증, 실행까지

 WABA (WabaSoft) (WABA API)

권기경님 자료 :: 컴파일에서 사전 검증, 실행까지

 n.TOP 마법사 (SK Telecom, XCE) (n.TOP 마법사 API) (XCE Tutorial)

박재범님 강의 :: 컴파일에서 실행까지 
마소자료 :: MIDP 소개 | SKT-P 소개 | 게임작성 소개

 EZ-JAVA 핸드폰 (LG Telecom) (EZ-JAVA 영문 API) (EZ-JAVA 한글 API)

권기경님 자료
컴파일에서 사전 검증, 실행까지
실제 폼에서 ez-java 응용프로그램 실행하기

박재범님 자료 :: 이미지 사용 예제 분석

 -MODE 핸드폰 (Nttdocomo) (I-MODE API)

권기경님 자료
컴파일에서 사전 검증, 실행까지 
i모드 Java 확장 API 클래스 라이브러리가 아닌 i-jade를 사용하여 컴파일과 실행까지 

wizardee님 자료 :: iAppli 개발환경 만들기

 iDEN 핸드폰 (Motorola) (CLDC API) (MIDP API

권기경님 자료 :: 컴파일에서 사전 검증, 실행까지

 Personal Java 강좌

황제헌님 자료
Personal Java Programming 
Personal Java 한글 encoding 문제 해결

CessHan for Palm-sized PC & PocketPC 설치 방법

KVM에 대한 기본 설명
어플리케이션 사이즈를 줄여주는 Obfuscator
SUN의 Monty 프로젝트 관련 자료
MIDP NG (New Generation) 버젼에 관한 자료 [UI, Games, and Sound] [Security and Networking]
Parsing XML in J2ME MIDP
Introducing Wireless JMS (PDF)

XML
 XML의 기본개요 :: javapattern.info
 XML 정리 (pdf파일)
 XML korean spec :: http://user.chollian.net/~clevekim
 자바와 XML :: JSTROM
 Using XML in Oracle
 XML 게시판 [소스] :: 김미영 님
 XML 과 데이타베이스 :: 박용우
 XSL, XSLT, XPATH [1] [2] [3] [4]:: 전윤경(ygchon@penta.co.kr)
 DOM으로 프로그래밍하자 [1] [2] :: 전윤경(ygchon@penta.co.kr)
 About DOM & DOM Programming with Java :: javapattern.info
 DOM Level 3 Core의 핵심 기능 [1] [2] (영문) :: IBM
 About SAX & SAX programming with Java :: javapattern.info
 SAX 파서 설치하기 (영문) :: IBM
 자바 프로그래밍으로 온라인 XML 데이터 검색하기_XML 파싱 :: IBM
 자바 프로그래밍의 XML-RPC (영문) :: IBM
 자바가 본 XML :: 자바스터디
 Digester와 Lucene을 이용한 XML 파싱, 인덱싱, 검색 (영문) :: IBM
 XML 로 홈페이지 만들기 :: 전윤경(ygchon@penta.co.kr)
 IBM developerWorks XML 아티클 템플릿 (영문) :: IBM
 자바 문서 모델 사용법_상이한 자바 XML 문서 모델들이 작동하는 방식:: IBM
 Schema Infoset Model로 스키마에 대한 복잡한 쿼리를 간단히! :: IBM
 Working XML 경로 컴파일과 테스트 자동화_알고리즘과 JUnit 자세히 살펴보기 :: IBM
 XML 데이터 바인딩, 성능 (영문) :: IBM
 XML 데이터 바인딩, JiBX architecture (영문) :: IBM
 XML 데이터 바인딩, JiBX 사용하기 (영문):: IBM
 About JDOM & JDOM Programming with Java.htm :: javapattern.info
 FOP를 이용한 PDF생성시 한글변환방법 :: javapattern.info
 XML을 이용한 Database Query Manager 구현하기 :: javapattern.info
 XMLBeans를 이용한 xml binding.htm :: javapattern.info

IDE

 JBuilder 5 한글 매뉴얼 (pdf)
 JBuilder 6 한글 매뉴얼
 JBuilder 7 [인스톨] [환경설정](ppt)
 JBuilder 에서 휠마우스 사용
 제이빌더에서 라인넘버 표시
 제이빌더에서 Ant 실행
 제이빌더에서 자바코드 뷰티파이어
 한국 인프라이즈 제공 J 빌더 특강 [ZIP로 내려받기] :: javastudy.co.kr
 Eclipse Platform 시작하기 :: IBM
 Eclipse 플러그인 개발하기_플러그인 구현, 디버그, 설치 :: IBM
 Eclipse 플러그인 서비스 (영문) :: IBM
 Eclipse Workbench 밖에서 Eclipse GUI 사용하기, 간단한 파일 탐색 애플리케이션 :: IBM
 Eclipse Workbench 밖에서 Eclipse GUI 사용하기, 메뉴, 툴바 추가(영문) :: IBM
 Eclipse와 HSQLDB 관계형 데이터베이스를 Eclipse에 임베딩하기, Part 1 (영문) :: IBM
 Eclipse의 자바 개발 툴 확장하기 (영문) :: IBM
 Graphical Editing Framework을 사용하여 Eclipse 기반 애플리케이션 만들기 (영문) :: IBM

매뉴얼
 VisualAgeForJava 3.0 한글 매뉴얼 (pdf)
 WSCP 매뉴얼 (doc) :: 윤성민

디자인패턴
 디자인패턴 실전체험 [1] [2] [3] [4] :: 자바스터디
 기본패턴 Overview :: javapattern.info
 인터페이스! 다시 생각하기 :: 오광신
 Good Java Style :: JSTORM
 Command패턴의 기초 :: JSTORM
 동적으로 자바 어플리케이션 확장하기 :: JSTORM
 DesignPattern for Java [소스] :: JSTORM
 리팩토링(Refactoring)_Eclipse의 자동화 리팩토링 기능 :: IBM
 Double-checked locking과 Singleton 패턴_double-checked locking 이디엄 :: IBM
 반 패턴으로 프로그래밍을 향상시키는 방법 :: IBM

 EBJ 디자인패턴

Session Facade :: JSTORM

EJB Home Factory :: JSTORM

Business Interface :: JSTORM

Dual Persistent Entity Bean :: JSTORM

JDBC for Reading :: JSTORM

Business Delegate :: JSTORM

Data Transfer HashMap :: JSTORM

Data Transfer RowSet :: JSTORM

EJB Command Pattern :: JSTORM

Version Number :: JSTORM

"Dependent Value Object" 와 큰 단위의 BMP 엔티 :: JSTORM

EJB 전략, 팁 그리고 관례 :: JSTORM

Message Facade :: JSTORM

Value Object Factory :: JSTORM

Data Access Command Beans :: JSTORM

Blueprint(J2EE Petstore) client tier pattern overview :: javapattern.info

EJB design performance tips :: javapattern.info 

객체지향 UML
 박용우님의 객체지향형 프로그래밍 :: 자바스터디
 심원도님의 UML강좌 :: 자바스터디
 이준규님의 객체지향형 강좌 :: 자바스터디
 Rational Rose에서 UML을 이용한 모델링 [1] [2] [3] [4] :: 자바스터디
 http://www.jabook.org/jbjava2/jbjava2_10000_0_0.html :: jabook의 객체지향강좌링크

자바스크립트
 자바스크립트 레퍼런스(win help용)
 자바 초보자를 위한 JavaScript 강좌 :: javanuri
 애플릿과의 통신(LIVE CONNECTION)을 위한 netscape.jar

XP(Extreame Programming)
 Extreme Programming 돌아온 XP distilled, Part 1_XP의 진실
 Extreme Programming을 밝힌다 돌아온 XP distilled, Part 2 (영문)
 Extreme Programming을 밝힌다 돌아온 XP distilled, Part 3 (영문)
 Extreme Programming을 밝힌다 진정한 XP 고객_소프트웨어 프로젝트를 운영하는 방법 배우기
 Extreme Programming을 밝힌다 페어 프로그래밍(Pair programming) (영문)
 Extreme Programming Just-in-time 디자인 (영문)
 Extreme Programming Test-driven 프로그래밍_코드를 작성하기 전에 테스트 먼저 작성하기
 Extreme Programming 작업에 맞는 (XP) 툴
 Extreme Programming Just-in-time 디자인 (영문)

기타
 ANT 매뉴얼 [] [] :: http://www.hanbitbook.co.kr
 Apache ANT Guide :: 최지웅
 자바 마이그레이션 :: 하동욱(handan@hitel.net)
 JINI기술과 실제 :: 자바스터디
 고급 객체 직렬화 :: JSTORM
 COM과 자바의 연결 :: 핸디소프트 윤동빈
 PDF와 자바 :: JSTORM 윤준호
 JavaCC를 이용하여 당신만의 언어를 만들자 [소스]:: JSTORM 윤준호
 JavaCC, 파스 트리, XQuery 문법, Part 1 (영문) :: IBM
 JavaCC, 파스 트리, XQuery 문법, Part 2 (영문) :: IBM
 인스턴트 로깅(Instant logging) log4j 활용하기 (영문) :: IBM
 Log4j를 위한 여러가지 환경설정(xml property)_1 :: javapattern.info
 Log4j를 위한 여러가지 환경설정(xml property)_2 :: javapattern.info
 Log4j의 출력방향 전환하기 :: javapattern.info
 Extract unicode from ASCII format text :: javapattern.info
 MP3 File Footer ID3V2 Spec Navigator :: javapattern.info
 객체 보유 (object prevalence) 소개 (영문) :: IBM
 동적 이벤트 리스너 프록시 (영문) :: IBM
 리눅스에 LSID 권한 구현하기 (영문) :: IBM
 매력적인 Jython (영문) :: IBM
 소프트웨어 개발의 미래 (영문) :: IBM
 접근가능성을 위한 코딩 (영문) :: IBM
 쉬운 코드 관리를 위한 디자인 (영문) :: IBM
 영속적인 트레이스 시스템으로 디버깅을 쉽게! (영문) :: IBM
 영역 지향 프로그래밍(Aspect -oriented programming)으로 모듈화 향상시키기(AspectJ) :: IBM
 강결합의 약점을 없앤 AOP (영문) :: IBM
 자바 native 컴파일의 무게 재기_자바 소스에서 native 코드를 생성할 때의 장단점 :: IBM
 자바 프로그래밍에서의 Assertion과 temporal logic (영문) :: IBM
 버그 패턴에 Temporal logic 사용하기 (영문) :: IBM
 콘텐트를 배치하는 새로운 방법 (영문) :: IBM
 플랫폼 의존 gotchas: platform-dependent bug patterns (영문) :: IBM
 AspectJ와 mock 객체를 이용한 유연한 테스팅 :: IBM
 Concurrency made simple util.concurrent package :: IBM
 Concurrent 컬렉션 클래스 (영문) :: IBM
 ContentHandler의 애트리뷰트 (영문) :: IBM
 ContentHandler의 엘리먼트와 텍스트 (영문) :: IBM
 '스팩(specification)'이라는 줄타기를 하다_잘 정의된 스팩의 중요성 :: IBM
 깊이 우선 Visitor와 broken dispatches_Visitor 패턴 변종으로 코드 간결성 향상 :: IBM
 대화식 검사 기능을 제공하는 Repls_소프트웨어를 효과적으로 진단하는 기법 :: IBM
 Run-on Initializer 버그 패턴_인자를 가진 생성자를 피함 :: IBM
 e-business on demand 개발자의 로드맵 (영문) :: IBM
 Eye on performance 객체 레퍼런싱 (영문) :: IBM
 Eye on performance 마이크로 퍼포먼스 벤치마킹 (영문) :: IBM
 Eye on performance 스트레스의 하중 (영문) :: IBM
 Eye on performance 예외에 대한 예외 (영문) :: IBM
 Eye on performance 향상된 개발 프로세스 (영문) :: IBM
 Javassist를 이용한 클래스 변형 (영문) :: IBM
 JML 시작하기_JML 주석으로 자바 프로그램 향상시키기 :: IBM
 peer-to-peer 컴퓨팅의 실제 IP 멀티캐스트 기반의 검색 :: IBM
 1vs순차N구조의 name-value pair DataSet 정의 :: javapattern.info
 코딩지침 :: javapattern.info
 Proxy하에서의 Client IP얻기.htm :: javapattern.info


※ 자료는 서로 공유되어야 합니다. ^_^ 각 강의자료의 저작권은 저작권자에게 있습니다.


'Java' 카테고리의 다른 글

NullPointerException을 예방하는 방법  (0) 2018.02.22