분류 전체보기 (229) 썸네일형 리스트형 [스레드] 7. 스레드 상태제어 예제1: 생산자스레드가 데이터를 만들면, 소비자스레드가 읽는다. package ex05_wait_notify; public class WaitNotifyExample { public static void main(String[] args) { DataBox dataBox = new DataBox(); ProducerThread producerThread = new ProducerThread(dataBox); ConsumerThread consumerThread = new ConsumerThread(dataBox); producerThread.start(); consumerThread.start(); } } 실행결과: ProducerThread가 생성한 데이터: Data-1 ConsumerThread가 읽.. [스레드] 6. 스레드 상태제어(1) 상태제어 - 실행중인 스레드의 상태를 변경하는 것을 말한다. - 상태변화를 가져오는 메소드의 종류 ※ 주어진 시간동안 일시정지 - sleep() try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } - 얼마동안 일시 정지 상태로 있을 것인지, 밀리세컨드(1/1000초) 단위로 지정 - 일시정지 상태에서 interrupt() 메소드가 호출되면 InterruptedException 발생 예제: package threadsleep; import java.awt.*; public class SleepExample { public static void main(String[] args) { Toolkit toolkit.. [스레드] 5. 스레드 상태 객체 생성 NEW : 스레드객체가 생성, 아직 start() 메소드가 호출되지 않은 상태 실행대기 RUNNABLE : 실행 상태로 언제드지 갈 수 있는 상태 일시정지 BLOCKED : 사용하고자하는 객체의 락이 풀릴 때 까지 기다리는 상태 WAITING : 다른 스레드가 통지할 때까지 기다리는 상태 TIMED_WAITING : 주어진 시간 동안 기다리는 상태 종료 TERMINATED : 실행을 마친 상태 예제: package thread_state; public class ThreadStateExample { public static void main(String[] args) { StatePrintThread spt = new StatePrintThread(new TargetThread()); spt... [스레드] 4. 동기화 메소드와 동기화 블록 예제1 package test; /* 공유 객체를 사용할 때의 주의할 점 - 멀티 스레드가 하나의 객체를 공유해서 생기는 오류 동기화 메소드 및 동기화 블록 - synchronized - 단 하나의 스레드만 실행할 수 있는 메소드 또는 블록. - 다른 스레드는 메소드나 블록이 실행이 끝날 때까지 대기. */ public class Main { // 동기화 메소드 public synchronized void method1() { // 임계 영역; -- 단하나의 스레드만 실행 } // 동기화 블록 synchronized (/*공유객체*/) { // 임계 영역; -- 단하나의 스레드만 실행 } public static void main(String[] args) { } } 예제2: 동기화되지 않은 메소드 pa.. 객체지향 프로그래밍(5): subClass subClass는 다음 세가지를 활용한다. 1. 함수의 프로토타입 체인 2. extend 함수 3. 인스턴스를 생성할 때 생성자 호출(_init) subClass는 상속받을 클래스에 넣을 변수 및 메소드가 담긴 객체를 인자로 받아 부모 함수를 상속받는 자식 클래스를 만든다. 여기서 부모 함수는 subClass() 함수를 호출할 때 this 객체를 의미한다. 예를들면... var SuperClass = subClass(obj); var SubClass = SuperClass.subClass(obj); 이처럼 SuperClass를 상속받는 subClass를 만들고자 할 때, SuperClass.subClass() 의 형식으로 호출하게 구현한다. 참고로 최상위 클래스인 SuperClass는 자바스크립트의 Fu.. 객체지향 프로그래밍(4): 캡슐화 var Person = function(arg) { var name = arg ? arg : 'devjones'; this.getName = function() { return name; } this.setName = function(arg) { name = arg; } }; var me = new Person(); console.log(me.getName()); me.setName('grindman'); console.log(me.getName()); console.log(me.name); // undefined var ArrCreate = function(arg) { var arr = [1,2,3]; return { getArr: function() { return arr; } } }; var obj.. 객체지향 프로그래밍(3) : 클래스기반 상속 function Person(arg) { this.name = arg; } Person.prototype.setName = function(value) { this.name = value; } Person.prototype.getName= function() { return this.name; } function Student(arg) {} var you = new Person('dev-jones'); Student.prototype = you; var me = new Student('grindman'); me.setName('grindman'); console.log(me.getName()); me 인스턴스를 생성할 때 부모 클래스인 Person의 생성자를 호출하지 않는다. var me = new St.. 객체지향 프로그래밍(2) : 프로토타입 상속 자바스크립트는 객체 프로토타입 체인으로 상속을 구현한다. 1. 클래스 기반 전통적인 상속 방식 흉내. 2. 클래스 개념 없이 객체의 프로토타입으로 상속 구현 function create_object(o) { function F() {} F.prototype = o; return new F(); } create_object() 함수는 인자로 들어온 객체를 부모로 하는 자식 객체를 생성하여 반환한다. 새로운 빈 함수 객체 F를 만들고, F.prototype 프로퍼티에 인자로 들어온 객체를 참조한다. 함수 객체 F를 생성자로 하는 새로운 객체를 만들어 반환한다. 이렇게 반환된 객체는 부모 객체의 프로퍼티에 접근할 수 있고, 자신만의 프로퍼티를 만들 수도 있다. 이렇게 프로토타입의 특성을 활용하여 상속을 구현하.. 객체지향 프로그래밍(1) 자바스크립트에서 클래스 안의 메소드를 정의할 때는 프로토타입 객체에 정의한 후, new로 생성한 객체에서 접근할 수 있게 하는 것이 좋다. 더글라스 크락포드는 다음과 같은 함수를 제시하면서 메소드를 정의하는 방법을 소개한다. Function.prototype.method = function(name, func) { if( !this.prototype[name] ) { this.prototype[name] = func; } } 이 함수를 이용한다면... Function.prototype.method = function(name, func) { this.prototype[name] = func; } function Person(arg) { this.name = arg; } Person.method('setN.. ORM 활용 ORM을 이용하면 상당히 쉽게 데이터를 얻을 수 있다. ORM으로 서버 데이터를 가져와서 모델 레코드를 갱신할 것이다. Model 오브젝트에 populate() 라는 함수를 추가하자. populate() 함수는 넘겨진 값을 반복하면서 인스턴스를 만들고, records 오브젝트를 갱신한다. Model.extend({ populate: function(values) { // 모델과 레코드를 재설정한다. this.records = {}; for(var i = 0, il = values.length; i < il; i++) { var record = this.init(values[i]); record.newRecord = false; this.records[record.id] = record; } } }); 요.. 이전 1 2 3 4 5 6 ··· 23 다음