이번 포스트에서는 ScreenShot 기능에 대해 알아 보겠습니다.


우선 화면을 캡쳐하기 위해 필요한 모듈을 알아 보겠습니다.





다음으로 화면 캡쳐후 저장할 파일이름이 지정될 변수를 선언 합니다.

(필자는 지정해서 했습니다. 얼마든지 변형해서 사용할 수 있습니다.)





다음은 실제 화면을 캡쳐하는 기능을 구현한 함수입니다.



화면을 캡쳐하는 기능을 구현 했습니다.

이제 캡쳐한 이미지를 GitHub에 보내기 위해

바이너리 형식으로 읽어 들여서 string 형식으로 변환 후

return 하는 함수를 알아 보겠습니다.





다음과 같습니다.




이렇게 해서 화면 캡쳐 후 GitHub로 보내는 코드를 알아 보았습니다.



다음 포스트에서는 Keylogger와 KeyDump에 대해서 알아보겠습니다.






* [출처] Black Hat Python

* [출처] Everything 블로그 본인






지난번 설정 파일에 이어서 

사용할 모듈들에 대해서 알아 보겠습니다.

지난번 포스트를 확인하지 못 하신 분은

다음의 링크를 통해 확인 해 주세요!


http://widevery.tistory.com/19?category=818811



mainInformation, environment, dirlister 모듈에 대해서

알아보도록 하겠습니다.


우선 mainInformation입니다.





다음은 environment입니다.






다음은 dirlister입니다.




이렇게 해서 총 3개의 모듈에 대해서 알아 보았습니다.


이번 포스트는 짧았는데 아마 다음 포스트들도 마찬가지 일 것 같습니다.


다음 포스트에서는 ScreenShot 모듈에 대해서 알아 보겠습니다.




* [출처] Black Hat Python

* [출처] Everything 블로그 본인




네 여러분 반갑습니다.


오늘 포스트는 짧을 것 같은데요.

그래도 시작해 봅시다!



Python에서는 JSON 형식의 파일을

지원해주는 모듈을 자체적으로

내장하고 있습니다.


바로 요녀석 입니다.


import 해주고, 「help(json)」 이라고 입력 해주시면

다음과 같이 json 모듈에 대한 

자세한 설명을 확인 할 수 있습니다.


json을 사용하기 위해서는

Python에서 「List」 「Dictionary」 를 알고 계셔야 합니다.

이유는 바로 json 형식의 파일이 다음과 같은 구조로 되어 있기 때문입니다.


보기 어려우시다구요!?

다음과 같이 바꿔보면 어떨까요


[{"module":"IpInformation"}]


json 파일의 경우 위와 같은 형식으로

저장이 되기 때문에 List와 Dictionary를 알고 계셔야 합니다.


이제 우리가 저번 포스트에서 했던 GitHub 연동 프로그램에 사용할

JSON 형식의 설정 파일을 만들어 보겠습니다.

※ 지난번 포스트가 궁금하시거나 알고 싶으신 분들은 다음의 링크에서 포스트 확인 후 와주세요!


http://widevery.tistory.com/16?category=818811

http://widevery.tistory.com/17?category=818811


여기서 부터는 각자가 추가하고 싶고 실행할 모듈들에 대한

설정 파일을 만들어 주시면 되는데요.

저 같은 경우는

1) 프로그램 배포

2) Target PC에서 실행

3) Target PC의 Platform정보 확인 후 IP 정보 GitHub로 업로드

4) 업로드 후 IP "0.0.0.0" Port 지정 해서 Python TCP Server 실행

5) 프로그램 배포자가 자신의 GitHub 확인

6) 확인 후 IP와 Port 번호를 통해 Python TCP Client로 Target PC 연결

7) 배포자 PC에서 입력한 메뉴(혹은 명령어)에 따라 해당 모듈들 실행

* 필자가 사용한 기능을 가진 모듈들 - 「IpInformation」「Keylogger」「KeyDump」「ScreenShot」「ScreenShot」「dirlister」「environment」

* 시간상 급하게 올리다 보니 더 추가하지를 못 했는데요 여기에 「랜섬웨어」「윈도우권한상승」「백도어」등의 기능들도 추가 할 수 있습니다.

http://widevery.tistory.com/16?category=818811

위 링크의 포스트 시작 시 말씀드렸듯이 어디까지나 이 글의 목적은

개인 공부 및 교육용 입니다.

언제든지 문제가 생길 경우 바로 삭제 조치 하겠습니다.

또한 악용하시는 경우 책임은 본인에게 있습니다.


사설이 길었군요

본격적으로 필자가 사용하기 위해 모듈들을 불러올 수 있도록 한

JSON 형식의 설정 파일들에 대해 알아 보겠습니다.


우선 이번 포스트의 위쪽에 JSON에 대해서 설명하면서

"module":"IpInformation"

이라고 되어 있는 사진을 하나 보셨을겁니다.

해당 파일은 IpInformation.py 파일을 불러오는 역할을 합니다.


나머지도 위 사진과 형식은 같습니다.

이름만 틀려질 뿐이지요.



위 두가지 이외에도 다음과 같이


[{"module":"ScreenShot"}]

[{"module":"KeyDump"}]

[{"module":"Keylogger"}]

까지 해서

총 6가지의 설정 파일을 만들어 주었습니다.

당연히 파일 확장자 형식은 <ConfigureFileName>.json 형식입니다.

<ConfigureFileName>은 설정 파일 이름이면서 첫 번째 포스트에서

trojan_id 라고 했던 부분에서 지정해주고

trojan_config = trojan_id.json 이 되는데

그게 여기서 사용됩니다.

그 부분을 고려해서 json 형식의 설정 파일의 이름을 지정 해주세요.




이렇게 해서 GitHub 연동 프로그램의 설정파일에 대해서 까지 알아 보았습니다.


다음 포스트에서는 mainInformation, environment, dirlister 모듈에 대해서 알아 보겠습니다.


※ [출처] Black Hat Python

※ [출처] Everything 블로그 본인






지난번 GitHub 연동 프로그램의 2번 째 글입니다!

지난 번 글을 못 보신 분은 다음의 링크를 통해 확인 해 주세요!

http://widevery.tistory.com/16?category=818811


GitHub 연동 프로그램에서 사용할 모듈과 변수 설정을 마쳤으므로

프로그램의 기능을 함수와 클래스들에 대해서!

(소스코드)사진으로 알아 보겠습니다.

귀찮아ㅅㅓ... 사진에 설명을 첨부하였으니 그 점 참고해 주세요!










이렇게 GitHub 연동 프로그램에 대해서 2부에 걸쳐 알아 보았습니다.


다음 글에서는 GitHub 연동 프로그램에 사용되는 설정 파일에 대해서

알아보도록 하겠습니다.


※ [출처] Black Hack Python

[출처] Everything 블로그 본인






여러분 안녕하세요

활짝웃자입니다.

너무 오래간만이어서 죄송하기도하고 필요에 의해서 하.ㄴ.. 해서

다시 오게 되었습니다.


잡담은 여기까지 하도록 할게요!


GitHub 연동 프로그램은 맞는데

GitHub 연동해서 상대 PC의 정보를 파싱해서

GitHub로 보내고

프로그램을 심은 쪽에서는

GitHub만 확인하고 정보를 탈취하는 프로그램입니다.

해당 게시글은 몇 개의 글로 나누어질 예정입니다.

만약 이 글이 문제가 될 경우 바로 삭제 조치 하도록 하겠습니다.


※ 이 게시글은 어디까지나 교육 및 공부를 목적으로 만들어졌으며

악용하시라는 의도로 만들어진 것이 아닙니다.

만약 악용하시더라도 그 책임은 본인에게 있음을 알려 드립니다.





깃허브란?

깃허브는 분산 버전 관리 툴인 깃을 사용하는 프로젝트를 지원하는 웹호스팅 서비스이다. 루비 온 레일스로 작성되었다. GitHub는 영리적인 서비스와 오픈소스를 위한 무상 서비스를 모두 제공한다.

...라고

우리의 'Google'!에 검색 해보니 나오더라구요 :)........

자세히 알고 싶으신 분은 GitHub를 따로 검색해주세요!


Python 에는 GitHub를 사용할 수 있도록 모듈이 존재합니다.

다음과 같습니다. :)


(모듈 설치는 검색 해보면 많이 나와있고, 잘 나와 있으니 찾아보세요 :) !)


위 사진과 같이 github3 모듈을 import 하면 GitHub와 연동할 준비를 하게 됩니다.


이제 GitHub와 어떻게 연동을 하고, 무엇을 하는지 생각해봅시다.

연동을 위해서는 (자신의) GitHub ID와 PW가 필요합니다.

다음으로 Repository가 필요하고 정보를 저장할 Repository가 필요합니다.

정보 저장을 위한 Repository는 기본 베이스 Repository의 하위 디렉터리 형식으로 생성해 줍니다.

(자세한 것은 검색 해보시면 나와 있어요!)


그 외에 또 필요한 것을 생각해 봅시다.

우리가 원하는 기능을 하는 모듈이 Python에 없는 경우가 있습니다.

그런 경우 해당 모듈을 설치를 하거나 만들어야 되는데

모듈을 설치 하는 것도 편하지만 이번에는 만들어서 GitHub에 저장 후,

Target PC에서 GitHub 연동 프로그램을 실행하여

필요한 모듈을 GitHub에서 불러오기도 하고, Target PC의 정보를

GitHub에 업로드 시키는 기능도 필요하다고 생각합니다.

그리고 무작정 GitHub에 업로드 하는 것이 아닌 base64 암호화 기법을 사용해

암호화 된 상태로 보내도록 합니다.


또한 GitHub에 저장 되어 있는 필요한 모듈을 불러올 때는

Python에서 지원 해주는 json 모듈을 활용하여

json 형식의 파일로 불러올 모듈을 지정하고,

json 형식의 설정 파일을 읽어 들여서 해당 설정 파일의 모듈을

GitHub에서 불러들여서 실행하는 형태가 되면 좋다고 생각합니다.


그러기 위해서 필요한 모듈들은 다음과 같습니다.



위 사진의 「from github3 import login」 부분은

github3 모듈의 login 기능만을 사용하겠다는 선언입니다.


이제 모듈들은 준비가 되었으니

프로그램에서 사용할 「변수」를 선언합니다.


다음은 변수들 선언과 사용 용도입니다.








여기까지가 GitHub 연동, Target PC의 정보 수집을 위해

필요한 모듈들과 프로그램에 필요한 변수 선언이었습니다.


다음 글에서는 GitHub 연동 프로그램(기존의 Trojan 수정)의

기능들에 대해서 알아 보겠습니다.



※ [출처] Black Hat Python

※ [출처] Everything 블로그 본인



오랫만에 글을 올리네요.


개인적인 사정으로 바빠서 올리지 못 한 점 양해 부탁드립니다.




이번 글에서는 if ~ else 문과 if ~ else if ~ else 문을 다루도록 하겠습니다.



1. if ~ else 문


if 문하고 if ~ else 문의 차이점은 처음 보자마자 알 수 있듯이 else 가 추가 된 것입니다.


if 문은 조건을 검사 후 조건 성립하면 실행하고, 조건 성립하지 않으면 실행을 하지 않고 다음 문장으로 넘어갑니다.


if ~ else 문 if 부분에서 조건이 성립하지 않을 경우 else 문의 내용을 실행합니다.


반대로 if 부분에서 조건이 성립하면 else 문의 내용을 실행하지 않습니다.


예제를 통해 알아보도록 하겠습니다.



[ if 문의 조건이 성립할 경우 ]



[ if 문의 조건이 성립하지 않을 경우 ]


위의 예제에서처럼 if 문의 조건이 성립하지 않았을 경우 실행할 것을 else 문을 통해서 실행할 수 있습니다.






2. if ~ else if ~ else 문


if ~ else if ~ else 문은 조건검사 효율 문제 때문에 사용한다고 보시면 됩니다.


바로 예제를 통해 알아보도록 하겠습니다.



[ if 문의 비효율성 ]


위의 예제를 사람이 보면 단순히 '조건이 맞는 것만 실행하고 나머지는 실행하지 않는다' 라고 생각을 하기 쉽습니다.


하지만 C언어에서는 4가지의 if 문에 있는 조건문을 전부 검사합니다.


그렇게 되면 필요하지 않은 것들까지 조건을 검사하게 되서 그만큼 효율이 떨어지게 됩니다.


그렇다면 if ~ else if ~ else 문을 예제를 통해 알아보도록 하겠습니다.



[ if 문의 비효율성 해결을 위한 if ~ else if ~ else 문 ]


위 예제에서는 if 문의 비효율성을 해결하기 위해 if if if 대신 if ~ else 문 중간에 else if 를 추가 한 것입니다.


위 예제와 같이 코드를 작성하게 될 경우, if 문의 조건이 성립하지 않고, 두 번째 if 문 대신 들어간 else if (opt == 2) 문장이 참일 경우 해당 문장을 실행하고, 나머지 else if (opt == 3) 부터 else 문 까지는 실행을 하지 않고 바로 24번 째 줄의 printf("결과: %f \n", result); 문으로 넘어가게 됩니다.


이렇듯 if 를 연속적으로 사용하여 조건 검사를 매 회 계속 하는 것보다 else if 를 사용하여 조건이 성립 할 경우 남은 조건 문을 실행하지 않도록 하여 효율성을 높이는 방법이 훨씬 보기에도 편하고, 사용에 익숙해지면 편하게 사용 가능합니다.






3. if ~ else 문과 if ~ else if ~ else 문의 구조


if ~ else 문과 if ~ else if ~ else 문의 구조는 다음 예제를 통해 알아보도록 하겠습니다.



[ if ~ else 문, if ~ else if ~ else 문의 구조 ]


위 예제에서 확인 가능 하듯 if ~ else 문은 if 문의 조건식이 성립하지 않을 경우 else 문을 실행하는 구조입니다.


if ~ else if ~ else 문의 경우


if 문의 조건식이 성립하지 않아도 else if 문 조건 성립 또는 모든 조건이 성립하지 않아 else 문을 실행하는 구조로 되어 있습니다.


또한 if ~ else if ~ else 문에서 else if 부분은 추가로 else if 를 삽입 가능합니다.






이것으로 if ~ else 문, if ~ else if ~ else 문에 대하여 알아 보았습니다.



다음에는 반복문의 생략과 탈출에 사용되는 continue 와 break 에 대하여 글을 올리도록 하겠습니다.









'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 공부 관련!  (0) 2019.08.16
C언어 조건문 - if 문 (1)  (0) 2017.01.26
C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12

이번에는 선택적으로 실행 할 수 있는 if 문에 대해서 알아보도록 하겠습니다.






1. if 문이 필요한 이유


귀찮게 if 문도 알아야 되는 구나 생각 하실 수 있습니다.


계산기를 예로 들어 보겠습니다.


분명 자신은 덧셈 결과만 알고 싶은데, 덧셈, 뺄셈, 곳셈, 나눗셈등 모든 결과가 나오면 불편합니다.


다음 예제를 통해서 알아보겠습니다.



위의 예제에서 알 수 있듯이 if 문으로 지정을 해서 원하는 연산만 실행이 되도록 할 수 있기에 if 문을 사용합니다.







2. if 문의 구조와 흐름


if 문의 경우 if 문, if~else 문, if~else if~else 문 이 있습니다.


* 이번 글에서는 if 문만 다루도록 하겠습니다. if~else 문, if~else if~else 문은 다음 글에서 다루도록 하겠습니다.


if 문의 경우 구조는 다음과 같습니다.



* 5행의 // 주석 처리와 7행과 18행의 /* */ 주석처리를 빼고 보시면 됩니다.


위 예제에서 확인 할 수 있듯이 if 문 또한 중괄호 { } 를 생략 가능합니다.


또한 if 문의 조건식에서 조건이 참이면 해당 문장을 실행하고, 다음 행으로 넘어갑니다.


다음 행으로 넘어가서 조건식이 거짓이어도 다음 문장의 내용을 '또' 한 번 읽고, 조건의 참/거짓 여부를 확인 후 실행 할지 안 할지 판 단 후 종료하게 됩니다.


이러한 불편한 점 때문에 조건이 참일 때까지 계속 검사 하다가 조건이 참이면 나머지는 안 하는 방법이 없을까? 라는 생각에서 if~else 문과 if~else if~else문이 나오게 되었습니다. ( 위에서 한 번 언급 한 것처럼 if~else 문과 if~else if~else 문은 다음 글에서 다루도록 하겠습니다. )


이렇듯 if 문을 사용하면 사용자가 원하는 대로 '선택' 할 수 있다는 점 때문에 if 문을 사용합니다.






이번 글은 여기서 마치도록 하겠습니다.



다음에는 if~else 문과 if~else if~else 문에 대하여 올리도록 하겠습니다.










'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 공부 관련!  (0) 2019.08.16
C언어 조건문 - if 문 (2)  (0) 2017.02.16
C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12

이번에는 C언어에서 반복문들의 중첩에 대하여 알아보겠습니다.







1. for 문의 중첩


while 문, do~while 문 의 중첩처럼 for 문 또한 중첩이 가능하고, 코드 간결화 및 가독성과 효율을 높여주는 방법으로 중첩을 사용합니다.


따로 설명 하지는 않고, 반복문들의 중첩에 대한 구구단 예제를 통해 알아보고, 익숙해지는 시간을 가지도록 하겠습니다.








2. for / for 구구단



(개인적으로 for 문이 제일 편했습니다.)








3. for / while 구구단








4. for / do~while 구구단








5. while / while 구구단








6. while / for 구구단








7. while / do~while 구구단









8. do~while / do~while 구구단








9. do~while / while 구구단








10. do~while / for 구구단






여러가지 반복문들의 중첩을 구구단을 통해 알아보았습니다.


순서만 바꿔주면 된다라는 것이 이번 글의 목적이 아닙니다.


C언어의 특징과 각 반복문들의 특징을 잘 알고, '계속 연습 해보면서 익숙해져야 된다'는 것이 이번 글의 요점입니다.


처음 접하시는 분들의 경우 while, do~while, for 문에 대해서 완벽히 이해하셨어도 바로 적용이 안 되시는 경우가 대부분입니다.

(물론 예외이신 분들도 존재합니다.)


따라서 구구단은 단순한 예제일 뿐이고, 여러번 중첩해서 사용하는 연습을 해보셔야 됩니다.


for / for 반복문을 다른 반복문으로 바꿔본다던지 하는 식으로 연습 해보시는 것이 가장 좋습니다.

(꼭 중첩만이 아니더라도, 중첩이 없는 반복문을 중첩이 없는 다른 반복문으로 바꿔본다던지 하는 방식도 좋습니다.)






이것으로 반복문들의 중첩에 대해서 알아보았습니다.





다음에는 '조건에 따른 흐름의 분기' 에 대해서 공부하고 글을 올리도록 하겠습니다.










'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 조건문 - if 문 (2)  (0) 2017.02.16
C언어 조건문 - if 문 (1)  (0) 2017.01.26
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12
C언어 반복문 - do~while문  (0) 2017.01.09

이번에는 반복문 중 하나인 for 문의 생략 가능한 부분과 무한루프에 대해서 알아보도록 하겠습니다.








1. for 문 에서의 생략


저번 글에서 for 문의 구조는 for ( 초기식 ; 조건식 ; 증감식 ) 이렇게 된다고 글을 작성 했었습니다.


하지만 이러한 초기식, 조건식, 증감식을 '생략' 하고 사용할 수 있습니다.


예제를 통해서 알아보도록 하겠습니다.



위의 예제는 입력 받은 값들의 평균을 출력 해주는 예제입니다.

* num++; 은 평균 계산을 위해 작성한 부분이고, (num - 1)은 조건식의 input>=0.0이 아닐 경우 음수의 값은 평균 계산에서 제외 시키기 위한 부분입니다.


평균 계산을 원하는 값들을 계속 입력 받아야 되고, 사용자가 원하는 시기에 음수 값을 입력해서 평균을 계산하는 소스입니다.


위의 예제의 경우 for( 초기식 ; 조건식 ; 증감식 ) 에서 초기식, 증감식 이 생략 되었습니다.


생략 해준 이유는 간단하게 말하면 필요 없기 때문입니다.


input 값은 사용자로 부터 값을 입력 받아서 입력 받을 때마다 해당 값으로 초기화가 되고, 사용자가 언제 입력을 종료할지 모르기 때문에 초기화를 필요로 하는 초기식 및 조건식을 충족시키기 위한 증감식 또한 필요하지 않게 됩니다.


따라서 초기식과 증감식은 필요하지 않기에 생략을 하고, 조건식만 충족시켜서 반복문을 탈출하면 되기에 조건식만 입력한 경우입니다.








2. for 문의 무한루프


이번 글의 첫 번째 주제에서 초기식, 증감식의 생략을 보고, 조건식도 생략 가능하지 않을까? 라는 궁금증을 가지시는 분도 계실겁니다.


당연히 생략 가능합니다.


예제를 통해서 알아보도록 하겠습니다.



위의 예제에서 조건식의 생략이 가능한 것을 알 수 있습니다.


또한 예제에서 확인 가능한 것은 다음과 같습니다.


1) 초기식 생략 가능

2) 조건식 생략 가능

3) 증감식 생략 가능

4) 무한루프 발생

이로써 초기식, 조건식, 증감식 의 생략이 모두 가능한 것을 알 수 있습니다.


하지만 여기서 궁금증을 가지시는 분들이 계실 겁니다.


조건식의 생략에 대해서 제대로 설명이 안 되어 있네? 갑자기 무한루프는 왜 나왔지? 라는 생각을 하시는 분 당연히 계실 겁니다.


while 문, do~while문에 대해서 글을 올리면서 반복문의 조건식이 항상 '참'이 되면 반복문을 탈출하지 못 하고, 무한루프를 형성하게 된다라는 글을 올렸었습니다.


이 때, while 문과 do~while 문에서는 조건식에 0을 제외한 '참'을 나타내는 값 중 대표인 '1'을 사용해서 조건이 항상 참이도록 했었습니다.


하지만 for 문에서는 조건식을 '생략' 함으로 써 무한루프를 형성하게 됩니다.


물론 변수 선언 해주고 해당 변수의 값을 1로 지정 해주고 조건식을 써줘서 for 문의 무한루프를 형성해도 됩니다.


하지만 for 문의 경우 생략이 가능한데, for 문에서의 조건식을 생략할 경우 조건을 항상 '참'으로 인식하게 됩니다.


따라서 for 문의 조건식을 생략할 경우 무한루프를 형성하게 됩니다.


또한 for 문에서 조건식을 사용하기 복잡하거나 까다로울 경우 추후 올릴 예정인 if 조건문과의 연관성이 있습니다. if 문으로 조건을 걸어서 무한루프의 반복문을 탈출하는 경우도 있습니다.











이것으로 for 문의 생략과 무한루프에 대하여 알아보았습니다.


다음에는 for 문의 중첩과 다른 반복문들의 중첩에 대하여 글을 올리도록 하겠습니다.









'프로그래밍 언어 > C' 카테고리의 다른 글

C언어 조건문 - if 문 (1)  (0) 2017.01.26
C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (1)  (0) 2017.01.12
C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(2)  (0) 2017.01.02

이번에는 반복문 중 하나인 for 문에 대해 알아보도록 하겠습니다.







1. for 문 이란?


첫 번 째 주제에서처럼 for 문도 다른 반복문인 while, do~while문 처럼 반복을 위해 사용되는 문장입니다.


while, do~while 문. 이 두 가지 했으면 충분한 것 같은데 굳이 또 다른 반복문을 할 필요가 있을까? 라는 궁금증이 생기실 수 있습니다.


이에 대한 것은 다음의 예제를 먼저 본 후 진행 하도록 하겠습니다.



예제를 보면서 이렇게 생각할 수 있습니다.


main이라는 함수를 선언 해주고, 4 bytes 크기의 int 형 변수인 count를 선언하면서 동시에 0으로 초기화를 해줬구나.


반복문 중 하나인 while 문을 선언 했는데 조건은 count 가 10이 되기 전까지 while문을 실행 해주는구나.


반복을 실행하는 문장은 어떤 기능일까? -----> "비교를 위한 예제입니다." 라는 문장을 출력하는 구나.


몇 번 출력하는 걸까? ----------> count++; 이라는 문장이 있다면 총 10번의 printf 기능을 하고 반복문인 while 문이 종료가 되겠구나.


while 문이 종료되고나면 return 0; 문장으로 인해서 프로그램이 종료가 되겠구나.


이처럼 어떠한 기능을 '반복'하고 싶고, '몇 번 반복'하고, '반복 조건을 충족시킬 문장'은 어떤 것인지 한 번에 보는 것이 힘듭니다.(번거로워요...)


이렇듯 일반적인 while, do~while 문은 익숙해진다 해도 한 번에 알아 보기에는 약간 무리가 있습니다.


따라서 반복 횟수, 반복 조건 등을 한 번에 알아 볼 수 있도록 해주는 문장이 'for 문' 입니다.








2. for 문의 구조와 이해


for 문의 구조는 다음과 같은 필수 요소 들로 이루어져 있습니다.


필수요소 

기능

                                          초기식

  반복을 위한 변수의 선언 

                                          조건식 

  반복의 조건 검사

                                          증감식 

  반복의 조건을 '거짓' 으로 만들기 위한 연산


물론 위의 요소들이 while, do~while 문 에서도 사용이 되는 요소 들입니다.



예제에서 보시는 것처럼 while, do~while 문에도 필요한 요소들입니다.


하지만 for 문의 경우 초기식, 조건식, 증감식을 한 줄에 표현 할 수 있습니다.



예제에서 알 수 있듯이 반복을 실행할 문장을 '몇 번 반복하고, 반복 조건을 만족 시키는 증가 및 감소식, 반복 조건 및 증가, 감소에 사용되는 변수의 초기화'를 한 줄에 작성하여 알아 보기 편하도록 되어 있는 것을 확인 하실 수 있습니다.


이렇듯 코드를 간결화 하고, 가독성을 좋게 해주기 때문에 for 문을 사용하게 됩니다.


다시 한 번 for 문의 구조를 정리해 보면 다음과 같습니다.


for( 초기식 ; 조건식 ; 증감식 )

{

// 반복의 대상이 되는 문장들

}


이러한 형식으로 for 문을 사용해주시면 됩니다.


그런데 바로 위의 예제에서 for 문을 2개 사용 했는데 왜 그런거지? 라는 궁금증을 가지시는 분들도 계실거고, 대략 눈치를 채신 분들도 계실겁니다.


for 문 이후에 if 문 에서도 나오는 내용이지만 for 문에서 반복할 문장이 1줄일 경우, 중괄호 { } 의 생략이 가능합니다.

* 하지만 반복할 문장의 마지막에 세미콜론 ; 을 반드시 작성하셔야 됩니다.


for 문이 작동하는 순서에 대해 알아보도록 하겠습니다.


for 문이 작동하는 순서는 다음과 같습니다.


1) 초기식 ==> int count=0 에 해당하는 초기화는 반복문이 시작하기 전 '1회' 만 실행합니다.

2) 조건식 ==> count < 10 에 해당하는 조건의 검사는 반복문의 시작에 앞서 진행하고, 반복 영역을 실행하기 전에 항상 확인 합니다.

3) 증감식 ==> count++ 에 해당하는 증감연산은 반복영역을 실행한 후에 진행합니다.


이렇듯 더욱 간단히 순서를 나열해 보면,


(1) 초기식 ==> (2) 조건식 ==> (3) 반복영역 실행! ==> (4) 증감식 ==> (2) ==> (3) ==> (4) ==> (2) 조건식이 '거짓' 이 될 경우  종료!


위와 같은 순서로 for 문이 작동하는 것을 알아 보았습니다.


실제로 편하고(개인 적인 생각입니다.), 가독성이 좋고, 코드의 간결화도 할 수 있는 for 문을 주로 사용합니다.








이것으로 반복문 중 하나인 for 문에 대하여 간단하게 알아 보았습니다.


다음에는 for 문의 중첩과 for 문 중첩 예제, 반복문들을 다양하게 중첩시켜서 사용하는 예제와 for 문 구조의 생략 가능한 부분, for 문의 무한 루프에 대해서 글을 올리도록 하겠습니다.












'프로그래밍 언어 > C' 카테고리의 다른 글

C 언어 반복문의 중첩  (0) 2017.01.15
C언어 반복문 - for문 (2)  (0) 2017.01.15
C언어 반복문 - do~while문  (0) 2017.01.09
C언어 반복문 - while문(2)  (0) 2017.01.02
C언어 반복문 - while문(1)  (0) 2017.01.02

+ Recent posts