반응형


1. for 문

가장 간편하게 구현할 수 있는 반복문이다. 조건에 만족하면 반복하기 때문에 "for 루프"라고도 한다.


int a;

for( a=1; a<5; a++){

   System.out.println(a);

}

System.out.println("루프에서 벗어난 a값="+a);


for 문 앞의 작은괄호에는 초기화(a=1)_, 종료 조건(a<5), 증감 수식(a++)이 나열되어 있다. ++는 변수의 값에 1을 더해준다는 말로, 이 프로그램 코드를 번역하면 a는 1에서부터 출발하며, 5보다 작은 값이 될 때까지 a에 계속 1을 더하라는 말이다. 4를 벗어나면 조건식에서 벗어나므로 프로그램 실행결과는 다음과 같다. 


1

2

3

4

루프에서 벗어난 a값=5



2. while 문

for문에서 초기화 값이 사라진 상태. 명시된 조건이 true면 반복을 계속하고 false이면 while 블록을 빠져 나온다.


 int a=1;

while( a<5, a++){

  System.out.println(a);

  a++;

}

System.out.println("루프에서 벗어난 a값="+a);



이 코드는 먼저 a변수를 1로 선언해 주고, a가 5를 넘지 않을 때까지 a에 1을 쌓아 더하라는 말이다. 5를 넘으면 대괄호 밖으로 실행순서가 넘어가게 된다. 따라서 아까 for문과 출력되어 나오는 결과는 같다. 


3. do - while문

do - while문은 while문과 같지만 while 블록의 첫 실행이 무조건 실행된다는 것이 다르다. 


 int a=1;

do{

    System.out.println(a);

    a++;

} while( i>5 );

System.out.println("루프에서 벗어난 a값="+a);


do - while의 조건식은 대괄호 블록 뒤에 온다. 따라서 조건에 상관없이 첫번째 실행은 이루어지게 되는 것이다. 이 프로그램의 실행결과는 다음과 같다.


1

루프에서 벗어난 a값=2 


일단 블록 안의 것을 실행하므로 1을 출력하고, a의 값에 1을 더한다. 그리고 나서 조건식 적용을 시작하는데, a=2이르모, (i>5)식은 false, 거짓이다. 따라서 더 이상 반복하지 않고 프로그램 실행이 끝난다.


4. for문과 while문에는 어떤 차이가 있나?


for문은 조건식에 true가 되면 블록을 빠져나가고 while문은 조건식에 false가 되면 블록을 빠져나가라는 차이점이 있다. 둘은 문법적으로 완전히 대칭되면서 비슷한 역할을 수행하게 되는 것이다. 그리고 for문은 초기값을 정해준다는 것도 문법적인 차이점이다. 따라서 for문은 주로 반복 횟수가 정해져 있을 때 쓰고, while문은 횟수 상관없이 조건식을 만족하는 동안 반복해 수행할 작업이 있을 때 쓴다.



공부 외 단상


나한테 반복문을 걸고 싶을 때가 있다. 꾸준함이 필요할 때이다. 귀찮다고 느낄 때마다 내 감정을 포맷하고, 처음으로 돌아와 일을 할 수 있을까? 요새는 일본어, 중국어 등 외국어를 공부하고 있는데, 단어나 문법을 한 번 외우고 나면, 나중에 적용하려고 하면 어느새 잊어버린 채 헤매는 경우가 많다. 조건식을 걸어서 잊어버리면 바로 다시 공부내용을 읽어들이도록 나를 프로그래밍하고 싶다.

 



반응형
반응형


자바JAVA의 데이터타입에는 자바에서 기본적으로 제공하는 기본형과 사용자가 지정해 사용하는 사용자 정의 타입이 있다. 기본타입에는  정수형과 실수형, 문자형, 불린형(논리형)이 있다. 형변환은 프로그램 문장에서 데이터 타입을 일시로 변경하는 것이다. 


int a = 11, b = 12, c = 13, d = 1;

float e = 0;

c = (a+b+c)/4

System.out.println ("a와 b와 c와 d의 평균은 "+c+" 이다.");


a와 b와 c와 d의 합은 37이다. 이것을 나눈 값을 e에 대입한다. 11과 12와 13와 1을 더한 값이 37이므로, 이것을 4으로 나누면 c는 9.25다. 그렇다면 이 프로그램의 실행 결과가 "a와 b와 c의 평균은 9.25 이다."로 출력되는가? 


아니다. "a와 b와 c의 평균은 9.0 이다." 라고 출력되는 것을 볼 수 있을 것이다. 일단 뒤의 0.25가 없어진 건 정수끼리 계산하면 정수가 나오기 때문이다. 그런데 대입해야할 좌변의 변수는 실수 타입이다. 어떤 프로그램에서 타입이 다른 것들을 계산할 때는 하나의 타입으로 통일해서 계산한다. 이것을 자동 형변환이라고 한다.


그렇다면 이 프로그램에서는 어떤 타입으로 변환해야 할까? 자동 형변환의 변환 방식은 범위가 큰 쪽으로 통일한다. 수학적으로 정수보다는 실수의 범위가 넓고, 그렇다면 우변이 정수(int)타입이 아니라 실수형(float)타입으로 변환될 것을 예상할 수 있는 것이다. 자동 형변환은 말 그대로 자동으로 이루어지고, 작은 타입에서 큰 타입으로 바뀐다.


자동 형변환의 방향은 이렇다.


byte - short, char - int - long - float - double (오른쪽으로 갈수록 큰 타입)


자동 형변환은 데이터 타입이 다른 피 연산자들끼리 계산할 때 자바JAVA가 자체적으로 수행하는 기능이며, 크기는 작은 데이터 타입에서 큰 데이터 타입으로 변환된다. 그래서 정수형에서 실수형으로 데이터타입이 바뀌는 것이다. 그런데 이때 큰 타입에서 작은 타입으로 변하는 것은 직접 지정해줘야 하는데, 이것을 강제 형변환이라고 부른다.


float f = 20.5f;

int a = (int)f;

System.out.println("a= "+a);


프로그램 구문에서 빨간색 글씨로 표시된 것이 바로 강제 형변환이다. 변수 f앞에 (int)가 있는데, 이것은 캐스팅 연산자로, 캐스팅 연산자는 바꾸고 싶은 데이터 타입이다. 괄호 안에 원하는 타입을 써 주면 된다. 위에서는 int, 라고 썼으므로 정수형으로 바꾸고 싶다는 의미다. 그래서 빨간색으로 표시된 코드는 변수 f의 데이터 타입을 int, 즉 정수로 변환하여 저장한다.


자바JAVA구문에서 주의할 점은 강제 형변환 시, 소수점이 날아갈 수 있다. 보다 범위가 작은 데이터타입으로 축소되어 출력되기 때문이다. 그러니까 위의 프로그램의 결과값은 소수점 없이 그냥 20이 되겠다.



공부 외 단상


데이터타입처럼 마음에도 타입이 있고, 

너는 나를 항상 강제 형변환하려 든다.

내 마음의 범위를 항상 네 마음의 범위로 맞추려 드는 너.



반응형

+ Recent posts