본문 바로가기
Study/Java Study

자바스터디 2주차 (2)

by hongchii 2021. 5. 23.
728x90
반응형

2021.05.19 - [Study/Java Study] - 자바스터디 2주차 (1)

 

자바스터디 2주차 (1)

연산자 : 연산을 수행하는 기호 (+,-,*,/ 등) 피연산자 : 연산자의 작업 대상 (변수, 상수, 리터럴, 수식) 연산자의 종류 연산자의 우선순위 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된

hong-chii.tistory.com

 

제어문 : 프로그램의 흐름(flow)를 바꾸는 역할. 조건문,반복문이 있다.

 

 

1. 조건문 if, switch

 

1.1. if문

if문은 가장 기본적인 조건문이며, 만일(if) 조건식이 참(true)이면 괄호{}안의 문장들을 수행하라는 의미이다.

 

if (조건식) {
	//조건식이 참일때 수행될 문장
}

 

조건식

 

if문에서 사용되는 조건식은 일반적으로 비교연산자와 논리연산자로 구성된다. 그리고 조건식의 결과는 반드시 true 또는 false여야한다.

 

다음은 자주 사용되는 조건식이다.

조건식 조건식이 참일 조건
90 <= x && x <= 100 정수 x가 90이상 100이하일 때
x < 0 || x > 100 정수 x가 0보다 작거나 100보다 클 때
x % 3 == 0 && x % 2 !=0 정수 x가 3의 배수지만, 2의 배수는 아닐 때
ch == 'y' || ch == 'Y' 문자 ch가 'y' 또는 'Y'일 때
ch == ' ' || ch == '\t' || ch == '\n' 문자 ch가 공백이거나 탭 또는 개행 문자일 때
'A' <= ch && ch <= 'Z' 문자 ch가 대문자일 때
'a' <= ch && ch <= 'z' 문자 ch가 소문자일 때
'0' <= ch && ch <= '9' 문자 ch가 숫자일 때
str.equals("yes") 문자열 str의 내용이 "yes"일 때(대소문자 구분)
str.equalsIgnoreCase("yes") 문자열 str의 내용이 "yes"일 때(대소문자 구분안함)

 

블럭 { }

괄호{}를 이용해 여러 문장을 하나의 단위로 묶을 수 있는데, 이것을 블럭(block)이라고 한다. 블럭의 끝 } 에는 세미콜론 (;)을 붙이지 않는다. 또, 블럭 내의 문장이 하나뿐 일때는 괄호를 생략할 수 있지만 가능하면 생략하지 않고 사용하는 것이 바람직하다.

 

 

1.2. if-else문

if문의 조건식의 결과가 거짓일 때 else의 문장을 실행하라는 뜻이다.

 

if (조건식) {
	//조건식이 참(true)일때 수행될 문장
} else {
	//조건식이 거짓(false)일때 수행될 문장
}    

 

 

1.3 if-else if문

 

if-else문은 두가지 경우 중 하나가 수행되는 구조인데, 처리해야할 경우의 수가 셋이상인 경우에는 if-else if문을 사용하면 된다.

if (조건식1) {
	//조건식1의 연산결과가 참일 때 수행될 문장
} else if (조건식2) {
	//조건식2의 연산결과가 참일 때 수행될 문장
} else if (조건식3) { //여러개의 else if를 사용할 수 있다.
	//조건식3의 연산결과가 참일 때 수행될 문장
} else {
	//위의 어느 조건식도 만족하지 않을 때 수행될 문장
}    

 

첫 번째 조건식부터 순서대로 평가해서 결과가 참인 조건식을 만나면, 해당 블럭{}만 수행하고 'if-else if'문 전체를 벗어난다.

 

1.4 중첩 if문

if문 블럭 내에 또 다른 If문을 포함시키는 것이 가능한데 이것을 중첩 if문이라고 부르며 중첩의 횟수에는 거의 제한이 없다.

if (조건식1) {
	//조건식1과 조건식2가 모두 true일 때 수행될 문장들
	if (조건식2) {
    	//조건식1과 조건식2가 모두 true일 때 수행될 문장들
    } else {
    	//조건식1이 true이고, 조건식2가 false일 때 수행될 문장들
	}
} else {
	//조건식1이 true이고, 조건식2가 false일 때 수행될 문장들
}

 

1.5 switch문

switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있다. 처리할 경우의 수가 많은 경우에는 if문 보다 switch문으로 작성 하는 것이 좋지만 switch문은 제약조건이 있기 때문에 경우의 수가 많아도 어쩔 수 없이 if문으로 작성해야 하는 경우가 있다.

 

switch (조건식) {
	case 값1 :
    	//조건식의 결과가 값1과 같을 경우 수행될 문장
        break;
    case 값2 :
    	//조건식의 결과가 값2와 같을 경우 수행될 문장
        break;
    default :
		//조건식의 결과와 일치하는 case문이 없을 때 수행될 문장
}    
  1. 조건식을 계산한다.
  2. 조건식의 결과와 일치하는 case문으로 이동한다.
  3. 이후의 문장들을 수행한다.
  4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.

 

switch문에서 break문은 각 case문의 영역을 구분하는 역할을 한다. break문을 생략하면 case문 사이의 구분이 없어지므로 다른 break문을 만나거나 switch문 블럭{}의 끝을 만날 때까지 나오는 모든 문장들을 수행한다.

그러나 경우에 따라 break문을 생략하는 경우도 있다.

 

switch (level) {
	case 3 :
    	grantDelete(); // 삭제권한을 준다.
    case 2 :
    	grantWrite(); // 쓰기권한을 준다.
    case 1 :
    	grantRead(); // 읽기권한을 준다.


 

switch문의 제약조건
1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수 상수만 가능하며, 중복되지 않아야 한다.

 

 

 

2. 반복문 for, while, do-while

 

반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용된다. 

 

 

2.1 for문

for문은 반복 횟수를 알고 있을 때 적합하다.

for (초기화; 조건식; 증감식) {
	//조건식이 참일 때 수행될 문장
}

제일 먼저 초기화가 수행되고, 조건식이 참인 동안 '조건식 -> 수행될 문장 -> 증감식'의 순서로 계속 반복된다. 그러다가 조건식이 거짓이 되면, for문 전체를 빠져나간다.

초기화 반복문에 사용될 변수를 초기화하는 부분이며 처음에 한번만 수행된다.
보통 변수 하나로 for문을 제어하지만 둘 이상의 변수가 필요할 때는 콤마, 를 구분자로 변수를 초기화하면 된다.
조건식 조건식의 값이 참(true)이면 반복을 계속하고, 거짓(false)이면 반복을 중단하고 for문을 벗어난다. 
증감식 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다. 증감식도 콤마를 이용해서 두 문장 이상을 하나로 연결해서 쓸 수 있다.

위 세가지 요소는 필요하지 않으면 생략할 수 있으며, 심지어 모두 생략하는 것도 가능하다. 조건식이 생략된 경우엔 무한 반복문이 된다.

 

 

2.2 중첩 for문

if문 처럼 for문 안에 또 다른 for문을 포함시키는 것도 가능하다. 그리고 중첩의 횟수는 거의 제한이 없다.

for문 연습에는 별찍기가 가장 좋다.

 

이전에 했던 별찍기 예제들이다. 

https://hong-chii.tistory.com/120?category=1150868 

 

[Java] for문 연습 별 찍기

1. 별찍기-1 for(int i=1; i<=5; i++){ System.out.println("*****"); } i는 1로 초기화가 되어있다. 조건식 i<=5 에 i의 값을 대입하면 1<=5 이 되고, 이는 참(true)이기 때문에 다음 문장 ***** 이 출력된다. 그..

hong-chii.tistory.com

 

2.3 향상된 for문

JDK1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록 추가된 문법이다.

for ( 타입 변수명 : 배열 또는 컬렉션 ) {
	// 반복할 문장
}    

위의 문장에서 타입은 배열 또는 컬렉션의 요소의 타입이어야 한다. 배열 또는 컬렉션에 저장된 값이 매 반복마다 하나씩 순서대로 읽혀서 변수에 저장된다. 그리고 반복문의 괄호{}내에서는 이 변수를 사용해서 코드를 작성한다.

향상된 for문은 일반적인 for문과 달리 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용할 수 있다.

 

 

2.4 while문

while (조건식) {
	// 조건식의 연산결과가 참(true)인 동안 반복될 문장
}

while문은 먼저 조건식을 평가해서 조건식이 거짓이면 문장 전체를 벗어나고, 참이면 블럭{} 내의 문장을 수행하고 다시 조건식으로 돌아간다. 조건식이 거짓이 될 때까지 이 과정이 반복된다.

while문은 for문과 달리 조건식을 생략할 수 없다. 항상 참이 되도록 하려면 true를 넣어주면 된다.

 

 

for문과 while문의 비교

//for문
// 초기화, 조건식, 증감식
for (int i = 1; i <= 10; i++) {
	System.out.println(i);
}


-----------------------------------
//while문
int i = 1; // 초기화

while (i <= 10) { // 조건식
	System.out.println(i);
    i++; // 증감식
}    

 

2.5 do-while문

while문과 반대로 블럭{}을 먼저 수행한 후에 조건식을 평가한다. while문은 조건식의 결과에 따라 블럭{}이 한 번도 수행되지 않을 수 있지만, do-while문은 최소한 한번은 수행된다.

do {
	// 조건식의 연산결과가 참일 때 수행될 문장
} while (조건식); // 끝에 세미콜론에 주의하자

 

2.6 break문

반복문에서도 break문을 사용할 수 있는데, break문은 자신이 포함된 가장 가까운 반복문을 벗어난다. 주로 if문과 함께 사용되어 특정 조건을 만족하면 박복문을 벗어나도록 한다.

 

 

2.7 continue문

continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다. for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동한다.

continue문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과 다르다.전체 반복중에 특정조건을 만족하는 경우를 제외하고자 할 때 유용하다.

 

 

2.8 이름 붙은 반복문

break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩된 경우에는 break문으로 중첩 반복문을 완전히 벗어날 수 없기때문에 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다.

 

 

 

 

 

 

 

자바의 정석을 토대로 공부 후 정리한 내용입니다. 

728x90
반응형

'Study > Java Study' 카테고리의 다른 글

자바스터디 3주차 (2)  (0) 2021.05.26
자바스터디 3주차 (1)  (0) 2021.05.24
자바스터디 2주차 (1)  (0) 2021.05.19
자바스터디 1주차 (3)  (0) 2021.05.16
자바스터디 1주차 (2)  (0) 2021.05.16

댓글