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

댓글()

javascript에서 StringBuffer 사용하기.

웹 & 안드로이드/HTML5|2013. 10. 13. 18:33
<script>
var StringBuffer = function() {
    this.buffer = new Array();
};
StringBuffer.prototype.append = function(str) {
    this.buffer[this.buffer.length] = str;
};
StringBuffer.prototype.toString = function() {
    return this.buffer.join("");
};
</script>

<script>
var tag = new StringBuffer();
tag.append('ABC');
tag.append('DFG');
var text = tag.toString();
</script>

댓글()

jQuery - <select>태그의 선택 된 값 가져오기.

웹 & 안드로이드/HTML5|2013. 10. 12. 16:50

$('select#ban').val()

 

 

// 이건 input type="select" 만 되나보다..

$('select#ban:selected').val()

 

 

 

댓글()

jQuery - radio check된 값 받기.

웹 & 안드로이드/HTML5|2013. 10. 12. 15:18
$("input:radio[name=radio_name]:checked").val()

댓글()

View - EditText와 inputType속성의 종류(EditText 종류)

웹 & 안드로이드/Android|2013. 10. 8. 14:52

EditText

-텍스트를 입력, 수정 할 수 있는 텍스트뷰.


1
2
3
4
5
6
<EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="none"
            android:text="none" />



-android:inputType 속성 값 종류


 속성 값

EditText에 입력 가능한 값 

설명 

 none

 모든 문자, 모든 기호 ,숫자

 다른 톡징이 없는 기본 EditText. 입력 폼안에 줄 바꿈이 가능하다.

 text

 none과 같으나 줄바꿈이 불가능.

 textCapCharacters

 모든 입력된 영문이 대문자로 입력이 된다.

 textCapWords

 단어의 첫번째 영문이 대문자로 입력된다.

 textCapSentences

 문장의 첫번째 영문이 대문자로 입력.

 textAutoCorrect

 입력된 단어를 올바른 단어로 수정할 수 있다.

 textAutoComplete

 단어를 입력중에 완성된 단어를 표시 할 수 있다. 

 textMultiLine

 입력 폼에 줄 바꿈이 가능하나 따로 설정하지 않으면 단일 줄의 텍스트로 제한됨.

 textImeMultiLine

 여러줄의 텍스트 입력가능. 키보드에 줄바꿈 키가 표시됨.

 textNoSuggestions

 입력할때 사전에 등록되어있는 어떤 단어도 표시하지 않는다.

 textUri

 URI를 입력.

 textEmailAddress

 이메일 주소를 입력.

 textEmailSubject

 이메일의 제목을 입력.

 textShortMessage

 짧은 메시지를 입력.

 textLongMessage

 긴 메시지를 입력.

 textPersonName

 사람 이름을 입력.

 textPostalAddress

 주소의 우편번호를 입력.

 textPassword

 비밀번호를 입력. 입력된 문자는 (*)로 표시.

 textVisiblePassword

 비밀번호를 입력. 입력된 문자가 보인다.

 textWebEditText

 텍스트를 입력. 웹 양식으로 제공된다.

 textFilter

 다른 텍스트를 필터링 하기 위한 문자를 입력.

 textPhonetic

 발음되는 발음문자를 입력.

 textWebEmailAddress

 이메일 주소를 입력. 웹 양식으로 제공.

 textWebPassword

 비밀번호를 입력. 웹 양식으로 제공.

 number

 숫자

 숫자를 입력 받는다.

 numberSigned

 숫자

 부호가 있는 숫자를 입력.

 numberDecimal

 .(점) 기호, 숫자

 소숫점이 있는 소수를 입력 받는다.

 numberPassword

 숫자

 숫자로 된 패스워드를 입력.

 phone

 - 기호, 숫자

 전화번호를 입력 받는다.

 datetime

 -, : 기호, 숫자

 날짜와 시간을 입력. 날짜는 -, 시간은 :로 구분.

 date

 - 기호, 숫자

 날짜를 입력.

 time

 : 기호, 숫자 

 시간을 입력.


댓글()

View - ProgressBar, SeekBar, RatingBar

웹 & 안드로이드/Android|2013. 10. 8. 10:15


1.ProgressBar



-예제 화면




프로그래스 바

- 프로그램이 어떠한 일을 진행할 때의 진행도, 혹은 로딩중 일 때를 나타내는 것.


 

-원모양으로 빙글빙글 돌며 로딩중이라는 것을 나타내는 프로그래스 바.

       다음은 다양한 크기의 프로그래스 바를 나타낸다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 <ProgressBar
        android:id="@+id/progressBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />
    
    <ProgressBar
        android:id="@+id/progressBar2"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal" />
 
    <ProgressBar
        android:id="@+id/progressBar3"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:visibility="invisible" />



-예제

-버튼1을 클릭하면 원모양 프로그래스 바가 보이고 버튼2를 클릭하면 다시 사라짐.

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
public class MainActivity extends Activity {
    ProgressBar progressBar1;
    
    Button button1;
    Button button2;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar1 = (ProgressBar) findViewById(R.id.progressBar3);
 
        
        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
 
        button1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                progressBar1.setVisibility(View.VISIBLE);
            }
        });
        
        button2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                progressBar1.setVisibility(View.INVISIBLE);
            }
        });
    }
}






- 진행도를 나타내는 프로그래스 바.

  무언가를 다운받거나 하는 진행등을 나타낼때 사용.


1
2
3
4
5
6
7
8
<ProgressBar
        android:id="@+id/progressBar4"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:max="100"
        android:progress="0" />



-둘다 가질 수 있는 속성은 같지만 스타일에 따라서 진행도를 보여주는 것을 정할 수 있다.


-예제

-버튼3을 누르면 진행도가 증가하고, 버튼4를 누르면 진행도가 감소.

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
public class MainActivity extends Activity {
    ProgressBar progressBar2;
    
    Button button3;
    Button button4;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar2 = (ProgressBar) findViewById(R.id.progressBar4);
        
        button3 = (Button) findViewById(R.id.button3);
        button4 = (Button) findViewById(R.id.button4);
        
        button3.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                progressBar2.incrementProgressBy(5);
            }
        });
        
        button4.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                progressBar2.incrementProgressBy(-5);
            }
        });
    }
}




2.SeekBar



 - 예제 화면



 SeekBar

- 볼륨이나 색상지정 등 사용자가 드래그 할 수 있는 바.


-seekBar

1
2
3
4
5
6
<SeekBar
        android:id="@+id/redBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:progress="0"
        android:max="255" />



-예제

-seekbar에 색상을 지정하고 텍스트뷰의 색상이 변하도록 함.

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
62
63
public class MainActivity extends Activity {
    SeekBar redBar;
    SeekBar greenBar;
    SeekBar blueBar;
    TextView redView;
    TextView greenView;
    TextView blueView;
    int red;
    int green;
    int blue;
    TextView resultView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        redBar = (SeekBar) findViewById(R.id.redBar);
        greenBar = (SeekBar) findViewById(R.id.greenBar);
        blueBar = (SeekBar) findViewById(R.id.blueBar);
        
        redView = (TextView) findViewById(R.id.redView);
        greenView = (TextView) findViewById(R.id.greenView);
        blueView = (TextView) findViewById(R.id.blueView);
        
        resultView = (TextView) findViewById(R.id.resultView);
        
        redBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                red = redBar.getProgress();
                redView.setText("red - "+red);
                resultView.setBackgroundColor(Color.rgb(red, green, blue));
            }
        });
        greenBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                green = greenBar.getProgress();
                greenView.setText("green - "+green);
                resultView.setBackgroundColor(Color.rgb(red, green, blue));
            }
        });
        blueBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                blue = blueBar.getProgress();
                blueView.setText("blue - "+blue);
                resultView.setBackgroundColor(Color.rgb(red, green, blue));
            }
        });
    }



3. RatingBar


-예제 화면 



-점수등을 별로 표시하여 나타내는 뷰.


Colored By Color Scripter

1
2
3
4
5
6
 <RatingBar
        android:id="@+id/ratingBar1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="10"
        style="?android:attr/ratingBarStyleSmall" />



-예제 코드.


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
public class MainActivity extends Activity {
    RatingBar ratingBar;
    EditText total;
    EditText answer;
    Button button;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ratingBar = (RatingBar) findViewById(R.id.ratingBar1);
        total = (EditText) findViewById(R.id.editText1);
        answer = (EditText) findViewById(R.id.editText2);
        button = (Button) findViewById(R.id.button1);
        
        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                int t = Integer.parseInt(total.getText().toString());
                int an = Integer.parseInt(answer.getText().toString());
                float score = (float)an/t*ratingBar.getNumStars();
                ratingBar.setRating(score);
            }
        });
    }
 


댓글()

안드로이드 - 진동 제어하기

웹 & 안드로이드/Android|2013. 10. 7. 12:41

-우선적으로 진동을 제어 할 수 있는 앱을 만들기 위해서는 퍼미션(권한) 부여가 필요하다.




-직접 코드를 입력하는 방법.

1
2
3
4
5
<manifest>
    
    <uses-permission android:name="android.permission.VIBRATE"/>
 
</manifest>

     -manifest 설정파일에 해당 코드를 입력하면 권한 설정이 된다.




- 진동하기 위해서는 진동을 제어하는 객체를 생성해야 한다.


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
public class MainActivity extends Activity {
    ImageButton button3;
    ImageButton button4;
    
    Vibrator vib;    
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        
       button3 = (ImageButton) findViewById(R.id.imageButton3);
        button4 = (ImageButton) findViewById(R.id.imageButton4);
 
        vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
 
        button3.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {
                vib.vibrate(300);
            }
        });
        button4.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {
                vib.vibrate(new long[]{100, 300, 100, 500}, -1);
            }
        });
    }
}


-한번 진동 하게 할 수 있지만 Long[]을 통해 패턴을 줄 수도 있다. 또한 무한으로 패턴을 반복하는것도 가능하다.


vib.vibrate(진동하는 시간(밀리 세컨드));

vib.vibrate(진동 패턴, 반복 여부(0이면 한번, -1이면 무한 반복));

댓글()

안드로이드 - 사운드 재생하기.

웹 & 안드로이드/Android|2013. 10. 7. 12:32



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
public class MainActivity extends Activity {
     ImageButton button1;
     ImageButton button2;
     SoundPool soundPool;
     int soundDdok;
     AudioManager aMa;
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);        
        button1 = (ImageButton) findViewById(R.id.imageButton1);
        button2 = (ImageButton) findViewById(R.id.imageButton2);
        
        soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
        soundDdok = soundPool.load(getApplicationContext(), R.raw.ding, 1);
        aMa = (AudioManager) getSystemService(AUDIO_SERVICE);
        
        button1.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {
                soundPool.play(soundDdok, 1, 1, 0, -1, 1);
            }
        });
        button2.setOnClickListener(new OnClickListener() {            
            @Override
            public void onClick(View v) {
                soundPool.stop(soundDdok);
            }
        });        
    }
 



-사운드를 재생하기 위해서는 많은 클래스 사용이 필요하다.


SoundPool : 사운드를 담는 pool과 같은 것.

soundDdok : pool의 개념보다는 작은, 트랙같은 것.

이 둘은 외부 리소스 사운드를 이용할 때 사용.


AudioManager : 각자 안드로이드 시스템의 오디오매니져이다. 

사운드 효과, 볼륨등을 지정한다. 

안드로이드 내부의 사운드를 이용할 때 사용. 


댓글()