Tense 시제 
현재형과 과거형이 존재.
현재시제 = 습관반복적
The football game starts at 2:00
This food tastes good.
Will 와 Would 의 차이점은? => 기준시점의 차이
She Thinks he will pass the exam.현재 미래일을 생각.형태는 현재
She thought he would pass the exam.과거에 미래일을 생각.형태는 과거
1.조동사와 동사의 결함
Perfective  have
 주된 용법: 기준 시점 '이전' 에 이루어진 시상을 표현한다.
 형식 : Have + -ed Participle Form(소위 과거분사)
시상이란 절대적인 시점을 말하는 것이 아니라, 시간과 관련된 사건 혹은 동작의 발생양상을 말한다. (진행의 양상이나, 완료의 양상이냐)
영어세어는 완료와 진행의 두가지 시상이 있다. Aspect 는 Tense 를 항상 포함하는 반면, Tense 는 Aspect 없이도 발생하 수 있다.
Aspect가 없는 Tense 를 단순 시제라고 부른다.
2.Types of Verbs (동사의 유형, 형태)
1)be -ing
2)be -ing 가 불가능한 동사들도 있음.(상태동사)
3)뜻에따라 be -ing 형이 가능 or 불가능한 극소수의 동사들도 존재함.
be -ing 의 특수용법
1)be being + 형용사 : uncharacteristic, untypical
I can't understand why he's being so selfish. He isn't usally like that.
->그는 평소와다르게 지금 이기적임.
2)be always -ing: Annoyance. Anger. Complaint   왕짜증, 불평을 표현하는 것
Suze is always leaving her dirty socks on the floor for me to pick up!. -> 개짱나는 X!

I've lost my key again. I'm always losing things


  
 
3. Progressive vs. Simple
현재진행은 Now 이전에 시작하였다. 
과거진행은 과거 이전에 시작하였다.(과거 보다 먼저 시작)
미래진행은 미래 이전에 시작하였다.
과거진행-과거의 관계 심층분석
단순과거는 과거진행 중간에 발생한다.
과거진행은 과거와 충돌한다. 
-> 과거와 과거진행은 만난다. 과거진행이 시작되고 과거와 만나게됨.
과거진행->과거 시점과 만남
I slipped on the ice while I was crossing the street in front of the dormitory. 
//과거진행이 먼저 시작되고, 그다음 과거와 만나게 된다. -> 길을 건너는중에 자빠짐
만약 was slipping , crossed 가 오면 정말 웃긴게 되어버린다. 자빠지면서 건너는거임 ㅡㅡㅋㅋ
They were arguing about something serious when I walked into the room.
그녀가 뭐라 말했는지 들었니?
->No, I was not listening. I was thinking about something else.
동시에 일어난 일이라서 같은 시점으로 얘기함. (동작동사로 -ing 사용)
함께 쓰인 단순과거는 동시동작이 아니라 순차적 동작을 말한다.
ex) When he arrived, we were having dinner. -> 우리는 이미 저녁을 시작했었음.
When he arrived, we had dinner. 그가 도착하고 나서, 밥을 먹음(순차적)
I was walking downtown when I saw ben. So I saw ben. So I stopped and we talked for a while.
워킹을 과거이전에 하다가 벤을 과거에 만남. 그리고 멈춘다음에 얘기를 순차적으로 나눔
4.Future Time
영어에서는 미래시제가 없으므로, 미래시간을 표현할 때는 modal 인 will, semi-modal 인 be going to 와의 결합 등 다양한 동사 결합 형태를 사용한다.
Chanie will walk his dog tomorrow.
Chanie is going to walk his dog tomorrow.
1) will 과 be going to 의 큰 차이가 없는 경우 : Prediction (예측, ~할 것이다, ~ 할 것 같다.)
Do u think Laura will=(is going to) get the job?
I think the wheather will=(is going to) be nice later.
단 구별 될 떄도 있다. 
1)객관적 정황이 있을때는 be going to 만을 써야 한다.
Look at those black clouds! It is going to rain.
가스통이 비었어. 리필장소는 멀어!. She is going to run out of gas.
2)다음의 표현 뒤에는 will을 쓴다.
Probably I'll be a little late this morning.
I'm sure you'll like her.
I bet Carol will get the job.
I think we'll ~~. Do you think we'll pass the ~?
I suppose/ I guess / I doubt / I wonder
2) will / Be going to / Be -ing 의 구별
willbe going tobe -ing
의지사전계획 = 의도준비(fix성, 확정된일정)
말하는 시점에서 결정이미 할려고 결정, 하기로 이미결정이미 할려고 결정, 하기로 이미결정
1)will
I won’t tell anyone what happened. I promise.
The phone's ringing. I'll get it. (전화벨이 올릴때)
2)be going to
-창문이 더러워. - 알고있어. I'm going to wash them later.
너 점심에 계획 있니?  Yes, I'm going to watch TV.
cf) No, I don't. Let me think, I'll watch TV(지금 결정한것임)
3)be -ing
I'm leaving tomorrow. I have my plane ticket (FIX성)
Ted is getting married next month. (FIX성)
3) 단순 현재형이 미래의 의미를 가지는 경우
- Timetables, Schedules
- open, close, begin, end, start, finish, arrive, leave, come, return (시작 종결 동사)
be -ing단순현재형
특정개인의 약속모든 집단, 장소에 적용되는 스케쥴
What time are you leaving tomorrow? - What time does the plane leave tomorrow?
I'm going to the movies tonight. - The movie starts at 9:00 tonight.
4) 독특한 Future Time
1 be going to 의 과거형 : was(were) going to : Unfulfiiled Intention = 완수하거나 이루지 못한 과거일.  = were supposed to
We were going to take the train, but we decided to go by car.
탐이 시험을 치렀니?
No, he was going to take it, but then he changed his mind.
2) will be -ing  // 미래진행형이지만 뜻은 단순미래와 유사하다.
I'll be seeing Mary at the party this evening.
3) Shall : 제안 or 제의
Shall I open the door?

5) 미래 시점을 가리키지만, will, be going to 를 쓰면 안되는 경우
- 시간과 조건의 부사절(=명사절(주어,목적어, 보어역할)도 아니고 형용사절(앞명사꾸미거나)도 아니고)
시간: when, after, till, while, as soon as, whenever, by the time
조건: if, if only, on condition, providing, suppose, unless, so long as
When I graduate, I'm going to return home.
When students graduate, they receive diplomas.
다음 문장의 정오를 판정해봐라.
The time will surely come when your words will come true.  When 이 the time 일꾸미는 형용사적 용법이라서 맞다. 시간의 부사절이 아님.
I don't know when he will come again. 명사절이다(목적어역할)
It is difficult to find out if she will attend the meeting. ~인지 아닌지 명사절이므로 미래시제 올 수 있다.
5. Perfective Aspect
기준 시점 이전에 이루어진 사건 혹은 동작의 시상을 말한다. 완료 시상은 기준 시점 이전에 이루어진 사건 혹은 동작이
기준시점에 영향을 미치거나 관계를 맺고 있다는 것을 의미한다.
현재완료 - 현재시점에서 이미 끝나있는일(서양 실용주의에 따르면 가장 많이 쓰이는 용법에 따라서 이름을 딴다.)
그래서 현재완료의 용법이 여러가지 가 있는것이고 보통 대게 많이 쓰는것은 현재시점에서 이미끝나있는 일을
가르키는 용도로 쓰이는 것일 뿐이다.
즉, 꼭 현재시제에 완료된거를 나타내는 것만으 아니다. 다양한 용법이 있다(서양의 이름붙이는 방법에 의해서 채택된것임)
Have(has) p.p 는 지금 이전에 이루어진 동작, 지금에 영향을미침
Had p.p. 는 특정 과거 이전에 이루어진 동작. 과거 시점에 영향을 미침
Will have p.p. 는 특정 미래 이전에 이루어진 동작. 미래 시점에 영향을 미친다.
문장의 차이 음미
He has lost his watch. (지금도 없어~!)
He lost his watch in the station yesterday. - 어제 잃어 버렸어
He will have finished the project by Friday. - 금요일 까지는 끝내놀을거야
He will finsh the project on Friday. - 금요일에 끝내려고 해.
1용법 - 지금 이전에 일어난 일 (특정되지 않은, 막연한, 불확실한)
현재완료는 정확한 시점에는 관심이 없고 현재의 결과가 중요하다는 것이다.
I have been to Mexico in the last year. (지난 365일 사이에 )   지난해 ---> Now (365 일 사이에)
즉 현재완료와 쓰일 수 없는 부사
yesterday, one year ago, then, last week, at that moment
현재완료와 함께 쓰일 수 있는 부사
ever, never, once, many times, several times, before, so far, just, already, yet 등
1)  경험 - 현재 까지 체험한 것
Have you ever eaten lobster? ->과거의 그런경험이 현재까지 남아있는가?
2)  변화 - 현재에 그 변화의 결과가 나타남
You have grown since the last time I saw you.
// 언제자란거에는 관심이 없고, 막연한 과거에서부터(현재 이전에 동작이 일어나서) 현재 결과에 관심이 있는것
3) 성과 - 인류나 개인이 현재까지 이룬 업적
Man has walked on the moon.
Scientists have split the atom.  과거에 남긴 업적이 지금까지도 남아있다.
4) 이루지 못한 일 - 현재도 기다리고 있음.
James has not finished his homework yet.
5) 반복 - 현재까지 불연속적 반복
I have had four quizzes and five tests so far this semester.
2용법  - 지금까지 계속되고 있는 일
 과거부터 지금까지 지속되고 있는 일을 표현할 때 쓰인다. 여기서 중요한것은 그 기간이 지금까지 지속되어야 한다는 것이다.
과거의 기간이라고 해도 이미 끄난 기간, 현재에 영향을 미치지 못하는 기간은 단순 과거로 표현한다.
Mr. A has been in power for four years.
과거부터 지금까지의 지속을 표현하는 방법은 두가지가 있다. 
be -ing 를 쓸 수 없는 동사들에 대해서는 have p.p 를 사용한다.
be -ing 를 쓸 수 있는 동사들은 have been -ing 를 사요한다.
I have known about it for a long time.
Mary has loved chocolate since she was a little girl.
We have been waiting for her for an hour.

.

6. Perfective Progressive Aspect
1) Have been - ing 용법을 심층적으로 분석해보면 두 가지로 나눌 수 있다.
1. 기간에 대한 구체적 언급이 없을 때 = 최근까지 지속된 일
2. 기간에 대한 구체적 언급이 있을 때 = 지금까지 지속되고 있는 일
(1) 최근까지 지속된 동작으로서 말하는 시점에서는 종결되어 있으나, 지금의 상태와 밀접한 연관이 있다. (최근까지의 결과가 현재에 영향을 주기 때문에 현재완료와 관계있다.)
My back hurts, so I have been sleeping on the floor lately. (시점이 구체적 언급 안되어있다, 지금까지 자고있다는게 아니라 최근까지 그렇게 자고있어 왔다 의미)
You're out of breath. Have you been running?
(2) 말하는 지금까지 지속되고 있는 동작. 보통 for, since, how long, all day 등을 동반한다.
The telephone has been ringing for almost a minute.
How long has it been raining?
2) 이 (2) 의 경우 have been - ing 는 be -ing 와 구별하기 어렵다. 어떻게 다른가?
Don't bother me now. I'm working (지금시점에 관심)
I've been working hard, so now I'm going to take a break. 지금까지 일했다!!!
He's sleeping now.(지금 뭐하고있는거에 관심). He's been sleeping more than an hour. (기간정보에 관심, 얼마나 지금까지 해왔는가)
7. Past Perfective (Progressive) Aspect
(1) had p.p , had been -ing  가 have p.p., have been - ing 와 다른 점은 단 하나 뿐이다. 오직 기준시점만이 다르다.
과거완료(진행)은 과거를 기준으로 해서 그 이전에 일어난 일, 그때까지 일어난 일을 말한다.
now라는 기준시점을 Past로 이동시키면 그 외의 모든 것은 동일하다.
영어에서는 now 보다 앞선 시제는 두 개, 즉 단순과거와 현재완료(진행)이지만, Past 보다 앞선 시제는 과거완료(진행) 하나뿐인 점이 매우 편하다.
I had been in bed for two hours when my wife came home.
When I got home, I found that someone had broken into my apartment and had stolen my fur coat.
(2) 과거 완료는 절대적으로먼 과거가 아니라, 어떤 과거 사건에 대해 상대적으로 더 과거인 시상이다.
We met each other 30 years ago.
I met her 5 years ago. I had met her husband 5 years before than. (5년 + 5년)
(3) 과거를 기준으로 해서 그 이전에 일어난 일은 과거완료, 그 이후에 일어난 일은 단순과거로 표현한다.(단순과거의 연속은 순차적 동작)
Was Bill at the reception when you got there?
No, he had already gone home.
Yes, but he went home soon afterward.
(4) had been - ing 의 용법도 have been -ing 와 기준시점을 제외하면 동일하다.
We'd been playing soccer for an hour when it stated to snow.
(5)after, before 등 전후관계가 분명한 접속사가 있다면 과거완료= 단순과거를 혼용한다. As sonn as 는 과거완료를 쓰지 않고 (관용적으로)과거만을 쓴다.
The bus had started(=started) before I reached the bus stop.
After the guests had left(=left), I went to bed.
As soon as Robert saw me, he ran away.
(6)역사적 사실은 had p.p 를 쓰지 않는다
He said that Columbus disvored America.
had p.p 의 특수용법 1 : ~하자마자 구문
과거,과거As soon as we arrived, it began to rain.
과거완료, 과거No sonner
Hardly
Scarcely
Barely
          Had we arrived than(when, before) it began to rain
부정어 이므로 조동사 도치 발생
부정어 도치 = 부정어인부사(구,절) + 조동사(had) +주어 + 동사
On ~ , 과거On + 명사(-ing),  S+V   ex) on our arriving, on our arrival
had p.p 의 특수용법 2: 이루지 못한 소망, 기대
(소망기대동사 - hope, expect, want, intend 등)
had p.p + to 원형 = had p.p + that S would 원형
단순과거 + to have p.p
나는 그 시합에 이기길 희망했는데 이기지 못했다
I hoped to win the game, but I couldn’t.
I had hoped to win the game
I had hoped that I would win the game.
I hoped to have won the game.
8. Future Perfective(Progressive) Aspect
(1) 기준시점이 미래로 이동할 뿐, 모든 점이 다른 완료시상과 같다.
I will graduate in June. I will see you in July. By the time I see you, I will have gaduated. (제 1용법, 이미완료됨, 미래(기준시점) 이전에 일어난 일)
I will go to bed at ten pm. Bill will get home at midnight. I will have been sleeping for two hours by the time Bill gets home.
(by the time ~할 때 쯤이면)


1. 꾸준히
매일 꾸준히 하는 것이 중요하다.
경력이 많은 프로그래머들도 몇달만 코딩을 안해도 감이 많이 떨어지는 것을 느낀다.

2. 반복
책의 내용을 잘 이해했다고 해서 하루아침에 프로그래밍을 잘할수 있는 것은 아니다.
이해한 내용을 바탕으로 수많은 반복연습을 통해서만 지식을 진정한 자신의 것으로 만들 수 있다.
처음 2~3번은 자세히 보고, 그 다음 부터는 하루에 10분간 10페이지를 훑어보는 식으로 반복하자.

3. 좋은코드를 많이 보고 따라한다.
이미 수많은 무림의 고수들이 여러문제들에 대한 코딩을 다 작성해 놓았다. 
새로운 방법으로 문제를 풀겠다고 도전하는 것은 헛수고일 확률이 크다.
"이럴때는 이렇게 하는 구나..."라는 것을 배우고 유사한 상황에서 활용하면 되는 것이다. 
여러분들이 해야할일은 이러한 경험들을 많이 쌓아 나가는 일이지, 기존과는 다른 새로운

코딩방식을 만들어 내는 것이 아니다.

좋은 코드는 보기에도 좋다. 잘정리되어 있고, 별로 특별한 것이 없다. 
프로그래밍의 각요소들을 잘이해하고, 각 요소들을 적재적소에 바르게 사용하면 되는 것이다. 
단지 소스의 라인수를 줄인다고해서 좋은 코딩이 아닌것이다. 
로직이 소스코드에 잘드러날수있게 쉽고 평범하게 작성하는 것이 좋은 코드인 것이다.


4. 기본에 충실
처음에 기본을 잘배워놓지 않으면, 그 이후에는 기회가 잘 없다. 
실무에서는 매일 개발하기 바쁘고, 새로운 기술 배우기 바쁘고...

배울것이 많다고 생각할지 모르나, 실제로 원리는 모두 같다고 해도 과언이 아니다.
하나를 깊이있게 파고들면 나머지는 다 여러분 손에 있을 것이다. 


5. 코드를 작성하기전에 순서도를 그린다.  
프로그래밍 = 로직설계 + 코딩"이다. 

새로운 기술이나
프로그램을 공부하는 것도 중요하지만, 어떤 과제가 주어졌을때 이를 잘 분석하고 설계하는
능력을 장기적으로 키워나가도록 노력해야할 것이다.


6. 주석을 가능한한 많이 적는다.

주석은 매우 유용하고도 중요한 요소이다. 
그럼에도 불구하고 많은 사람들이 이를 소홀히 한다.
자신이 작성한 코드도 몇일만 지나면 이해가 안되는 경우가 많다. 
적어도 이해하는데 시간이 걸린다. 
주석은 이러한 시간들을 절약해줄것이며, 보다 에러가 적은 코드를 작성하는데 도움을
줄 것이다. 특히 여러사람이 공동작업을 하는 경우에는 더욱 더 중요하다. 서로를 위해서...
작업과 관련된 가능한한 많은 정보를 주석에 담도록 하자. 


7. 작업일지를 작성한다.
오늘은 이렇게저렇게 해봤는데 잘안되었다... xxx.java의 코드를 이렇게 바꾸었다. 
몇시몇분에 xx로 백업받아놓았다... 라는 식으로 가능한한 자세히 적도록 한다.
 이렇게 함으로써 여러분들의 경험을 기록으로 쉽게 보관할수 있으며, 문제해결에 많은 도움이 된다.
GIT등의 형상관리툴을 이용하면 이런 작업일지를 작성하는데 편리할것이라 생각이 든다.


8. 자신의 소스를 가꾼다.
보통 코딩을 마치고 나면, 모든 것을 덮어두곤 한다. 원하는 결과를 얻었다고 거기서 그치지말고
이제 로직과 코드를 보다 효율적으로 개선할 방법이 없는지 고민해보자. 글을 써놓고 좋은 글로
만들기 위해 읽고 또 읽고 다듬듯이 코드를 다듬어보자. 여러분들의 코드를 구사하는 능력이 보다
향상되어가는 것을 느낄 수 있을 것이다.

여러분들을 위한 제안은 작은 프로그램을 만들어서 오랜기간동안 점차 발전시켜 나가는 것이다.
새로운 기능들을 하나씩 추가해가고, 기능을 발전시켜나가보자. 이과정을 통해서 여러분들의 실력
은 몰라보게 향상될 것이다.

9. 생각하라.
항상 머릿속에 한 가지 문제를 준비하라. 지하철을 기다리거나, 화장실에서 볼일 볼때 문제를 풀어
보자. 


10. 좋은 책을 선택한다.
공부를 시작할때 제일 먼저 하는 일은 아마도 책을 고르는 일일 것이다. 보통 책하나에 수십시간을
학습하게 되는데, 책을 잘못선택한 경우 수십시간과 노력을 허비하는 셈이다.
바른 책을 고르는 일은 쉬운일이 아니지만, 최소한 몇시간을 투자해서 최선의 선택을 하도록 노력
해야 수십시간을 허비하는 일이 없을 것이다.

책을 고르는 법은 여러가지가 있겠으나, 가장 중요한 것은 본인이다. 서점에서 같은 종류의 몇가지
책을 놓고 서로 비교해보면, 시간을 들인 만큼 보다 나은 선택을 할 가능성이 높아진다.

많은 컴퓨터 서적이 독자들의 선택을 어렵게 하고, 컴퓨터 업계 특성상 좋은책을 만들기 보다
빨리찍어서 파는 것이 더 중요해진 요즘. 독자들의 바른 선택이 보다 나은 책이 출판되는 것을
가능하게 한다는 것을 알았으면 한다.


'IT 최신 트렌드' 카테고리의 다른 글

당신을 위한 쿠팡 기획전  (0) 2020.03.14
웹 캐싱 서비스 with 프록시 서버  (0) 2017.07.09

들어가기 앞서

안드로이드 앱은, 자바의 멀티스레드 프로그래밍 모델을 준수해야합니다. 자바가 편하긴하지만 동시프로그램 처리, 데이터 일관성 유지, Task 시퀀스 설정등 복잡성이 증가하는 단점이 있습니다. 이는 개발자가 고려하여 최대한 복잡성은 줄이고 성능을 높일 수 있도록 구현해야할 것입니다.



스레드 기본사항

보통 안드로이드에서는, 하나의 스레드에서 실행하는 작업의 단위를 TASK라고 지칭합니다. 

스레드는 순차적으로 하나 또는 다수의 태스크를 실행할 수 있습니다.



실행

자바에서는 run method 안에서 태스크를 정의함으로 구현할 수 있다.


private class MyThreadTask implements Runnable{

   public void run(){

int j = 0; // 스레드에서의 지역스택에 저장됨.

   }

}


run() 메서드 안에서 호출되는 지역변수는 스레드의 지역 메모리 스택에 저장됩니다. 태스크의 실행은 Thread 객체생성과 start() 메서드 호출로 

실핼할 수 있습니다.


Thread myThread = new Thread(new MyThreadTask ());

myThread.start();


스레드의 지역데이터를 저장하는 전용메모리가 있습니다. 


CPU는 한번에 하나의 스레드 명령어를 처리할 수 있습니다.


스레드의 변경을 문맥교환, Context Switch라고 합니다.

하나의 프로세서에 동시에 실행되는 두개의 스레드를 코드와 그림으로 보시겠습니다.

Thread T1 = new Thread(new MythreadTask());

T1.start();

Thread T2 = new Thread(new MythreadTask());

T2.start();



스레드 T1 ------                   ------------

                        ||||(문맥교환시간)

스레드 T2                  ------                  -----


      시간


T1과 T2사이에는 CPU가 사용하는 문맥교환시간이 존재해서 T1이 끝나고 바로 T2가 실행되는게 아니라 약간의 문맥교환 오버헤드가 드는것을 확인하실 수 있습니다.(위에 |||| ) 




싱글 스레드 애플리케이션

각 앱은, 하나이상의 스레드를 가집니다. 또한, 사용자의 반응성을 고려해서 멀티스레드 환경으로 구현해야하는 경우도 존재합니다.



멀티스레드 애플리케이션

동작이 동시에 실행되는것으로 인식되도록 앱 코드를 여러코드 경로로 분할하는 애플리케이션입니다. 실행 스레드 수가 프로세서의 수를 초과하면 완벽한 동시성이 될수는 없습니다. 

멀티스레드는 필수적이긴하나 그에따른 복잡성 증가는 개발자가 풀어야 할 과제입니다.



자원소비증가

각 스레드는 지역변수등을 저장하는 전용 메모리영역을 할당받습니다. 프로세서 측면에서는 스레드 설정 및 해제, 문맥 교환에서 스레드를 저장하고 복원시, 오버해드가 생기게됩니다. 스레드가 많아질수록, 더많은 문맥교환이 일어나고 성능이 저하되게 됩니다.



복잡성 증가

코드를 분석하기 어려워집니다. 또한 실행에 불확실성을 가져다 줍니다.



데이터 불일치

두개의 스레드가 공유자원을 사용할 경우, 어떤 순서로 데이터를 접근하는지 알수없게됩니다. 하나의 공유변수를 두개의 스레드가 접근할때 경쟁조건에 노출되게 됩니다. 

그래서 공유변수에접근할때 다른스레드가 접근할수없도록, 원자영역을 만드는것이 필수적입니다. 자바에서 가장 동기화 메커니즘은 synchronized 키워드를 사용하면 되겠습니다.


ex_)

synchronized(this){

  sharedVal++;

}


+ Recent posts