조건문과 반복문
- 3항 조건 연산자
- if문
- for문
- while문과 do while문
- break와 continue
3항 조건 연산자
조건식을 통하여 참이냐 거짓이냐를 확인하여 변수에 참 혹은 거짓의 결괏값을 저장하는 방식입니다.
_value = expression ? _trueValue : _falseValue;
선언을 하는 방법은 위와 같으며 _value라는 변수에 expression 조건식의 결과가 참인 경우 _trueValue값을 거짓인 경우 _falseValue값을 저장합니다.
예시를 보인다면 아래와 같습니다.
uint a = 5;
function action(){
a = a>3 ? 10 : 1;
}
uint타입을 가지는 변수 a는 처음에 5의 값을 가지도록 선언을 하였습니다. 그 이후 함수 action을 만들고 내용으로 3항 연산자를 사용하였습니다. 조건은 a>3으로 a가 3보다 큰지 확인하는 조건이 사용되었고 크다면 참으로 a에는 10의 값이 저장되고 작다면 1의 값이 저장됩니다. a는 초기에 5로 저장하였으므로 action함수를 작동시키면 a는 10이 됩니다.
조건식을 사용하기 위해서 조건식의 종류를 표로 보여드리겠습니다.
조건식 | 의미 | 참 예시 | 거짓 예시 |
a > b | a가 b보다 크다. | 3 > 1 | 1 > 3 |
a >= b | a가 b보다 크거나 같다. | 2 >= 2 또는 3 >= 2 | 1 >= 2 |
a < b | a가 b보다 작다. | 1 < 4 | 4 < 1 |
a <= b | a가 b보다 작거나 같다. | 3 <= 3 또는 1 <= 3 | 4 <= 3 |
a \\ b | a또는 b 둘중하나가 참이다. | true \\ true 또는 true \\ false | false \\ false |
a && b | a도 참이고 b도 참이다. | true && true | false && false 또는 false && true |
a == b | a와 b가 같다. | 3 == 3 | 1 == 3 |
a != b | a와 b가 다르다. | 1 != 3 | 3 != 3 |
if문
if와 else를 사용하고 3항 조건 연산자에서 참 거짓을 구별하고 값을 저장한 것과 다르게 조건에 따라 다른 작업을 수행해야 할 때 사용합니다.
if(expression1){
내용1
}
else if(expression2){
내용2
}
else{
내용3
}
위와 같이 if 옆에 괄호를 통하여 조건식을 달고 참이라면 내용 1이 수행됩니다. 거짓인 경우 다음으로 넘어가게 되는데 다음에 적힌 것이 else if입니다. else와 if가 같이 쓰인 상태로 역시 마찬가지로 if옆에 괄호를 이용하여 조건식을 달아서 사용합니다. 따져야 하는 조건이 많은 경우 else if를 계속 사용할 수도 있고 따져야 하는 조건이 하나라면 else if를 생략하고 아래와 같이 사용할 수도 있습니다.
if(expression){
내용1
}
else{
내용2
}
for문
반복되는 작업을 할 때 같은 코드를 반복하여 넣어도 작동을 하지만 코드가 길어지는 단점이 있습니다. 그럴 때 반복을 하게 해주는 문장 중 하나가 for문입니다. 사용 방법은 아래와 같습니다.
for (초기값; 조건식; 증가 또는 감소식){
반복할 내용
}
기초 틀은 위와 같지만 이걸 보고는 이해가 바로 안 되실 수 있기에 예시를 하나 들면 아래와 같습니다.
for(uint i =0; i<10; i++){
uint sum += i;
}
0~9까지 수를 더하는 반복문입니다. 초기에 i가 0으로 시작하여 sum에 더해지고 증감식으로 가서 i는 1이 되고 조건식에서 확인을 하니 10보다 작기에 다시 덧셈을 하러 갑니다. 이러한 반복을 통하여 i가 10이 되면 조건식이 거짓이 되어 for문이 끝납니다.
한 가지 더 예시를 들자면 아래와 같은 방법도 가능합니다.
contract Hello{
uint public sum = 0;
function action(){
for(uint i =0; i <21 ; i+=2)
sum+=i;
}
}
i를 1씩 올리지 않고 2씩 올리게 되며 각각의 i 값을 더하는 반복문입니다.
while문과 do while문
for문과 마찬가지로 반복 작업을 하는 반복문입니다. 차이점은 for문의 경우 초기값을 설정하고 증감식도 쓰고 조건식도 같이 썼지만 while문은 조건식만 작성하면 됩니다. 예시를 보여드리자면 아래와 같습니다.
while(조건식){
내용
}
while문은 시작하게 되면 조건문을 보고 조건이 맞으면 진행을 하기 때문에 한 번도 실행이 되지 않고 끝날 수도 있습니다.
이러한 점이 단점이 될 수도 있고 한 번은 실행을 하길 바란다면 while문 대신에 do while문을 사용하면 됩니다.
do{
내용 1
}while(조건식);
사용방법은 위와 같습니다. do를 이용하여 바로 내용 1이 실행이 되고 while문에 있는 조건을 통하여 더 반복을 하는지 결정합니다.
break와 continue
break는 반복문을 종료하기 위해서 사용을 하고 continue는 코드의 일부를 건너뛰고 싶을 때 사용합니다. break와 continue는 예시를 통하여 알아보겠습니다.
uint i =0;
uint sum = 0;
while(i<2000){
sum += i;
i++;
if(sum>200){
break;
}
}
위의 코드는 i의 합이 200을 넘으면 멈추는 반복문입니다. 하지만 i의 값이 얼마일 때 합이 200을 넘는지 모르는 상황에 이런 식으로 if문을 이용하여 200이 넘었다면 break를 사용합니다. 따라서 break로 인하여 반복문이 종료가 되고 합이 200이 넘는 순간이 i = 21이고, sum = 210이 됩니다.
continue의 예제를 보겠습니다.
uint i = 0;
uint sum = 0;
do{
if((i%3)==0){
sum +=(i*2);
i++;
continue;
}
sum += i;
i++;
}while(sum<500);
위의 내용은 i가 3의 배수인 경우만 i의 2배를 더하는 코드입니다. i와 sum이 0으로 선언되고 do를 통하여 문장이 시작됩니다. 시작하자마자 if문을 만나게 되고 (i%3) == 0이라는 조건식을 통하여 i의 값이 3의 배수인가 확인을 합니다. 3의 배수인 경우 i*2의 값을 sum에 더하고 i는 1이 증가된 이후 continue를 만나게 됩니다. continue를 만나면 그 뒤의 문장은 실행되지 않고 다시 do부터 시작하게 됩니다. continue문을 만났을 때 sum이 500을 넘었더라도 do부터 시작하기 때문에 sum에 한 번 더 덧셈이 이루어집니다. 따라서 500이 넘는 순간의 i값을 얻을 수 없습니다. 이런 경우를 조심하여야 합니다.