달력

12

« 2024/12 »

  • 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

2018_04_19_목

 

모든프로그램메인에서 시작

 

국비수업에서 만든다는건 ->new의미 //클래스로 준비되어있는놈의미

 

스레드없이 자동움직이는 프로그램을 만든다? -->! 불가능! 뀨뀨!

 

-----------

 

스레드구현방법은

스레드를 상속받거나 러너블이라는 인터페이스를 구현하는 방법이다..

 

start run이라는함수를 호출해주는함수

start를 굳이해주냐 ??

 

쓰레드는 하드웨어적으로 직접실행이라 바로실행하는걸 부담시러워함

그래서 안전하게 start라는메소드를 호출하게해서

시스템내에서 체크가이루어지고 아무이상없으면 시작 !

 

--

앞으로 안드로이드 공부하게되면 통신관련해서 어떤일을해야한다하면

무조건쓰레드임

 

스마트폰관렪서 통신해야할일많음

그래서어쩔수업싱 쓰레드관련해서 공부할수밖에엄슴 ㅋㅋ..

 

NANR- >안드로이드가 반응이없다..맵이멈춰버리는 다운되는. .

이럴때 메모리킬! 이상태벌어짐 주기버림 다른앱싷ㄹ행되게

 

그래서 안드로이드에서  쓰레드가 메인을 못건드리게함

 

주소를저장하는변수

 

뉴가하는일세가지

 

램에 클래스를 만들어놈 .-> 인스턴스 한국말로 객체

클래스가객체가됨 실체객체를만들어줌

 

만들어준 주소가 반드시이슴 그 주소를 반드시 변수에넣음

 

그레퍼런스변수가 인스턴스를 가르키게됨

 

그래서 레퍼런스변수 똔느 인스턴스변수 라고하는거임 그리고 일반변수 프리미티타입

 

 

멤버변수는뭐냐? 클래스를 이루는 멤버변수.. 필드라하는데

그 클래스를이루는함수 그걸함수ㄹ안하고 메서드라 부르지

 

씨언어의 외부변수 사용해봄?

예를들어 메인이있음

int x=5;

main(){

int x=15; //지역변수

 

           while(){

           int x=25; //이안에서는 x 25  지역깡패님 지역변수

           왜지역변수냐 고지역변수에서만놈 여기를빠져나오는순간사라짐

           자동변수라고도함. .ㅋㅋㅋㅋ       

}

}<--요애를 블럭이라고함

 

근데밖에 sum이라고다른함수가있다.

 

sum(){

x  -->>얘뭐찍힘? 5지 전국짱..전역변수라함 ㅎㅎ

 

}

 

근데자바에서는 쟤네전체를 크래스로묶음

class test{

int x=5;  전역변수 ->필드라캄

main(){ c에서함수라한거를 자바에서는메소드라함

int x=15; //지역변수

 

           while(){

           int x=25; //이안에서는 x 25  지역깡패님 지역변수

           왜지역변수냐 고지역변수에서만놈 여기를빠져나오는순간사라짐

           자동변수라고도함. .ㅋㅋㅋㅋ       

}

}<--요애를 블럭이라고함

 

근데밖에 sum이라고다른함수가있다.

 

sum(){

x  -->>얘뭐찍힘? 5지 전국짱..전역변수라함 ㅎㅎ

 

}

 

}

 

c언어에서는 test.c 자바에서는 test.java

 

시언어에서 파일하나를 자바에서는 클래스라고함..

 

씨언어잘하는데 자바못하면 개바보임

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

단지왜어렵냐 용어가 너무많음 자바는 ㅋㅋㅋㅋ

 

 

우리는클래스맨들면

 

씨언어는전부다스태틱이라보믄댐

자바는 스태틱제외하고는 만들어져서

new로 맨들어씀 ..

스캐너에들어있는 next int 같은거 new로만들어줘야지

 

레퍼런스변수,생성자 (클래스이름과똑같은이르므이함수),생성자호출

 

걔가실행되니까문제가뭐냠 상속을받아버리니까 자식생성햇더니

부모생성자 자동호출됨

 

이런거공부할라하니까머리터짐

---------

구조를익히고나면 잘넣으면됨자바찡

---------------

안드로이드는 자바클래스만이용하는거임 ㅇ_

다클래스로준비되어있음

손가락으로 톽! 플리핑이라함

똑같은속도움직이는거 스크롤링

 

우린자바에서 무브라카고..드래그라하고..형태는똑같음 이름만달름

콤보박스를 안드로이드에서 스피너라캄

 

그래서완벽하게구조알고들어가면

할때편함 큐큐큐

네비게이션기능/롤링,피칭.. 등등등 plaplapla

 

-----------------------

그래서 sdk ndk pdk개발자 /그래서 단계별로 외우는거

어디취업해서1년동안 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

샤람이됨..죤냐게공부하기.. 일년되면다암..

아무리날고기어도취업시켜노면 일년되면똑같아짐 다사람취급을 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

------------------------------------

//학원다니는동안 기본에충실하자

--

기본적으로문법이나개념에 충실하면 짜집기잘할수이슴

 

내가윈도우로 창하나만든다할때..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

c->c++->win API->MFC ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ씨언어찡..

-------------

첨에 mfc안나온거 winapi로공부해서즘 윈도우운영구조 알아야함

------

시슈템프로그래먼 ->c언어에대해서알아야함 .

 

지금나가는것들은거의클래스사용법임

 

--------------

Thread Runnnable이 있었음

스레드는 클래스로 러너블은 인터페이스임

따라서 제는 익스텐트 쟤는 임프리먼트로 받아야함

 

둘다 런이라는메소드 오버라이딩해놓음됨

마이쓰레드라는놈으로 상속받는다면

 

MyThread t = new MyThread()

           t.start(); //하면 저 런안에가 막실행됨

run {

 

 

}

 

마이투가 샹쇽받는다면

My2Thread tm = new My2Thread();

Thread tmm=new Thread(tm);

 

생성자로 한번감싸야함. . 쓰레드안에다가 내가맨든거 감싸야함

 

tmm.start();

 

근데 만들어서 집어넣으나 걍집어서서 쓰나 도긴개긴

 

쓰레드를사용하다보니까

 

------

오늘뭐나가냐 생성자 스레드  소비자스레드 가이슴

 

생성자스레드 맨들어서 안에다 차곡차곡넣음

근데 안에가꽉차면 집어넣을수엄슘

그럼 대기보다 쉬는게나음

 

소비자스레드는 계속꺼내서씀 근데 다꺼내씀

그럼 더이상꺼낼게없음 그럼쉬는게나음

이소비자쓰레드는 채워진건신경안서도됨 대신비엇는지가 걱정됨

비어잇음 쉬믄댐

 

비어서쉬고있는데 얘가만들어서 쉬고있었음

그럼어케함? 깨워줘야지 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

야 갖다채움 가져가야지

깨워줌

 저안에있는놈 공통객체..

 

콜렉션클래스사용해서 집어넣고 어레이리스트같은거사용해서

20개넘어가면 야쉬삼~~ 니가쉬삼~하고프로그래밍하면

스레드적절하게사용해서 시물레이션프로그래밍도 가능함 뿅!

 

스레드의 동기화

 

우리가 atm의 동기화를 생각해보자

동시에 접근시에 동시에빠져나가? 이럼 큰일남

동시에접근하는걸 못하도록하기위해서 동기화작업을 진행해야함 ㅎㅅㅎ

예를들어 두군데에서동시에 접근을햇음

 

내부적으로 락걸어주는게

synchronise라고 함수앞에 선언해버림

싱크로나이즈라고 선언하면 선언되어있는 이함수가 실행되고있는 동안에는

다른스레드가 접속하면 다른함수 대기하고있게됨

다실행하고끝나면 그때 락풀기 그래야 그때인출할수이슴

그럼그때 돈이없음 뀨뀨

 

a라는 쓰레드가 가라는함수호출해씀 가라는함수에서 나라는함수호출

 

여기서비라는쓰레드가 나를호출 나에서 가를호출

 

이렇게생겨먹은 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그런데 얘네들이다 싱크로나이즈가 걸려있음 비가실행행해서가를호출해봐 되게씀? 노노 

에이에서 가에서 나호출할라햇는데 호출되겟음? 노노 à이런경우를 교착상태의 기아상태 라고함

파워를뽑아야함ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 요런걸조심하기

 

공통으로 접근안하게할려면그 임의의 코드블록을 임계영역으로 지정해서ㅕ 싱크로나이즈 하는방법도이슴

공통으로 실행안됫으면 하는부분을 묶어서 뿅..

대부분 일반적으로 함수앞에다써주지만 대신 예를들어

쓰레드의 실행되야할내요이 너무많아 근데그중일부분만 이게포함된다면

다른부분실행되야하기 때문에 적절하게 싱크로나이즈블록사용해서 하면될거같다

 

Th.join()은 뭐냐

자바는 메인이끝나면 프로그램이 끝나자늠 그러면 화면에서 프레임은 사라졋음 근데 음악소리는 계속 나겠지 

화면은사라졌는데 음악은안멈춤

> 메인은화면을없앴는데 메인에서만든 쓰레드가 소리를만드는줌임 음악

스레드가끝날때까지 윈도우가 사라지지않는거 이게 조인임

691쪽부터 실습문제 요거.. 1번부터 쭉 5번까지 해보기

예제 2 화면하나에 레이블붙여놓고 카운팅시작하는거

예제를 스스로하는것도 중요하지만 예제를 통해서 해보는것도 중요함 1번부터 5번까지 한번내용을 쭉 읽어보기 ..

 

연습문제 1~5번으로공부하기 처음부터짜는거 너무고민하지말기

시간이 좀 많이 걸림

스레드를 이용하지않는 프로그램이없기 때문에 한번 해보기

--

13-4예제

랜덤함수 수시로 좌표값바구기

범위를한정해서 바꾸는거  왜냐면 너무넓ㄱ세왓다갓다하면 진동같지않으니까  

------------------2번예제랑 3번예제랑 5번예제 나갔는데

지금 일단 정리해둔거 올린거라서 오타도많고 좀 더러운데 나중에 수정하기

 

'[국비]자바기반 응용SW과정 > 일지 ' 카테고리의 다른 글

2018-05-02 C언어 수업  (0) 2018.05.02
:
Posted by Gongdile

쓰레드의 동기화(synchronization)이란 뭘까? 

--> 한스레드가 진행중인 작업을 다른 쓰레드가 간석하지 못하도록 막는것을 말한다.


왜쓸까? 


싱글스레드 프로세스 경우는 프로세스 내에서 단하나의 스레드만 작업하기 때문에 

프로세스의 자원을 가지고 작업하는데 별 문제가 없다. 


하지만 

멀티스레드의경우에는 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 

서로의 작업에 영향을 주게된다. 


예를들면 

ATM에 통장에 50만원이있었는데 각 다른 두곳에서 출금한다고 가정하자 ㅋㅋ 

동시에 두곳에서 50만원이 출금되면 정말 행복하겟지만.. 

은행입장에서는 큰일나는거 아닌가 ..ㅋㅋㅋ 


A atm기에서 작업을 실행할대 락을 걸어서 다른 곳은 접근못하게하고 출금이 다끝난뒤에 

접근권을 획득해서 B atm기가 출금해야 이중으로 출금되는것을 막을수있다. 

--------------------------------------------------------------------------------------------


그래서 스레드에서는 저런 일이 방지하는것을 막기위해서


한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는것이 필요한데


그래서 도입된 개념이 '임계 영역(critical section)'과 '잠금(락,lock)'이다.


->공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정해놓고, 공유 데이터(객체)가 

가지고 있는 lock을 획득한 단 하나의 쓰레드만 이 영역 내의 코드를 수행할 수 있게 한다.

그리고 해당 쓰레드가  임계 영역 내의; 모든 코드를 수행하고 벗어나서 lock을 반납해야만 

다른 쓰레드가 반납된 lock을 획득하여 임계 영역의 코드를 수행할 수 있게 된다. 


-------------->위에서 말한것처럼 이런 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간석하지 못하도록 막는것을!! 

'쓰레드의 동기화(Synchronization)' 라고 한다.   


동기화 방법에는 여러가지가있다. synchronized를 이용한 방식, wait ( ) , notify( ) , notifyAll( ) 를 이용한 방식.. 

여러가지가있는데 오늘은  synchronized를 이용한 방식에 대해 설명할 예정이다.. 

(여러개를 포스팅하고싶지만.. 힘들다 ㅠㅠ 조금이라도 꾸준히 올리는게 목표다)


1.synchronized를 이용한 동기화 


가장 간단한 동기화 방법인 synchronized 키워드를 이용한 동기화에 대해서 알아보면 

이 키워드는 임계 영역을 설정하는데 사용된다. -->두가지 방식이있다. (사진이 생각보다 짱큰게 올라갔다)


<첫 번째 방법>

메서드 앞에 synchronized를 붙이는방법 

synchronized를 붙이면 메서드 전체가 임계영역으로설정된다. 

쓰레드는 synchronized메서드가 호출된 시점부터 해당 메서드가 포함된 객체의 lock을 얻어 작업을 수행한다.

메서드가 종료되면 lock을 반환한다.


<두 번째 방법>

메서드 내의 코드 일부를 블럭 { }으로 감사고 블럭 앞에 'synchronized(참조변수)'를 붙이는 방법

이때 참조변수는 --> 락을 걸고자하는 객체를 참조하는것이어야한다. 


이 {  }블럭을 synchronized블럭이라고 한다. 

->이 블럭의 영역 안으로 들어가면서부터 쓰레드는 지정된 객체의 lock을 얻게되고. 

   블럭을 벗어나면 lock을 반납한다.


-----------

두 방법 모두 lock을 하나씩 가지고 있다.

해당 객체의 lock을 가지고 있는 쓰레드만 임계 영역의 코드를 수행할 수 있다.

그리고 다른 쓰레드들은 lock을 얻을 때가지 기다리게 된다.

------

임계 영역은 멀티쓰레드 프로그램의 성능을 좌우하기 때문에 가능하면 메서드 전체에 락을 거는것보다 

synchronized블럭으로 임계 영역을 최소화해서 효율적인 프로그램이 되도록 노력하는게 좋다.



아래는 synchronized 사용예제에 대해서 설명할거다 


쓰레드 동기화를 사용한 경우와 사용하지 않은 경우의 차이를 간단한 예제를 통해서 설명하려고한다.


공쓰레드와 다일쓰레드가 사용하는 부분을 보여줄 예정이다. 



위에 소스는 

gong과 dile이라는 이름의 스레드를 생성하여 집계판에 동시에 접근하게 한것이다. 

그리고 두 스레드를 실행시키는 부분이다. 


위에 소스와 이어서 타이핑 친부분이다 아래는 

공유 데이터인 집계판을 시물레이션하는 클래스를 만든거다.

이제 아래 소스를 보자 


최종적으로 소스에 흐름에 대해서 설명하자면 


SyncObject멤버 add( )를 synchronized 메소드로 지정했다. 

왜??!

-->add ( )는 두명의 gong,dile 즉 WorkerThread 스레드가 동시에 호출할수있는 임계영역이기 때문이다.

    또한 add( ) 메소드는 sum 공유변수에 접근하고 있기 때문이다. 


WorkerThread는 루프를 돌면서 27번줄에 SyncObject의 add( )메소드를 호출하여 

SyncObject의 sum 멤버 값에 10을 더하고 리턴한다. 

main은 이름이 "gong","dile"인 두개의 WorkerThread 스레드를 생성한다. 


최종 sum이 얼마일꺼같나? ㅋㅋ -->200이다!! 왜??1 

gong와 dile이가 각각 10번씩 add( )를 호출했기때문에 

동기화가 잘이루어진다면 최종 누적점수 sum이 200이 된다. 


그림으로 표현하면 이렇다.. 


어떤 형식으로 찍힐까?

이런식으로 gong과 dile이가 순차적으로 sum되가면서 찍힌다. 


근데 만약에 synchronized키워드를 제거하게 되면 어떻게 출력될까?


실행할때마다 다르긴한데  충돌이된 예시를 보여주자면 


위에 네모박스처럼 add( ) 메소드에 충돌이 생긴경우다

-->이때문에 10이 증가되지못했다.


아래 밑줄처럼 두 스레드의 add(  ) 메소드에 대한 동시 실행으로 인해 190밖에 도달하지 못했다.


근데 저 코드를 맨날 실행한다고 같은 결과가 나오는건 아니다 

여러번 충돌할수도있는거고 충돌안할수도있는거고 하지만 동기화를 해주지 않으면

충돌할 위험이 있기 때문에 해줘야한다. 


두개의 스레드가 동시에 호출할 경우가 발생할 위험이있기때문에 동기화 처리를 해주는거다. 


2.wait( )과 notify( )를 이용한 방식 은 나중에 정리하겠다!! 


:
Posted by Gongdile
2018. 4. 19. 00:55

1.계획 스터디 /5.JSP & Servlet2018. 4. 19. 00:55

같이 국비를 듣는분에게 jsp와 Servlet 을 알려드리기로했다.


그래서 내가 더욱 더 틀린내용 없이 전달해드리기 위해 공부해야한다 ㅎㅎㅎㅎㅎ !! 


다음주부터 조금씩 조금씩 알려드릴 계획이기 때문에 


여기다가 내용을 정리하겠다 하하하하 



---------

일단 책한권은 다봤는데 혹시몰라서 여러권빌렸다.. 정리해서 알려드려야지 도움이 되고싶다 ㅎㅎ 

지금은 다른책한권 읽는중인데 1권빌린부분에 대해서 정리를 좀 해야겠다. 



일단은 


1.웹프로그래밍이 뭔지 

2. 웹서비스가 어떤건지 -> HTTP가뭐냐..? 어떻게 동작하냐

3.웹서비스는 어떤방식으로 동작하냐

4.우리가 수업시간에 배운 서블릿과 JSP는 어떤방식으로 동작하는지 -->특징이뭔지 

------------------------

알려드리고이제 서블릿이랑 JSP에 대해서 정리해서 알려드릴껀데 


세션과 쿠키, 포워드와 리다이렉트의차이, 포스트방식과 겟방식.. 이런거 차이 알려드릴꺼다 이건 꼭! 


1.서블릿 

-GET방식에서는 처리를어떻게하고 POST방식에서는 처리를 어떻게하냐?

- 한글 인코딩하는 방법은?


2.JSP 기초 

-JSP는 서블릿이랑 어떤차이가있는지 어떻게 생겨먹은아이인지 어떻게 사용하는지 

-구성요소가뭔지 


3.JSP에서 내장객체  

내장객체의 종류는 어떤게 있고 어떻게 사용하는지  


4.JSP에러처리 -->어떤방식으로 에러처리를 하는지 


5.JSP 세션관리 

-HTTP 프로토콜 연결방식 

-쿠키,세션등.. 

--------------

학원에서 진도나가신 예제등을 통해서 어떤방식으로 나가고 들어가고 주고받는지에 대해서 설명해드리고

기본적인 문법에 대해서 알려드릴 예정이다 그래야 얘가 어떤방식으로 주고받고 사용하는지 알게되니까 


-----------

서블릿 JSP활용

1.JSP의 액션태그  

액션태그 사용해서 넘어가는 방법들.. 그리고 자바빈사용해서 넘어가는 방법들에 대해서 알려드릴 예정이다 


근데 학원에서는 액션태그랑 자바빈하면서 JSTL 이랑 EL태그 편의성에대해 설명하고 예제로 코드사용을 훅훅나갔기때문에 이부분에 대해서 학원에있는 다른분한테 소스파일 받아서 설명해드릴 예정이다 



2.JDBC프로그래밍 

My sql을 사용해서 진도를 나갔는데 데이터베이스 연결 구문관련해서 정보가 필요하니까 ..

디비관련 메소드 사용방법에 대해서 정리해서 알려드릴 예정.. PrepareStatement 사용하거나 커넥션풀 사용하는거 



3.EL/커스텀태크/JSTL

더 유용하게 사용하기위한 방법들인데 구문들 섞어서 유용하게 사용하기 때문에 이거 관련해서 사용하는 방법.. 




마지막으로 Model2방식으로 게시판 설계하는거에 대해 코드 출력해서 설명해 드릴예정..

일단은 이 책에있는 예제들 이용해서 사용하는걸로 생각해보긴 할건데 


지금 학원에서 나갔던 소스코드 출력해서 돌아가는부분 출력해서 구문설명해서 코딩하는 방법도 생각하고있다

아무래도 익숙한게 좋으니까 학원에서 나가는 코드 말고도 


책에있는 코드로 내가한번 연습해보고 알려드리는것도 좋은거같다 


지금 내가 이걸 공부하고있는 목적은 지금 당장 어떻게든 잘짜는게 아니라 

이걸 왜 사용하고 어디에 사용하고 왜쓰는지에 대해 설명해드리는게 목적이니까 



-------------

현재 학원에서는 기본적인 게시판 만드는건 나가는 상태에서 mvc모델에서 ajax사용하는 부분에 대해서 나가고있다.

학사관리 시스템이나 독서관련 시스템에서 웹으로 이동하지않고 바로 ajax로 삭제수정해서 화면보여줄수있는 방식 

나가고있는데 데이터 형식이 json으로 파싱해서 보여주는 부분이다 


제이쿼리안에있는 ajax 사용해서 json jar파일안에넣고 제이선으로 파싱해서 ajax로 보여주는 부분인데

이번주 국비과정말고 그전에있던 소스코드랑 이번주에 나간 부분이랑 어떻게 다른지 소스코드 출력해서 구문명에대해서 설명해야겠다고 생각한다. 1~100까지 다알고있는것도 좋겠지만 일단 지금나가는부분에 대해서도 어느정도 알아야하니까 근데 그전에 기본적인 부분에 대한 설명이 먼저! 


DAO,VO,Servlet ..등등등 정의에대해 알고 왜쓰는지 알아야하고 차이를알아야하고 간단하게하는법에 대해서 알아야하고 ㅎㅎㅎㅎㅎㅎ 

정리할게 많지만 누구에게 알고있는지식을 더 공부해서 알려줄수있다는 뿌듯함이 있다 


열공하자 


:
Posted by Gongdile