Search

반응형

'코딩'에 해당되는 글 25건

  1. 2020.10.07 [HOW]파이썬 프로그래밍 반복문 while 문 사용하는 방법, Python 순환문 왕초보 버전
  2. 2020.04.12 [java]System.currentTimeMillis() 와 System.nanoTime() 사용하기. 1
반응형

안녕하세요. 신기한 연구소입니다.

이번 포스팅은 반복문 또는 순환문으로 알려진 while문에 대해 알아볼게요.

그럼 while문의 기본 구조를 알아봅니다.

 

while 조건식 :

(탭) 구현부1

(탭) 구현부2

...

 

 

먼저 while문에서 조건에 사용할 변수 endCount를 선언하고 1로 할당했습니다.

while 구문은 당연히 while로 시작합니다.

그 뒤로 조건을 설정합니다.

우리는 미리 변수로 선언한 endCount를 사용했습니다. 10보다 작거나 같다는 조건입니다.

마지막에 콜론(:) 잊지 마세요.

의미는 endCount가 10보다 작거나 같다면 (혹은 참이면, 조건이 맞다면 등)

while문에서 구현한 구문을 계속 실행하면 됩니다.

while문에서 구현한 구문(바디, body)은

자동으로 탭(들여 쓰기)이 생성되고 코딩을 할 수 있게 됩니다.

탭(들여 쓰기)이 자동으로 안된다면 while문 마지막 콜론(:)을 넣었는지 확인하세요.

 

위 프로그램은 조건에서 사용할 변수 endCount를 1로 설정하고

while문 조건으로 endCount가 10보다 작거나 같은 동안(참인 동안)

탭(들여쓰기)가 된 구현부(바디)의 로직을 실행하게 됩니다.

구현부는 먼저 print()로 출력을 하고 endCount를 += 1을 사용해 1씩 증가시킵니다.

 

예측되는 결과는 "대기번호 : 1" ~ "대기번호 : 10"까지 쭉 출력될 듯합니다.

축하합니다. 원하는 결과가 나왔습니다. ㅎㅎ

지금까지 파이썬 프로그래밍의 반복문 중 하나인 while문의 기본 구조를 살펴봤습니다.

 

이제 if문도 같이 사용해서 파이썬 프로그래밍을 해볼게요.

보통 반복문은 일반적으로 for문을 자주 사용하는 편입니다.

 

while True (무한 반복)

 

while문은 무한 반복(루프)인 경우 사용하는 경우가 많습니다.

서버/클라이언트를 개발하는 경우에도 서버가 클라이언트를 대기하는 경우에

while Ture라는 무한 반복으로 구현합니다.

또한 while문 진행 시 조건에 의해 중간에서 다시 처음으로 돌아가야 하거나

조건에 의해 while문을 더 이상 진행하지 않아야 하는 경우도 있을 겁니다.

그런 경우에 사용하는 키워드가 있습니다.

좀 복잡해 보일 수 있지만 하나씩 보면 이해가 될 겁니다.

 

continue 와 break

 

먼저 변수 cnt를 0으로 할당합니다.

while문은 True로 항상 참이기에 무한 반복을 할 겁니다.

멈추는 기능이 없다면 빠져나올 수 없겠지요?

cnt가 0이면 Start를 출력합니다.

그리고 cnt에 1을 더합니다. 그럼 더 이상 Start를 실행하지 않겠네요.

progress를 출력합니다.

if 조건문을 사용해서 3으로 나눠서 나머지가 0인 경우는 

continue==를 출력한 뒤 continue를 실행하면서 다시 위로 올라갑니다.

나머지가 0이 아니면 계속 진행합니다.

그리고 cnt가 100이면 break==를 실행한 뒤

break를 실행하면서 while True인 무한 반복을 빠져나오게 됩니다.

초반부 결과를 보겠습니다.

continue==3을 보면 바로 앞 행이 progrssStart이고

progrssEnd가 없고 다시 progrssStart가 출력되었습니다.

마지막 출력 부분입니다.

cnt가 100이 되니 (if cnt == 100:)

break== 100을 출력하고

더 이상 진행하지 않고 while문을 빠져나왔습니다.

간단한 조건 판단을 기준으로 반복 순환을 하는 경우

while문이 유용하게 사용될 수 있답니다.

몇 번의 코딩 연습을 한다면 실전에서도 잘 사용할 수 있을 거예요.

좀 더 복잡한 구현부나 중첩 반복이 필요하다면 for문이 더 나을 수도 있답니다.

그래서 다음 포스팅은 for문으로 만나겠습니다.

즐 코딩하세요.

잘못된 정보나 수정이 필요하면 댓글 주세요.

아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.

반응형
반응형

안녕하세요. 올드한 개발자 티보이입니다.

자바 코딩을 하다 보면 시간 관련 기능이 필요할 때가 있습니다.

자바로 개발된 프로그램이 간혹 느려지면 디버깅 시 경과시간을 체크해야 되는 경우가 있습니다.

비슷하면서도 다른 두 개의 메서드인 System.currentTimeMillis() System.nanoTime()에 대해 알아보겠습니다.

public static long currentTimeMillis();

첫번째 메서드인 System.currentTimeMillis() 에 대해 알아봅니다.

현재 시간과 UTC(협정세계시)인 197011일 자정과의 차이로 밀리세컨드(1/1000초) 값을 반환합니다.

다음 예를 통해 사용법을 확인해 봅니다.

1
2
3
4
5
6
7
8
9
10
11
long curLong = System.currentTimeMillis();        
System.out.println(curLong);
 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); // HH 24시간  hh 12시간
String curTime = sdf.format(new Date(curLong));
 
System.out.println(curTime);
Thread.sleep(5000);
long endLong = System.currentTimeMillis();
 
System.out.println((endLong - curLong)/1000 + "초 걸림");  // 밀리초라 천분의 1로
cs

결과: 

1586618583204
2020-23-12 00:23:03
5초 걸림

두 번째 System.nanoTime()는 JDK1.5부터 추가된 메서드입니다.

public static long nanoTime();

그럼 앞에 설명한 System.currentTimeMillis()어떻게 다를까요?

이 메서드는 현재 시간(시스템 시간)과 관계가 없습니다.

작동중인 JVM의 정밀한 시간 소스의 현재 값을 long타입으로 나노세컨드(1/1000000000초)를 반환합니다.

그래서 현재 시간을 측정하기 위해서 사용하면 안 되겠지요.

그리고 분산 시스템에서 다른 JVM끼리 시간 측정을 위해 사용하면 안 됩니다.

JVM마다 측정하기 위한 기준값이 다르기에 절대값이 될 수 없습니다.

, 서버간 데이터 전송 시간을 측정하기 위해 사용하면 안 된다는 겁니다.

밀리세컨드(1/1000)를 사용하는 System.currentTimeMillis() 보다 더 정밀합니다.

다음 예를 통해 사용법을 확인해 봅니다.

1
2
3
4
5
6
7
long nTime = System.nanoTime();
System.out.println(nTime);
Thread.sleep(5000);
long eTime = System.nanoTime();
System.out.println(eTime);
 
System.out.println((eTime-nTime)/1000000000 + "초 걸림"); // 나노초라 10억분의 1로
cs
 

결과:

94882998233500
94887998455400
5초 걸림

결론은 시스템의 시간을 사용하기 위해서나 오늘 날짜를 알아내기 위해서는 System.currentTimeMillis()를 사용하면 되고

개발한 프로그램의 성능 측정을 위해 나노초로 정밀하게 구간 시간 측정을 위해서는 System.nanoTime() 사용하면 됩니다.

하지만 다른 서버 간 통신 시간 측정 시에는 System.nanoTime()를 사용하면 안 됩니다.

즐 코딩하세요.

반응형