[Spring]2. Spring DI - xml파일을 이용한 DI

- xml설정파일을 이용하는 방법..


자바에서 클래스를 추가할 때 import를 하는것 처럼 태그를 추가할 때 xml설정 파일에도 스키마로 네임스페이스를 추가하여야 한다.



- Dao 인터페이스와 그 것을 구현한 OracleDao. 

1
2
3
4
5
6
7
8
9
10
11
public interface Dao {
    public void getList();
}
//인터페이스 구현을 통해 OracleDao를 만든다.
public class OracleDao implements Dao{
    @Override
    public void getList(){
        System.out.println("OracleDao.getList() - Oracle DB에 접근합니다.");
    }
}
 


- Service인터페이스와 구현한 OracleService. Dao에 의존성이 있기 때문에 멤버로 Dao를 가지고 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public interface Service {
    public void getList();
}
//역시 service또한 인터페이스 구현으로 만든다.
public class OracleService implements Service{
    Dao dao;
    @Override
    public void getList(){
        System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
        dao.getList();
        System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
    }
    @Override
    public void setDao(Dao dao) {
        this.dao = dao;
    }
}


- Service를 가지고 있는 Coltroller.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class ListController {
    private Service service;
    
    public void setService(Service service) {
        this.service = service;
    }
    
    public void doGet(){
        System.out.println("Controller - OracleService를 호출합니다.");
        service.getList();
        System.out.println("Controller - Service에서 데이터를 받아 View에 넘겨줍니다.");
    }
}

  

- Controller를 호출할 메인 메소드.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
 
public class testMain {
 
    public static void main(String[] args) {
        Resource resource = new ClassPathResource("apllicationContext.xml");
        BeanFactory bf = new XmlBeanFactory(resource);
        ListController c = (ListController) bf.getBean("listController");
        System.out.println("Controller를 호출합니다.");
        c.doGet();
    }
 
}

- 예상 결과

Controller를 호출합니다.

Controller - OracleService를 호출합니다.

OracleService.getList() - OracleDao.GetList() 를 호출합니다

OracleDao.getList() - Oracle DB에 접근합니다

OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.

Controller - Service에서 데이터를 받아 View에 넘겨줍니다



- 이것을 실행 시키기 위해서는 설정된 xml파일이 필요하다.

  - 위의 세 클래스(controller, service, dao)를 이와 같이 등록한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">
 
    <bean id="oracleDao" class="com.OracleDao" >
        
    </bean>
    
    <bean id="oracleService" class="com.OracleService" >
        <property name="dao">
            <ref bean="oracleDao"/>
        </property>
    </bean>
 
    <bean id="listController" class="com.ListController" >
        <property name="service">
            <ref bean="oracleService"/>
        </property>
    </bean>
        
</beans>

 

- Bean은 객체이다. Spring DI는 모든 등록된 클래스를 프로젝트를 처음 실행할때 전부 객채로 생성한다. 객체가 다른 객체를 필요로 할 때, 필요로 하는 객체를 생성자나 setter를 통해 주입시켜준다.

- xml파일에 <constructor-arg>를 이용하여 생성자를 이용한 DI도 가능하다.


autowire속성으로 자동으로 의존성 주입이 가능하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<beans>
 
    <bean     id="service" 
            class="wakeup.di.service.Service">
    </bean>
            
    <bean     id="listController" 
            class="wakeup.di.controller.ListController"
            autowire="byType">
    </bean>
</beans>
 





 

- 다음 코드는 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<bean id="oracleDao" class="com.OracleDao" >
        
</bean>
    
<bean id="oracleService" class="com.OracleService" >
    <property name="dao">
        <ref bean="oracleDao"/>
    </property>
</bean>
 
<bean id="listController" class="com.ListController" >
    <property name="service">
        <ref bean="oracleService"/>
    </property>
</bean> 


     - 다음과 같다.

 
1
2
3
4
5
6
7
8
9
10
//xml파일의 id속성은 객체변수명이 되고, class는 클래스명이다.
OracleDao oracleDao = new OracleDao();
 
//property name은 멤버 Dao변수를 뜻하고, ref는 그 필드에 들어갈 객체이다.
OracleService oracleService = new OracleService();
oracleService.setDao(oracleDao);
 
//controller도 마찬가지.
ListController listController = new ListController();
listController.setOracleService(oracleService);





'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

[Spring]4. scope  (0) 2013.10.21
[Spring]3. Spring DI - @(어노테이션)을 이용한 DI  (0) 2013.10.21
[Spring] 1. Spring DI  (0) 2013.10.21
XML 이란?  (0) 2013.10.21
Spring  (0) 2013.10.18

댓글()

[Spring] 1. Spring DI

1. Spring DI


 - Spring DI : 모든 클래스의 객체를 미리 생성해 두고, 어떠한 객체가 필요로 하는 객체를 주입 시켜주는 일종의 컨테이너.

주입 시키는 방법은 xml 설정과 @어노테이션이 있다. 어노테이션도 결국 xml로 바뀐다. 보통 어노테이션 방법을 많이 쓰지만 소스는 없고 클래스 파일만 가지고 있을때는 xml 설정을 쓴다.


- 생성자, setter주입을 사용한다. xml에 설정하면 자동으로 주입 시킨다.

 

- 경량 컨테이너라고도 한다. 다른 컨테이너에 비해 리소스 용량이 크지 않기 때문이다.


- DI를 사용하기 위해서는 필요한 클래스를 멤버 변수로 가지고 있어야 하고, 생성자 혹은 setter를 가지고 있어야 한다.

     

- 빈은 빈팩토리에서 getBean()을 실행 할 때 모든 객체 생성이 이루어 진다. 




'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

[Spring]3. Spring DI - @(어노테이션)을 이용한 DI  (0) 2013.10.21
[Spring]2. Spring DI - xml파일을 이용한 DI  (0) 2013.10.21
XML 이란?  (0) 2013.10.21
Spring  (0) 2013.10.18
Maven  (0) 2013.10.18

댓글()

XML 이란?

 - XML(Extensible Markup Language) : 확장형 마크업 언어. 데이터 교환에 대한 표준을 정의 한다.


 - SGML(Standard Generalized Markup Language) : xml 과 html의 모체가 되는 언어. 

다양한 형태의 전자문서들을 서로 다른 시스템들 사이에 정보의 손실없이 효율적으로 전송, 저장, 자동처리를 위한 국제표준화기구, ISO 문서처리표준의 하나이다. html과 xml도 이것을 이용해 만들어졌다.

'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

[Spring]2. Spring DI - xml파일을 이용한 DI  (0) 2013.10.21
[Spring] 1. Spring DI  (0) 2013.10.21
Spring  (0) 2013.10.18
Maven  (0) 2013.10.18
Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것.  (0) 2013.10.17

댓글()

Spring

- Spring : 스프링은 컨테이너와 같다. 객체 생성과 관리는 스프링이 한다. 스프링에서 객체는 bean이라고 한다.


- InsertController

1
2
3
4
5
6
public class InsertController {
    public void execute(){
        System.out.println("InsertController.execute() 실행.");
    }
}
 



- applicationContext.xml

* bean을 관리하는 설정 파일.

* 반드시 이런 이름을 쓸 필요는 없다.

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                                  http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
    
    <bean     id      = "insertController" 
            class = "wakeup.controller.InsertController">
    </bean>
 
</beans>
 



- Maintest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
 
import wakeup.controller.InsertController;
 
public class MainTest {
    public static void main(String[] a){
        //빈 설정을 한 xml 리소스 파일의 위치를 찾음.
        Resource resource = new ClassPathResource("applicationContext.xml");
        
        //찾은 리소스 파일을 가지고 빈을 생성할 수 있는 빈 팩토리를 만든다.
        BeanFactory beanFactory = new XmlBeanFactory(resource);
        
        //빈 팩토리에서 insertController를 가져온다. id나 클래스 이름을 적는다.
        //id는 여러개의 객체에서 호출 할 때,
        //class는 하나의 객체에서 호출 할 때 사용한다.
        InsertController Controller = (InsertController) beanFactory.getBean("insertController");
        Controller.execute();
    }
}
 



- 새로 객체 생성을 할 필요 없이 spring 에서 객체를 관리하고 호출 할 수 있다.

댓글()

Maven

- group id : 패키지 명.name space.


- artifact id : 프로젝트 명.  메이븐 프로젝트는 전 세계 공유를 목적으로 하기 때문에 패키지 명과 함께 전 세계에 유일한 이름이 들어가야 한다.


모든 자바 파일은 소스와 리소스로 구성된다. xml파일은 리소스 파일이다.


maven 설정은 pom.xml 에 전부 들어간다.


pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<project xmlns="http://maven.apache.org/POM/4.0.0" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                                           http://maven.apache.org/xsd/maven-4.0.0.xsd">
                                        
  <modelVersion>4.0.0</modelVersion>
  <groupId>wakeup</groupId>
  <artifactId>maven-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!-- 라이브러리를 직접 다운 받아 클래스패스에 넣지 않아도
         maven의 pom.xml 파일에 다음 코드를 입력하면 자동으로 서버에서 다운받는다.-->
  <dependencies>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>3.2.4.RELEASE</version>
      </dependency>
      
  </dependencies>
  
</project>




- 스코프

* compile 스코프

* provided 스코프

* runtime 스코프

* test 스코프



- 추이 의존성 : 의존성이 추가 될 때 라이브러리가 중복 될 때가 있다. 


- 메이븐 프로젝트는 보통의 export가 아닌 메이븐 빌드를 통해 일반 jar, war 파일로 배포해야 한다.

댓글()

Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것.



은행 현금인출기(ATM)에서 돈을 인출하는 과정을 생각해 봅시다.

현금인출을 하겠다고 기계에게 알려준뒤 현금카드를 넣어서 본인임을 인증받고,
인출할 금액을 선택하면 ATM 기는 돈을 내어줍니다.

이러한 거래에 있어서 지켜져야 할 중요한 것이 있습니다.
기계의 오동작 등으로 인하여 전산상으로는 돈을 인출한 것으로 입력이 되었는데 돈은 안나온다거나,
돈은 나왔는데 일련의 에러나 문제로 인하여서 돈을 인출한 것이 전산상으로 입력이 안되면
상당히 심각한 문제가 발생하겠죠.

때문에 전산상으로도 입력이 정상적으로 잘 되고, 돈도 인출이 정상적으로 잘 됨을 확인하고 나서야,
인출하는 하나의 과정이 정상적으로 처리되었음을 확인할 수 있습니다.
여기서 돈을 인출하는 일련의 과정이 하나의 묶음으로 처리되어야 함을 이해하실 수 있을것입니다.
그리고 혹시 처리도중 중간에 무슨 문제가 발생한다면 진행되던 인출과정 전체를 취소하고
다시 처음부터 시작하도록 해야 될 것입니다.

이것을 트랜잭션이라고 합니다.
transaction 의 사전적의미와도 상통합니다만, 거래함에 있어서 거래하는 양측이 다 원하는
결과물을 얻어야만 정상적으로 처리되는 것이고 그렇지 않다라면 거래자체가 무산되어 원점으로
되돌려져(roll back) 버리는 것이죠.
전산적으로나 데이터베이스에 있어서도 이처럼 하나의 묶음으로 처리가 이루어져야 하는 모든것에
트랜젝션이란 개념이 사용됩니다.

롤백(roll back) 이란 것은 트랜잭션으로 인한 하나의 묶음처리가 시작되기 이전의 상태로
되돌려지는 것을 말합니다.

커밋(commit) 이란 것은 정상적으로 처리되어서 확정(실행을 위해서 엔터키를 치는 것처럼) 한다는
것이구요. 커밋하면 트랜잭션의 처리과정이 모두 반영되며 하나의 트랜잭션 과정이 끝나게 됩니다.

트랜잭션, 롤백... 이러한 단어들은 모든 처리가 정상적으로만 이루어진다고 한다면 필요없는
것이겠죠. 그러나 항상 예외나 에러는 발생하는 것이며, 이러한 것이 발생할 때에 적절한 처리를
위해서 존재하는 것입니다.




출처 - http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=104&docId=70097173&qb=7Yq4656c7J6t7IWY&enc=utf8&section=kin&rank=1&search_sort=0&spq=1&pid=RD9F5U5Y7uCssc2RMfVssssssud-458312&sid=Ul9mV3JvLCEAAALoE-k

'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

Spring  (0) 2013.10.18
Maven  (0) 2013.10.18
Dependency Injection, DI - 의존성 주입.  (0) 2013.10.16
Collection - List 배열, Set 셋  (0) 2013.10.15
쓰레드  (0) 2013.10.14

댓글()

Dependency Injection, DI - 의존성 주입.

http://cafe.naver.com/jjdev/247

1. 의존성 주입


 - 의존성 주입(Dependency Injection, DI) : 어느 A객체를 필요로 하는 B객체는 A객체에 의존성을 가지고 있다. 필요로 하는 객체를 소스코드로 직접 객체 생성을 구현하지 않고, 다른 방법으로 객체를 주입 시켜주는 것. 마틴파울러는 세 가지의 의존성 주입패턴을 제시하였다.


* 생성자 주입 : 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.

* Setter를 통한 주입 : 의존성을 입력받는 세터(Setter) 메소드를 만들고 이를 통해 의존성을 주입한다.

* 인터페이스를 통한 주입 : 의존성을 주입하는 함수를 포함한 인터페이스를 작성하고 이 인터페이스를 구현하도록 함으로써 시에 이를 통하여 의존성을 주입한다.



1. 인터페이스 구현.


1
2
3
4
5
6
7
8
9
10
11
//인터페이스.
public interface Dao {
    public void getList();
}
//인터페이스 Dao를 구현한 OracleDao.
public class OracleDao implements Dao{
    @Override
    public void getList(){
        System.out.println("OracleDao.getList() - Oracle DB에 접근합니다.");
    }
}


 1
2
3
4
5
6
7
8
public class OracleService{
    public void getList(){
        System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
        Dao dao = new OracleDao();
          dao.getList();
        System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
    }
}


- dao는 OracleDao객체가 되었다. 만약 OracleDao의 클래스명칭이 변경 되었을때 하나만 변경하면 된다.


2. Setter.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ListController {
    public void doGet(){
        System.out.println("Controller - OracleService를 호출합니다.");
          OracleService service = new OracleService();
          service.serDao(new OracleDao()); //setter를 통해 서비스에 Dao를 주입 시켜주었다.
        service.getList();
        System.out.println("Controller - Service에서 데이터를 받아 View에 넘겨줍니다.");
    }
}
    
public class OracleService{
   Dao dao;
 
   public void setDao(Dao dao){
   this.dao = dao;
   }
 
    public void getList(){
        System.out.println("OracleService.getList() - OracleDao.GetList() 를 호출합니다.");
          dao.getList();
        System.out.println("OracleService.getList() - Dao에서 데이터를 받아 Controller에게 넘져줍니다.");
    }
}

 


- ListController에서 Service를 생성할때 Dao를 주입 시켜주었다.

Service에는 Dao를 생성하지 않아도 직접 생성한 것과 같은 결과가 나온다.

즉, Service와 Dao를 동시에 구현을 할때 Dao가 전부 구현할 때 가지 Service는 기다리지 않아도(먼저 구현이 끝나도), 혹은 Dao가 변경되더라도 따로 Service를 수정 할 필요가 없다는 것이다.


3.생성자를 이용.


-Setter와 동일. service를 생성할때 dao를 주입 시키면 된다.


'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

Maven  (0) 2013.10.18
Transaction(트랜젝션) - 어떠한 과정을 한 묶음으로 처리하는 것.  (0) 2013.10.17
Collection - List 배열, Set 셋  (0) 2013.10.15
쓰레드  (0) 2013.10.14
디자인 패턴  (0) 2013.10.14

댓글()

Collection - List 배열, Set 셋

List : 데이터가 순차적으로 들어온다. 안의 값은 중복이 가능하다.


Set : 순서가 없다. 안의 값은 중복이 불가능 하다.

트리 형태로 존재. 검색할때 빠르다.

제일 먼저 입력된 값은 루트. 중앙.

두번째


입력하는 순서는 상관없으나, 자체적으로 입력된 정보를 저장할때 트리형식으로 입력하기 때문에 전체를 검색하지않고도 값을 찾을 수 있다.


주로 데이터베이스, 인공지능 등에 쓰인다.





, Map 맵

Map : 키, 값 형태로 입력. 키안에는 오브젝트 형으로 올 수 있다.

프로포티지 - 키 값이 둘다 String형태로 존재.


키, 값에 또 다른 맵이 들어올 수 도 있다.


댓글()

쓰레드

1.쓰레드.


- 스택 : 호출된 메소드가 일을 하는 곳. 쓰레드라고도 한다.

스택은 메소드가 일을 하는 곳이다. 순차적으로 메소드를 실행 후, 메소드의 일이 끝나면 스택에서 지워버린다.


- 단일 쓰레드(스택)로는 여러개의 메소드를 동시에 처리할 수 없다. 이를 동시에 실행 가능하도록 하는것이 멀티 쓰레드이다.


- 동기화 :  처음 메소드가 접근하면 접근되는 메소드, 변수를 락을 건다. 락 중에 다음 메소드가 접근하면 처리를 하지 못하고 대기상태에 있게 된다.


쓰레드(스택)을 여러개 만들고, 동시에 메소드를 처리한다.

하지만 동시에 실행된 메소드들이 하나의 데이터를 처리 할때 문제가 생긴다. 이를 위한 기술이 동기화다.


 a지점에서 출금 요청한 것이 처리되기 전에 b지점에서 출금 요청하면, 출금이 2번 일어나게 된다. 심각한 문제다.

그래서 동기화라는 것이 있다.


a지점의 요청을 처리하기 전에 b가 요청을 했지만 a의 요청 처리가 끝날때 까지 대기 상태로 있다가, 처리가 끝나자 이미 남은 1000원은 출금 되어 b지점에서 출금이 안된다.


하지만 동기화로 인해 문제가 생기는 경우가 있다.



- 데드락 : 무한대기상태에 빠지는 것.




- 쓰레드 생성.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class test{
    public static void main(String[] a){
        MyThreadOne one = new MyThreadOne();
        one.start();//첫번째 쓰레드 생성.
        
        Thread two = new Thread(new MyThreadTwo());
        two.start();//두번째 쓰레드 생성.
        
        Thread three = new Thread(){
            @Override
            public void run() {
               //세번째 쓰레드가 해야 할 일.
            }
        }
        
        three.start();//세번째 쓰레드 생성.
    }
}
 
class MyThreadOne extends Thread{
    @Override
    public void run() {
       //새로 생성된 첫번째 쓰레드가 해야 할 일.
    }
}
 
class MyThreadTwo implements Runnable{
    @Override
    public void run() {
        //새로 생성된 두번째 쓰레드가 해야 할 일.
    }
}


1. 첫번째는 쓰레드 클래스를 상속받아 그대로 새로운 쓰레드를 만든다.


2. 두번째는 Runnable인터페이스를 구현하여 해야 할 일을 정한 후, 

쓰레드 객체를 생성할 때 새로운 쓰레드에 해야 할 일을 같이 넣는 방법.


3. 세번째는 객체를 생성할 때 익명클래스를 통해 해야할 일을 정한다.






2. 안드로이드의 멀티쓰레드.


- 메인 메소드가 있는 쓰레드를 메인 쓰레드라고 한다.


- 안드로이드에서 메인쓰레드에 생성된 View들은 쓰레드간 공유가 불가능 하다.

이를 위해 핸들러가 존재하는데 뷰는 핸들러에서 요청이 가능하기 때문에 타 쓰레드에서 핸들러에 접근하면 된다.


- 핸들러도 하나의 쓰레드이다. 


- 안드로이드 쓰레드 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class MainActivity extends Activity {
    TextView t1;
    TextView t2;
    int c1;
    int c2;
    Button b1;
    MyHandler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t1 = (TextView) findViewById(R.id.textView1);
        t2 = (TextView) findViewById(R.id.textView2);
        b1 = (Button) findViewById(R.id.button1);
        handler = new MyHandler();
        MyThread thread1 = new MyThread();
        thread1.setDaemon(true);
        thread1.start();
        
        b1.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                c1++;
                t1.setText(""+c1);
            }
        });
    } 
    public class MyThread extends Thread{
        @Override
        public void run() {
            boolean flag = true;
            while(flag){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                c2++;
            //    Message msg = new Message();
            //    msg.arg1 = 0;
            //    handler.handleMessage(msg);//메세지로 보낼 객체를 추가할때 사용.
                
                handler.sendEmptyMessage(0);//위와 같은 코드이나 메세지의 내용이 없고 신호만 보낼때 사용.
            }
        }
    }
    
    public class MyHandler extends Handler{
        @Override
        public void handleMessage(Message msg) {
            switch(msg.what){
            case 0 :
                t2.setText(""+c2);
                break;
            }
        }
    }
}
 


댓글()

디자인 패턴

http://blog.naver.com/sidoheba?Redirect=Log&logNo=110169917658



http://ko.wikipedia.org/wiki/%EB%B6%84%EB%A5%98:%EB%94%94%EC%9E%90%EC%9D%B8_%ED%8C%A8%ED%84%B4

'웹 & 안드로이드 > JAVA & JSP' 카테고리의 다른 글

Collection - List 배열, Set 셋  (0) 2013.10.15
쓰레드  (0) 2013.10.14
IntegerArrayConverter - String배열을 int배열로 변환  (0) 2013.10.06
내부클래스  (0) 2013.10.04
다형성 - 업캐스팅, 다운캐스팅  (0) 2013.10.02

댓글()