본문 바로가기
Java/기초 Java

[기초 자바] 조건문과 반복문

by 호두빵 2021. 4. 7.

 

함수 정의 : 기능, 부품(확대될 것)

 

함수명은 타동사의 개념으로 적습니다. 마치 뒤에 목적어가 있다고 생각하고 작성하면 좋은데, 이는 관습적이라고 생각하면 됩니다. 

예를 들어서 member라는 정보를 가져올 경우에는? GetMember 이런 식으로 작성합니다.

 

자료형 함수명(입력){

          호출 시에 실행할 코드를 작성

}

 

void todo(int param)

//param이란? 매개변수를 뜻합니다. 함수가 필요로 하는 매개변수이죠.

ex. param = param*10;

return;// 함수는 종료되고 반환(출력)값은 없습니다.

만약에 반환형이 void가 아니고 무언가 써놨을 경우에는 반드시 return을 써줘야합니다. 그럼 return은 원하는대로 얼마든지 쓸 수 있는걸까요? 여러 번 쓰는 것 까지는 상관없지만 실행되는 것은 반드시 제일 먼저 쓴 것만 실행이 됩니다. 왜냐하면 제일 처음 위에서 return해버리고 나가기 때문입니다.

 

다른 클래스(소스)안에 작성된 함수를 호출할 때에는 어디에 있다는 것을 표현해줘야 합니다. 예를 들어 1반에도, 2반에도 김민지가 있다고 가정해보면, 나는 2반 김민지를 만나고 싶은데  무작정 김민지!!! 외친다면 1반의 김민지를 만나게 될 수도 있는 것이죠..

 

main 함수 속의 static/static이 붙은 함수 안에서 다른 함수 또는 변수를 사용할 경우에는 그것들도 모두 static이여야만 사용이 가능한데, 이는 main함수에서 미리 정해버렸기 때문입니다. 

static : 정적함수, 변수 / 미리 메모리에 생성해두었습니다.

 

field(멤버변수) : 클래스 주중괄호 안에 들어가고 함수 밖에 선언되는 변수.

클래스 안의 모든 함수들이 사용할 수 있습니다. 함수의 실행과 관계없이 계속해서 값이 유지 되기 때문에 되도록이면 상단에 모아두는 것이 보기에도 좋고  편리합니다.

 

지역변수 : 함수 안에서 선언되는 변수

함수가 실행될 때 나왔다가 함수가 끝나면 사라집니다. main 함수가 종료되면 이 변수도 사라지는 것입니다.

 

{}를 생각하면, 그 안에서 또 내부적인 지역 개념이 생깁니다.

각 중괄호 안에서만 힘을 발휘하는데 따라서 중괄호를 일종의 벽이라고 생각하면 됩니다. 하나하나의 중괄호를 지역이라고 생각합니다.

 


 

<제어문>

 

제어문 - 실행 제어 

if 문이란? 조건에 따라 실행을 결정하므로 if라는 단어가 뜻하는 바처럼 만약~ 한다면 이라는 가정을 해보는 것이죠.

 

boolean cond = true;

if(cond){

      System.out.println("조건이 참이다.");

}

boolean cond = true;
if(cond){
	System.out.println("조건이 참이다.");
}

이 경우에는 조건이 참이든 거짓이든 이후 내용이 실행됩니다. 위에서 cond를 true값으로 줬기 때문입니ㅏㄷ. 

주의! 같은 코드가 여러번 나오지 않도록 위치의 조정이 필요합니다.

if(cond) { 
	int number = 10;
} else {
	System.out.println("조건이 거짓이다.");
}

else는 혼자서 따로 쓸 수 없고, 항상 if와 함께 하는 존재입니다. 그러나 else에 코드를 쓸 때에는 이미 if에 적어놓은 코드를 의식하지 말고 별개로 보고 작성해야 합니다.

 

코드를 작성할 때에는 조건간의 관계, 영향을 생각해서 조건을 작성하는 습관을 키우는 것이 좋습니다. 제일 마지막 else가 실행되는 기준은 가장 가까운, 바로 위에 있는 코드가 거짓일 때 실행이 됩니다. 이는 상식적으로 생각해볼때에도 위에 코드가 참이면 바로 실행이 되기 때문에 굳이 else까지 넘어가지 않는 것입니다.


switch문

앞서 본 if문이 어떠한 조건에 따라 실행의 시작을 결정한다면, switch문은 값에 따라 실행의 시작을 결정합니다.. 

 

-> if 문은 두 가지 값에 따라(true/false) 분기를 수행하는데 비해 switch 문은 다양한 값에 대해 분기를 수행할 수 있습니다. 예를 들어 선택해야 하는 조건이 많은 경우에는 if~else문을 쓰면 굉장히 길어지고 복잡해질 수 있습니다. ~하면 ~하지않으면을 계속해서 듣는다고 생각해보면, 잔소리를 듣는 것 같겠죠?. 이러한 경우에는 switch~case문을 사용해서 다중 선택을 하면 구조가 보다 쉬워집니다. 두 가지가 서로 배타적인 것은 아니고 switch문은 if문으로 구현할수도 있습니다.(꼭 그러고 싶다면?) 그러나 반대의 경우에는 항상 구현이 이뤄지는 것은 아닙니다. if문을 switch문으로 바꾸는 것에는 제약이 큰데, 즉 if문이 사용에 제약이 덜하고 좀 더 열려있다는 뜻입니다. 

 

break문

해당 조건을 이미 만났으므로. 굳이 더 실행할 필요가 없는 것입니다. 그러므로 break문을 써서 멈춰줍니다. break문이 등장하는 곳은 switch~case문과 반복문, 오직 두 가지 경우에서만 쓰인다는 것을 명심해야합니다. 자주 쓰이는 것은 우리가 인터넷을 할 때 갑자기 등장하는 에러번호를 들 수 있겠습니다.

 

에러 번호가 뜨면 -> 이를 해결하기 위해 에러가 발생했을 때 이를 처리할 함수를 선택하는데 이때 switch~case문을 쓸 수 있습니다. 

 

int menu = 11;
int price = 0;

입력값(menu) -> 출력값 price

switch(menu) {
	case 1 :
		price = 500;
		break;
}

<반복문>

반복문 : 한 번 실행, 변하는 것 -> 영향을 가지고 있습니다.

- 검색, 목록처리에 쓰입니다.

 

$$조건식 - 변수가 있을 때, 반복하는 동안에 변해야합니다(그렇지 않으면 무한 반복이 되어버립니다.)

 

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

가운데 조건식을 생략한 경우에는 항상 참이라는 뜻입니다(무한반복이 시작됩니다)

}

 

반복횟수가 예측 가능해서 그 횟수만큼 반복하려고 할 때에는 for문을 씁니다. 

예. 김밥을 30줄 싸주세요 - 31줄은 만들지 않는다. 

 

반복횟수가 예측 불가능해서 특정 조건이 거짓일 때 반복을 중단하려는 경우에는 while문을 주로 사용합니다.

예. 김밥을 30분동안 싸주세요 - 31분이 되면 멈춘다.

 

do~while문 : 조건식의 결과에 관계없이 반복해서 실행할 명령문이 최소 한 번은! 실행됩니다. 출력을 먼저 해놓고 그 후에 조건식을 보기 때문입니다. 그러나 앞서 다뤘던 for문과 while문의 경우에는 조건식에 따라서 반복해서 실행할 명령문이 아예 실행되지 않을 수도 있습니다.